[med-svn] [libncl] 01/02: Imported Upstream version 2.1.18+dfsg

Andreas Tille tille at debian.org
Fri Jan 1 22:16:18 UTC 2016


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository libncl.

commit 2ad5050ff8679a608cacdafb8f22108927603cd5
Author: Andreas Tille <tille at debian.org>
Date:   Fri Jan 1 23:13:46 2016 +0100

    Imported Upstream version 2.1.18+dfsg
---
 AUTHORS                                            |    32 +
 BSDLicense.txt                                     |    24 +
 COPYING                                            |   280 +
 ChangeLog                                          |   380 +
 INSTALL                                            |    70 +
 Jamroot                                            |    53 +
 Makefile.am                                        |    16 +
 Makefile.in                                        |   801 +
 NEWS                                               |    35 +
 README                                             |    28 +
 aclocal.m4                                         |   975 +
 config.h.in                                        |   101 +
 config/ax_cxx_flags.m4                             |    97 +
 config/ax_python_module.m4                         |    49 +
 config/config.guess                                |  1501 +
 config/config.sub                                  |  1676 +
 config/depcomp                                     |   423 +
 config/install-sh                                  |   251 +
 config/libtool.m4                                  |  7831 ++++
 config/ltmain.sh                                   |  9636 +++++
 config/ltoptions.m4                                |   369 +
 config/ltsugar.m4                                  |   123 +
 config/ltversion.m4                                |    23 +
 config/lt~obsolete.m4                              |    98 +
 config/missing                                     |   360 +
 config/mkinstalldirs                               |    99 +
 configure                                          | 18947 ++++++++
 configure.ac                                       |   201 +
 data/characters.nex                                |   127 +
 data/distances.nex                                 |   246 +
 data/sample.tre                                    |    51 +
 data/unaligned.nex                                 |    28 +
 example/Makefile.am                                |    12 +
 example/Makefile.in                                |   578 +
 example/basiccmdline/Makefile.am                   |     4 +
 example/basiccmdline/Makefile.in                   |   493 +
 example/basiccmdline/basiccmdline.cpp              |  1045 +
 example/basiccmdline/basiccmdline.h                |   176 +
 example/compressor/Makefile.am                     |     5 +
 example/compressor/Makefile.in                     |   501 +
 example/compressor/compressor.cpp                  |   235 +
 example/gapcode/Makefile.am                        |     5 +
 example/gapcode/Makefile.in                        |   499 +
 example/gapcode/gapcode.cpp                        |   654 +
 example/nclsimplest/Makefile.am                    |     5 +
 example/nclsimplest/Makefile.in                    |   484 +
 example/nclsimplest/nclsimplest.cpp                |   108 +
 example/ncltest/Makefile.am                        |     7 +
 example/ncltest/Makefile.in                        |   497 +
 example/ncltest/ncltest.cpp                        |   359 +
 example/ncltest/ncltest.h                          |    23 +
 example/normalizer/Makefile.am                     |    33 +
 example/normalizer/Makefile.in                     |   727 +
 example/normalizer/converter.cpp                   |   909 +
 example/normalizer/normalizer.cpp                  |   858 +
 example/normalizer/normalizer.h                    |     1 +
 example/normalizer/us2ml.cpp                       |   866 +
 example/patristic/Makefile.am                      |     5 +
 example/patristic/Makefile.in                      |   484 +
 example/patristic/patristic.cpp                    |   304 +
 example/phylobaseinterface/Makefile.am             |     6 +
 example/phylobaseinterface/Makefile.in             |   495 +
 example/phylobaseinterface/NCLInterface.cpp        |  2236 +
 example/phylobaseinterface/NCLInterface.h          |   304 +
 example/splitsinfile/Makefile.am                   |     7 +
 example/splitsinfile/Makefile.in                   |   529 +
 example/splitsinfile/splitsinfile.cpp              |   435 +
 example/splitsinfile/splitsstructs.cpp             |   151 +
 example/splitsinfile/splitsstructs.h               |   224 +
 example/subsetter/Makefile.am                      |     5 +
 example/subsetter/Makefile.in                      |   499 +
 example/subsetter/subsetter.cpp                    |   190 +
 example/translate/Makefile.am                      |     8 +
 example/translate/Makefile.in                      |   504 +
 example/translate/translateNuc.cpp                 |   682 +
 html/BASICCMDLINE.html                             |   856 +
 html/COPYING                                       |   280 +
 html/MyAssumptionsBlock.html                       |   117 +
 html/MyCharactersBlock.html                        |   117 +
 html/MyDataBlock.html                              |   117 +
 html/MyNexusFileReader.html                        |   297 +
 html/MyNexusToken.html                             |    88 +
 html/MyToken.html                                  |   117 +
 html/NStrCaseInsensitiveEquals.html                |   117 +
 html/NStrCaseSensitiveEquals.html                  |   117 +
 html/NxsAssumptionsBlock.html                      |   657 +
 html/NxsBlock.html                                 |   461 +
 html/NxsCharactersBlock.html                       |  2207 +
 html/NxsDataBlock.html                             |   106 +
 html/NxsDiscreteDatum.html                         |   145 +
 html/NxsDiscreteMatrix.html                        |   659 +
 html/NxsDistanceDatum.html                         |   137 +
 html/NxsDistancesBlock.html                        |   805 +
 html/NxsEmptyBlock.html                            |   214 +
 html/NxsException.html                             |   171 +
 html/NxsReader.html                                |   510 +
 html/NxsSetReader.html                             |   292 +
 html/NxsString.html                                |  1186 +
 html/NxsStringEqual.html                           |    70 +
 html/NxsTaxaBlock.html                             |   373 +
 html/NxsToken.html                                 |  1191 +
 html/NxsTreesBlock.html                            |   472 +
 html/classes.html                                  |    57 +
 html/contents.html                                 |    32 +
 html/footer.html                                   |    16 +
 html/functions.html                                |   429 +
 html/index.html                                    |    38 +
 html/link_topol_and_mth_index.html                 |    67 +
 html/ncl.css                                       |    39 +
 html/roadmap.html                                  |    45 +
 html/styleguide.html                               |   292 +
 html/v2.0index.html                                |   765 +
 html/v2.1/COPYING.txt                              |   280 +
 html/v2.1/doxyfile                                 |   316 +
 html/v2.1/footer.html                              |    18 +
 html/v2.1/funcdocs/simpleNCLClient/Makefile        |    63 +
 .../funcdocs/simpleNCLClient/simpleNCLClient.cpp   |   350 +
 html/v2.1/index.html                               |   696 +
 html/v2.1/ncl.css                                  |   596 +
 ncl/Makefile.am                                    |    51 +
 ncl/Makefile.in                                    |   624 +
 ncl/ncl.h                                          |    97 +
 ncl/nxsallocatematrix.h                            |   253 +
 ncl/nxsassumptionsblock.cpp                        |  2807 ++
 ncl/nxsassumptionsblock.h                          |   391 +
 ncl/nxsblock.cpp                                   |   641 +
 ncl/nxsblock.h                                     |   366 +
 ncl/nxscdiscretematrix.h                           |   113 +
 ncl/nxscharactersblock.cpp                         |  5518 +++
 ncl/nxscharactersblock.h                           |  1972 +
 ncl/nxscxxdiscretematrix.cpp                       |   512 +
 ncl/nxscxxdiscretematrix.h                         |   264 +
 ncl/nxsdatablock.cpp                               |    63 +
 ncl/nxsdatablock.h                                 |    69 +
 ncl/nxsdefs.h                                      |   108 +
 ncl/nxsdiscretedatum.h                             |    58 +
 ncl/nxsdistancedatum.h                             |    42 +
 ncl/nxsdistancesblock.cpp                          |   714 +
 ncl/nxsdistancesblock.h                            |   197 +
 ncl/nxsexception.cpp                               |   106 +
 ncl/nxsexception.h                                 |    97 +
 ncl/nxsmultiformat.cpp                             |  1597 +
 ncl/nxsmultiformat.h                               |   260 +
 ncl/nxspublicblocks.cpp                            |   808 +
 ncl/nxspublicblocks.h                              |   731 +
 ncl/nxsreader.cpp                                  |  1396 +
 ncl/nxsreader.h                                    |   612 +
 ncl/nxssetreader.cpp                               |   536 +
 ncl/nxssetreader.h                                 |   104 +
 ncl/nxsstring.cpp                                  |  1041 +
 ncl/nxsstring.h                                    |   742 +
 ncl/nxstaxaassociationblock.cpp                    |   237 +
 ncl/nxstaxaassociationblock.h                      |   139 +
 ncl/nxstaxablock.cpp                               |   634 +
 ncl/nxstaxablock.h                                 |   484 +
 ncl/nxstoken.cpp                                   |  1058 +
 ncl/nxstoken.h                                     |   874 +
 ncl/nxstreesblock.cpp                              |  2045 +
 ncl/nxstreesblock.h                                |   983 +
 ncl/nxsunalignedblock.cpp                          |   917 +
 ncl/nxsunalignedblock.h                            |   332 +
 ncl/nxsutilcopy.h                                  |   264 +
 nclv2.1.pc.in                                      |    12 +
 swig/Makefile.am                                   |    12 +
 swig/ncl.i                                         |    91 +
 test/.DS_Store                                     |   Bin 0 -> 6148 bytes
 test/ExternalInvalidIn/aarelaxedphylip_rana.phy    |    65 +
 test/ExternalInvalidIn/dnarelaxedphylip_rana.phy   |    65 +
 test/ExternalValidIn/aaaln_twoprot.aln             |    26 +
 test/ExternalValidIn/aaaln_twoprot_undec.aln       |    29 +
 test/ExternalValidIn/aafasta_twoprot.fas           |    14 +
 test/ExternalValidIn/aaphylip_emboss.phy           |    13 +
 .../ExternalValidIn/aaphylipinterleaved_emboss.phy |    15 +
 test/ExternalValidIn/aarelaxedphylip_rana.phy      |    65 +
 test/ExternalValidIn/dnarelaxedphylip_brana.phy    |    82 +
 test/ExternalValidIn/dnarelaxedphylip_rana.phy     |    65 +
 test/ExternalValidIn/phyliptree_simple.phy         |     1 +
 test/ExternalValidOut/.DS_Store                    |   Bin 0 -> 6148 bytes
 test/ExternalValidOut/aaaln_twoprot.aln            |    16 +
 test/ExternalValidOut/aaaln_twoprot_undec.aln      |    16 +
 test/ExternalValidOut/aafasta_twoprot.fas          |    16 +
 test/ExternalValidOut/aaphylip_emboss.phy          |    18 +
 .../aaphylipinterleaved_emboss.phy                 |    18 +
 test/ExternalValidOut/aarelaxedphylip_rana.phy     |    78 +
 test/ExternalValidOut/dnarelaxedphylip_brana.phy   |    78 +
 test/ExternalValidOut/dnarelaxedphylip_rana.phy    |    78 +
 test/ExternalValidOut/phyliptree_simple.phy        |    16 +
 test/Makefile                                      |   373 +
 test/Makefile.am                                   |     8 +
 test/Makefile.in                                   |   373 +
 test/NCLtreeBork/choke.tre                         |    20 +
 test/NCLtreeBork/nextest.sh                        |    13 +
 test/NCLtreeBork/ok1.tre                           |    20 +
 test/NCLtreeBork/ok2.tre                           |    20 +
 test/NCLtreeBork/rana.nex                          |    76 +
 test/NTSInvalidIn/associates.nex                   |    30 +
 test/NTSInvalidIn/multitax.nex                     |    12 +
 .../71ac973b-9e2c-414a-b8d2-7eee9f5e0c74           |   109 +
 test/NTSValidIn/Untitled                           |   157 +
 test/NTSValidIn/adh.nex                            |    88 +
 test/NTSValidIn/adh.xml                            | 42660 +++++++++++++++++++
 test/NTSValidIn/adh.xml2                           |     0
 test/NTSValidIn/anolis.nex                         |   203 +
 test/NTSValidIn/associates.nex                     |    30 +
 test/NTSValidIn/avian_ovomucoids.nex               |   114 +
 test/NTSValidIn/basic-bush-dos.nex                 |    25 +
 test/NTSValidIn/basic-bush-mac.nex                 |     1 +
 test/NTSValidIn/basic-bush-mixed-line-endings.nex  |    18 +
 test/NTSValidIn/basic-bush-unix.nex                |    25 +
 test/NTSValidIn/basic-rake.nex                     |   160 +
 test/NTSValidIn/bglobin.nex                        |    46 +
 test/NTSValidIn/characters.nex                     |   148 +
 test/NTSValidIn/charsets.nex                       |    54 +
 test/NTSValidIn/chs.html                           |   469 +
 test/NTSValidIn/cynmix.nex                         |   716 +
 test/NTSValidIn/distances.nex                      |     1 +
 test/NTSValidIn/dzmissing_bug.nex                  |    99 +
 test/NTSValidIn/kim.nex                            |   444 +
 test/NTSValidIn/linktest.nex                       |   101 +
 test/NTSValidIn/m.nex                              |    21 +
 test/NTSValidIn/mdata.nex                          |    16 +
 test/NTSValidIn/nhxtree.nex                        |   160 +
 test/NTSValidIn/notaxablock.nex                    |    10 +
 test/NTSValidIn/out.xml                            |  1056 +
 test/NTSValidIn/parens_intree.tre                  |     9 +
 test/NTSValidIn/partitions.nex                     |    60 +
 test/NTSValidIn/paup_characters.nex                |    28 +
 test/NTSValidIn/primates.nex                       |    19 +
 test/NTSValidIn/protein.nex                        |    32 +
 test/NTSValidIn/replicase.nex                      |    48 +
 test/NTSValidIn/t.nex                              |   115 +
 test/NTSValidIn/treeswithouttaxa.nex               |     4 +
 test/NTSValidIn/unaligned.nex                      |    28 +
 test/NTSValidOut/adh.nex                           |    77 +
 test/NTSValidOut/anolis.nex                        |    47 +
 test/NTSValidOut/associates.nex                    |    19 +
 test/NTSValidOut/avian_ovomucoids.nex              |   106 +
 test/NTSValidOut/basic-bush-dos.nex                |    37 +
 test/NTSValidOut/basic-bush-mac.nex                |    38 +
 test/NTSValidOut/basic-bush-mixed-line-endings.nex |    37 +
 test/NTSValidOut/basic-bush-unix.nex               |    37 +
 test/NTSValidOut/basic-rake.nex                    |   133 +
 test/NTSValidOut/bglobin.nex                       |    40 +
 test/NTSValidOut/characters.nex                    |    98 +
 test/NTSValidOut/charsets.nex                      |    40 +
 test/NTSValidOut/cynmix.nex                        |    76 +
 test/NTSValidOut/distances.nex                     |     1 +
 test/NTSValidOut/dzmissing_bug.nex                 |    97 +
 test/NTSValidOut/kim.nex                           |    76 +
 test/NTSValidOut/linktest.nex                      |    92 +
 test/NTSValidOut/m.nex                             |    24 +
 test/NTSValidOut/mdata.nex                         |    24 +
 test/NTSValidOut/nhxtree.nex                       |   133 +
 test/NTSValidOut/notaxablock.nex                   |    18 +
 test/NTSValidOut/parens_intree.tre                 |    16 +
 test/NTSValidOut/partitions.nex                    |    59 +
 test/NTSValidOut/paup_characters.nex               |    21 +
 test/NTSValidOut/primates.nex                      |    26 +
 test/NTSValidOut/protein.nex                       |    20 +
 test/NTSValidOut/replicase.nex                     |    33 +
 test/NTSValidOut/t.nex                             |   118 +
 test/NTSValidOut/treeswithouttaxa.nex              |    16 +
 test/NTSValidOut/unaligned.nex                     |    19 +
 test/OldValidIn/m.nex                              |    21 +
 test/OldValidOut/m.nex                             |    17 +
 test/README                                        |    11 +
 test/TranslateIn/bglobin.nex                       |    46 +
 test/TranslateIn/bglobinoof.nex                    |    29 +
 test/TranslateOut/bglobin.nex                      |    29 +
 test/TranslateOut/bglobinoof.nex                   |    52 +
 test/data/characters.nex                           |    83 +
 test/data/sample.tre                               |    29 +
 test/funkyValidIn/choke.tre                        |    20 +
 test/funkyValidOut/choke.tre                       |    77 +
 test/roundTripNCLTest.py                           |   249 +
 275 files changed, 159267 insertions(+)

diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..03791dc
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,32 @@
+NCL AUTHORS -- the author of the NEXUS Class Library (NCL) version 2.0 is
+
+  Paul O. Lewis, Ph.D.
+  Assistant Professor
+  Department of Ecology and Evolutionary Biology
+  The University of Connecticut
+  75 North Eagleville Road, Unit 3043
+  Storrs, CT 06269-3043
+  U.S.A.
+
+  WWW: http://lewis.eeb.uconn.edu/lewishome
+  Email: paul.lewis at uconn.edu
+
+
+Versions after 2.0 contain changes primarily made by:
+  Mark T. Holder  mholder at users.sourceforge.net
+
+Other contributors to these versions include:
+  Derrick Zwickl
+  Brian O'Meara
+  Brandon Chisham
+  Fran�ois Michonneau
+  Jeet Sukumaran
+
+The code in examples/phylobase... was written by Brian O'Meara and Derrick Zwickl
+for phylobase.
+
+David Su�rez Pascal contributed SWIG bindings which heavily influenced those
+   found in branches/v2.2 
+
+Michael Elliot contributed some code to the branches/xml branch.
+
diff --git a/BSDLicense.txt b/BSDLicense.txt
new file mode 100644
index 0000000..21ac095
--- /dev/null
+++ b/BSDLicense.txt
@@ -0,0 +1,24 @@
+Copyright (c) 2003-2012, Paul O. Lewis
+Copyright (c) 2007-2012, Mark T. Holder
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+    Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..960fe74
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,280 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..e69a106
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,380 @@
+ChangeLog for NCL 2.1
+
+================================================================================
+changes in svn versus previous tagged version
+================================================================================
+================================================================================
+2.1.18 (relative to 2.1.17) SVN revision 641
+================================================================================
+	- As of March 09, 2012, NCL is available under a Simplified BSD license (see
+BSDLicense.txt) in addition to the GPL license.
+
+	- improved use of std:: decorator (to improve portability).
+
+	- bug fix in data pattern compression routine when a charset is passed in - this only affects client code that this using NCL to compress data matrices.  
+	
+	- bugfixes for reading newick trees (including a still-hacky fix for dealing with numeric labels that cannot be interpreted as indices)
+
+================================================================================
+2.1.17 (relative to 2.1.16)
+================================================================================
+New features:
+	- Warning suppression (mainly on integer conversion).  Thanks to John 
+		Huelsenbeck!
+	- config.guess updated using  automake v1.11.1 in response to report of user
+		error by DZ.
+	
+
+================================================================================
+release that will be 2.1.16 (relative to 2.1.15)
+================================================================================
+New features:
+	- TaxaAssociation block now supported and treated as a "public" block
+	
+	
+================================================================================
+2.1.15 (relative to 2.1.14)   Revision: 617
+================================================================================
+bug fix: 
+	- NxsReader returns the most-recently read block read by default (as the
+		error message has always indicated) rather than the first block. This
+		only affects blocks without link commands and ambiguous 
+		references to blocks.
+	- typo fixed in error message for invalid fasta file reporting
+	
+New features enhancements:
+	- configure argument --with-reserveid added, so that the variable 
+		name id will not be used. This avoids conflict with the objective C 
+		keyword "id". thanks to John Huelsenbeck for the bug report
+	- non-recursive NxsSimpleNode::AddSelfAndDesToPreorder (for huge trees)
+	- refactored NxsSimpleNode to add RerootAtNode function
+
+================================================================================
+2.1.14 (relative to 2.1.13)   Revision: 611
+================================================================================
+
+Changes breaking backward compatibility with v2.1.13:
+    - None
+    
+    
+API changes:
+    - Moving several functions if optional tree processing from private to public
+    
+    - Changed some of the less-widely used example programs to noinst_PROGRAMS 
+        rather than bin_PROGRAMS so that we are not polluting the /usr/local/bin dir 
+         of every user
+
+New features:
+
+    - NxsTreesBlock::SetTreatAsRootedByDefault(false) can now be called so that 
+    	trees read will be treated as unrooted by default (this setting will be
+	    ignored if the tree is explicitly labeled as rooted via [&R] comment or
+	    unrooted via UTREE command or [&U] comment).
+    - NxsToken::Tokenize static function added (takes a string and returns a vector
+        of tokens.
+    - SetCoerceUnderscoresToSpaces added to MultiFormatReader
+    - GetNumLabelsCurrentlyStored added to NxsLabelToIndicesMapper to help with parsing
+        numeric trees
+    - Added optional treatIntegerLabelsAsNumbers setting to NxsTreesBlock for reading
+        numeric trees
+    - Added some functions for compressing redundant columns of a data matrix (see
+        the new example
+    - More command line flags supported by NCLConvertor, NEXUSnormalizer and gap 
+        code
+
+Bug Fixes:
+    - hasPolytomies field of NxsFullTreeDescription is now set correctly. 
+    - parsing of weight set of assumptions block
+    - configure now fails (as it should) if CXX is not working 
+
+
+
+
+================================================================================
+2.1.13 (relative to 2.1.12)   Revision: 575
+================================================================================
+
+minor API changes:
+	- nxscxxdiscretematrix ctor now takes an optional set of indices to include.
+	- It was convenient to make some of the error reporting functions more 
+		generic, so the NxsException class was given a addPositionInfo method,
+		and some of the characters block code was slightly refactored (to not
+		demand a NxsToken object for some calls).
+	- specified the facet values for the DataTypesEnum so that it will be easier 	
+		for client code written in non-C++ languages to interpret GetDataType()
+
+bug fixes:
+	- fixed strange pointer equality check that had used subtraction (and was
+		causing problems on new windows g++ - v4.2 64bit).
+	- explicitly casting return of size() to an unsigned to avoid g++ issues
+		with the NxsString << operators.
+	- You now must compile with HAVE_NCL_NXSSTRING_ENDL defined if you want the
+		funky NxsString&operator<<(NxsString &(*funcPtr)(NxsString&)) operator.
+	- include of <iterator> for vis studio 2010
+	- Changes to allow compilation in Visual Studio.
+new features:
+	- Added support for the .fin files that are posted by Goloboff et al in
+		their  Cladistics 25 (2009) 211�230 paper.
+	- better error message for too few taxa in characters and unaligned block
+	- bug fix: only affects writing of NEXUS from file formats that do not
+		contain tree names.  Trees were being printed without NEXUS names
+	- validateInternalNodeLabels flag added to NxsTreesBlock. True by default, 
+		but if set to false then the NxsTreesBlock will tolerate trees with
+		internal labels that correspond to integers by storing the label as a
+		string but not interpretting it as a taxon label
+	- another example added: NEXUSsubsetter is not an install product.  It reads 
+		a NEXUS file and a CharSet or TaxSet name
+
+
+
+================================================================================
+2.1.12 (relative to 2.1.09)
+================================================================================
+
+Removal of  trailing whitespace and large scale code reformatting will cause
+	diff to indicate a huge number of changes in this release but the
+	functionality has actually not changed much since 2.1.09
+
+Bug fixes:
+	- added more includes needed by g++ 4.4.01
+	- NxsReader::ClearUsedBlockList is more sensible (it clears more fields).
+	- NxsString no longer includel ncl/ncl.h it now includes ncl/nxsdefs.h
+	- memory leak had been occurring when NxsExceptions were raised from a
+		cloned block and the NxsReader was an ExceptionRaisingNxsReader
+	- nxsdistancedatum.cpp and nxsemptyblock.* removed
+	- block skipping -- now NCL will not be fooled by and end or endblock
+subcommand.
+	- now checks for continuous characters in IsGapState and IsMissing
+
+
+
+
+Library enhancements:
+	- much better documentation of v2.1 features
+	- several convenience functions added especially to assist processing of the
+		NxsCharactersBlock
+	- added a modified version of NCLInterface.h from phylobase as an example.
+		The file was written by Brian O'Meara and Derrick Zwickl
+	- added more flexible, but admittedly hacky method for controlling the level
+		of warnings that get printed out. Altering the warning level will also
+		turn off status messages.  So a bool member was added to NxsReader so
+		that client code can request that status messages still be shown.
+	- added a Free method to Scoped... containers in nxsallocatematrix.h
+	- added hot comments for autogeneration of v2.2 from v2.1 code
+
+================================================================================
+2.1.09 (relative to 2.1.06)
+================================================================================
+Bug fixes:
+	- added includes needed by g++ 4.4.01
+
+================================================================================
+2.1.08 (relative to 2.1.06)
+================================================================================
+Bug fixes:
+	- updated nexml writing to deal with changes in the schema
+	- fixed bug causing mis-indexing of taxa in trees if there is no taxa block
+		but a translate command.  This involves support for illegal nexus files.
+		I believe that the bug would have showed diagnosable pathologies if it
+		had affected any analysis (the highest number in the tree would have
+been
+		1 too high resulting in exceptions when the taxa block was queried).
+	- bug fix when trees are followed by labels that contain tokens that have to
+		be quoted
+	- fixed behavior of GetNamedStateSetOfColumn and GetObsStates so that they
+		are sensitive to the current gapmode for the char block
+	- explicit inclusion of cstdlib where needed
+
+Library enhancements:
+	- Signal handling (via NxsReader::setNCLCatchesSignals ) commit r449
+	- Lots of external format extensions and bug fixes:
+		- converter application added in examples
+		- export to AltNexus
+		- CLUSTAL's .aln reading (not well tested)
+================================================================================
+2.1.06 (relative to 2.1.05)
+================================================================================
+
+Up to svn revision 376
+
+bug fixes (visible to end-users):
+	- opening files in binary mode (failing to do so cause problems with end-of-
+		line and other special characters).
+	- character index (0-based rather than 1-based number) was being printed in
+		some contexts in error messages
+	- Apple g++-4.2 optimization bug now has a workaround
+	- Characters blocks now reject files in which the datatype is DNA, RNA, or
+protein
+		if SYMBOLS are added.
+
+
+bug fixes API:
+	- Fixed setting of NXS_HAS_ALL_TAXA_BIT
+	- no longer duplicating blocks when the same reader is used to read more
+		than one file
+	- allowing PublicNexusReader::Add to be called
+	- Some Windows-specific modifications to avoid warnings and errors compiling
+		under Visual Studio 2008 (VC9)
+	- characters block now generates an exception if there is no matrix
+	- NxsReader::BlockIsASingeltonReader problem fixed
+	- better cleaning up in the multiformat reader when there is an error in the
+		reading of a file
+	- another accessor added for NxsSimpleTree
+	- PublicNexusReader GetXXXBlock functions changed to return 0L rather than
+		raising an exception if you request a block that is out of range
+	- NCL_CONST_FUNCS macro added
+
+API additions:
+	- improvements to phylip reading -- matchchar now accepted (multiformat
+		reader only).
+	- reading a single bare newick tree (as "phyliptree" or "relaxedphyliptree"
+		in multiformat reader stuff).
+	- added cullIdenticalTaxaBlocks() function to nexusreader.  You should call
+		this before reading a file if you want all repeated taxa blocks to be
+		destroyed rather than saved
+	- support for genetic codes and translation to amino acids added
+	- GetEscapedDouble and GetEscapedInt added
+	- GetDatatypeMapForMixedType added
+	- added functionality to delete identical taxa blocks even if they are
+		implied blocks.  This only will be triggered if the client code has
+		called NxsReader::cullIdenticalTaxaBlocks(true).  This corrects an
+		issue DZ was seeing with reading multiple DATA blocks
+	- aliasing of block titles for culled blocks
+	- changed the handling of  the + character when a nxstoken instance has been
+		altered by a call to indictate hyphenNotPunctuation is in effecet (this
+		is done via the SetLabileFlagBit function). In almost all case this
+		function is called so that a number (particularly one writtend in
+		scientific notation will be read as a single token, rather than as many
+		as 4 tokens).  In rare cases, the + is used before the exponent or even
+		in front of the entire number.  So that client code does not have to
+		deal with these cases, the default behavior has been changed to using
+		the hyphenNotPunctuation to indicate that in the reading of the next
+		token neither - nor + should be treated as punctuation.  Client code
+		that wishes to use the old behavior can compile NCL with the
+		NCL_VERSION_2_STYLE_HYPHEN macro defined to 1
+
+================================================================================
+2.1.05 (relative to 2.1.04)
+================================================================================
+Added include <cstdlib> at top of nxsdistancesblock.cpp and nxstoken.cpp to
+avoid compilation errors on Fedora 9 systems.
+
+================================================================================
+2.1.04 (relative to 2.1.03)
+================================================================================
+Added inclusion of <climits> for gcc 4.3 (bug report by Brian Omeara)
+
+================================================================================
+2.1.03 (relative to 2.1.02)
+================================================================================
+minor bug fixes Jamroot file added for compilation  with bjam
+
+================================================================================
+2.1.02 (relative to 2.1.00)
+================================================================================
+minor bug fixes and const correctness
+
+================================================================================
+Since 2.1-specific changes.
+================================================================================
+Support for multiple instances of the same block type
+	* NxsBlockFactory mechanism API - see the examples/normalizer for an
+		example of usage. Full adoption of these API's is not required, but may
+		make your life easier.
+	* Reader now stores "implied blocks" -- e.g. makes a DATA block look to the
+		client code like a TAXA block and CHARACTERS block. This improves the
+		abstraction for library users.
+
+Other features added:
+	* commas tolerated in multiple state lists in the cells of a matrix {A,G}
+		the same as {AG}.  Such files are not legal, but are common.
+	* handling for TITLE and BLOCKID commands added to NxsBlock
+	* optimizations (tokenizing and data structures in taxa block) -- now 50
+		fold faster than 2.0 on the 11361 Taxon, 1360 Character file in the
+		CIPRES test files.
+	* TaxPartition and TreePartition read
+	* SETS and CODONS blocks now read. Actually read as a big, fat ASSUMPTIONS
+		block that spawns implied blocks (to deal with common practice of mixing
+		the commands in these blocks).
+	* WtSet, UserType, and TypeSet command
+	* now tolerating DATATYPE not being first in FORMAT command (to deal with
+		Clustal exports)
+	* tokenizer now skipping embedded comments (note that this changes the
+		behavior of command comment storing -- they are only returned if they
+		precede token)
+	* support for DATATYPE=MIXED added in CHARACTERS block
+	* trees block can now validates trees as they are read to improve error
+		reporting  -- this feature not used unless TreesBlock::
+		SetProcessAllTreesDuringParse(true) is called on the trees block
+		instance.
+	* some support for NHX parsing -- in the TreesDescription.
+	* support for LINK command (as introduced by Mesquite)
+	* support Mesquite-style CharSet/TaxSet syntax.
+ 	* NCL_MAJOR_VERSION and  NCL_MINOR_VERSION defines added. You can wrap any
+ 		ncl-2.1 specific code (you shouldn't need much) as follows:
+
+================================================================================
+#	if defined(NCL_MAJOR_VERSION) && (NCL_MAJOR_VERSION >= 2) &&
+(NCL_MINOR_VERSION >= 1)
+		trees->SetAllowImplicitNames(true);
+#	endif
+================================================================================
+
+
+
+bug fixes:
+	* RNA equates bug reported by DZ
+	* case of equate keys  (characters of both cases are now added for molecular
+		data) reported by DZ
+	* Tax and Charset reading now tolerate Standard keywords (they still
+		generate errors for VECTOR)
+	* fixes to the Distances block if the input order is not identical to the
+		taxa block order
+	* Some CharSet reading
+	* Lots more that I forgot to document.
+
+Behavior changes (could be called features or bugs depending on your POV):
+	* Now converts any built in CHARACTERS datatype that has symbols extensions
+		to standard datatype.
+
+
+
+================================================================================
+Since 2.0.0
+================================================================================
+12 Dec 2007 Mark Holder (mholder at users.sourceforge.net)
+	* Version 2.0.04 (https://svn.sourceforge.net/svnroot/ncl/branches/v2-stable
+revision 75)
+	* new features: Basic handling of Continuous datatype (ITEMS now
+		supported).  Brian O'Meara contribute code and suggestions to this
+		new feature.
+	* bug fixes: taxa information after a treedef (root taxa info) is now
+		accepted
+
+30 Nov 2007 Mark Holder (mholder at users.sourceforge.net)
+	* Paul's unaligned parsing block functionality added
+	* bug fixes (newtaxa is now implicit if ntax is used, other small changes
+		mainly pertaining to writing NEXUS, and testing with a round trip)
+
+
+18 Dec 2006 Mark Holder (mholder at users.sourceforge.net)
+	* Version 2.0.02 (https://svn.sourceforge.net/svnroot/ncl/branches/v2-stable
+revision 47)
+		- bug fixes to Version 2.0.01 (errors introduced in CharactersBlock
+Version 2.0.01 while suppressing errors)
+		- improvements to regression testing
+
+03 Nov 2006 Mark Holder (mholder at users.sourceforge.net)
+	* Version 2.0.01
+		- minor reorganization (examples dir)
+		- suppressing warnings
+		- reworked Makefile and configure (fixes link error from multiply
+defined objects on some Linux variants)
+
+20 May 2003 Paul Lewis (paul.lewis at uconn.edu)
+	* Version 2.0 released (first official release)
+
+================================================================================
+Latest changes
+================================================================================
+
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..fc8cb58
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,70 @@
+Copyright (c) 2004 by Paul O. Lewis
+
+================================================================================
+Building from svn checkout
+================================================================================
+In the instructions, the $ represents your shell's prompt (you don't type the in
+
+the $ part of the command -- note that if you are using a different shell you
+may see a % instead of $. That is fine, the instructions should still work).
+
+	$ sh bootstrap.sh
+	$ cd ..
+	$ mkdir build
+	$ cd build
+	$ ../v2.1/configure
+	$ make
+	$ make check
+	$ make install
+	$ make installcheck
+
+================================================================================
+Building from svn checkout
+================================================================================
+After you unpack the archive follow the instructions above (in the
+"Building from svn checkout" section), except that you can skip the first step.
+
+
+================================================================================
+Installing to a non-standard location
+================================================================================
+Note that if you are anticipating keeping up-to-date with the
+repository or have multiple NCL builds that you test against, then
+you may want to install in a non-standard location.
+For instance invoking:
+	$ ../v2.1/configure --prefix=`pwd`/installed
+will make the install products go inside an installed subdirectory
+of your build directory. This is paricularly helpful if you
+build several different variants (you can have builddebug and buildrelease
+directories built from the same source tree).
+
+If you do install to a non-standard location, then you may have to add the path
+to the installed library (the argument to prefix plus the subdirectory lib/ncl)
+to your LD_LIBRARY_PATH environmental variable. Note that on Mac (and possibly
+other BSD OS versions) you have to set the DYLD_LIBRARY_PATH variable rather
+than LD_LIBRARY_PATH.
+
+If you use bash you can do this by adding something like this to your
+~/.bash_profile file:
+##############################################################################
+if test -z $LD_LIBRARY_PATH
+then
+���LD_LIBRARY_PATH="/abs/path/to/your/install/prefix/lib/ncl"
+else
+���LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/abs/path/to/your/install/prefix/lib/ncl"
+fi
+export LD_LIBRARY_PATH
+
+##############################################################################
+
+where you substitute the path that you passed as a --prefix to configure for the
+string "/abs/path/to/your/install/prefix" above.
+
+
+
+================================================================================
+bjam builds
+================================================================================
+NCL also includes a Jamroot file for users who have projects that are built
+with the bjam tool.
+
diff --git a/Jamroot b/Jamroot
new file mode 100644
index 0000000..ed016f0
--- /dev/null
+++ b/Jamroot
@@ -0,0 +1,53 @@
+# Project-wide requirements
+# Requirements apply to building the ncl library
+# Usage-requirements apply to dependants (i.e. phycas)
+
+import os ;
+local PHYCAS_MAC_UNIVERSAL = [ os.environ PHYCAS_MAC_UNIVERSAL ] ;
+local PHYCAS_NCL_STATIC = [ os.environ PHYCAS_NCL_STATIC ] ;
+
+#alias tool_specific_requirements : : : : <toolset>darwin <cxxflags>"-arch ppc -arch i386" <linkflags>"-arch ppc -arch i386" ;
+
+if $(PHYCAS_MAC_UNIVERSAL) {
+project ncl 
+  : requirements 
+      <include>.  <cxxflags>"-arch ppc -arch i386" <linkflags>"-arch ppc -arch i386"
+      <link>shared
+    ;
+} else if $(PHYCAS_NCL_STATIC) {
+project ncl 
+  : requirements 
+      <include>. 
+      <link>static
+    ;
+} else {
+project ncl 
+  : requirements 
+      <include>. 
+      <link>shared
+    ;
+}
+
+# Build and install the NCL library
+alias ncl_sources
+  : ncl/nxsassumptionsblock.cpp
+    ncl/nxsblock.cpp
+    ncl/nxscharactersblock.cpp
+    ncl/nxscxxdiscretematrix.cpp
+    ncl/nxsdatablock.cpp
+    ncl/nxsdistancesblock.cpp
+    ncl/nxsexception.cpp
+    ncl/nxsmultiformat.cpp
+    ncl/nxspublicblocks.cpp
+    ncl/nxsreader.cpp
+    ncl/nxssetreader.cpp
+    ncl/nxsstring.cpp
+    ncl/nxstaxablock.cpp
+    ncl/nxstoken.cpp
+    ncl/nxstreesblock.cpp
+    ncl/nxsunalignedblock.cpp ;
+project : usage-requirements <include>./ncl <include>. ;
+lib ncl : ncl_sources ;
+install ncl_library 
+  : ncl 
+  : <location>dist ;
\ No newline at end of file
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..04311ab
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,16 @@
+SUBDIRS = ncl example $(MAYBE_TEST_DIR) $(MAYBE_SWIG_DIR)
+
+pkgconfigdir= $(libdir)/pkgconfig
+pkgconfig_DATA= nclv2.1.pc
+
+EXTRA_DIST = data html test Jamroot swig INSTALL COPYING AUTHORS NEWS BSDLicense.txt
+
+ACLOCAL_AMFLAGS = -I config
+
+
+dist-hook:
+	find "$(distdir)/data" -depth -name .svn -and -type d -and -exec rm -rf {} \;
+	find "$(distdir)/html" -depth -name .svn -and -type d -and -exec rm -rf {} \;
+	find "$(distdir)/test" -depth -name .svn -and -type d -and -exec rm -rf {} \;
+	find "$(distdir)/swig" -depth -name .svn -and -type d -and -exec rm -rf {} \;
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..f6e8cc5
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,801 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/nclv2.1.pc.in $(top_srcdir)/configure AUTHORS \
+	COPYING ChangeLog INSTALL NEWS config/config.guess \
+	config/config.sub config/depcomp config/install-sh \
+	config/ltmain.sh config/missing config/mkinstalldirs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = nclv2.1.pc
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+DATA = $(pkgconfig_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = ncl example $(MAYBE_TEST_DIR) $(MAYBE_SWIG_DIR)
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = nclv2.1.pc
+EXTRA_DIST = data html test Jamroot swig INSTALL COPYING AUTHORS NEWS BSDLicense.txt
+ACLOCAL_AMFLAGS = -I config
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+	else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+nclv2.1.pc: $(top_builddir)/config.status $(srcdir)/nclv2.1.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+	@if test -z "$(am__skip_length_check)" && find "$(distdir)" -type f -print | \
+	  grep '^...........................................................................................................................................................................................................................................................................................................' 1>&2; then \
+	  echo 'error: the above filenames are too long' 1>&2; \
+	  exit 1; \
+	else :; fi
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzma: distdir
+	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+	$(am__remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lzma*) \
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@$(am__cd) '$(distuninstallcheck_dir)' \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+	distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-pkgconfigDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+	ctags-recursive install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am am--refresh check check-am clean clean-generic \
+	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+	dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
+	dist-zip distcheck distclean distclean-generic distclean-hdr \
+	distclean-libtool distclean-tags distcleancheck distdir \
+	distuninstallcheck dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkgconfigDATA install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am uninstall-pkgconfigDATA
+
+
+dist-hook:
+	find "$(distdir)/data" -depth -name .svn -and -type d -and -exec rm -rf {} \;
+	find "$(distdir)/html" -depth -name .svn -and -type d -and -exec rm -rf {} \;
+	find "$(distdir)/test" -depth -name .svn -and -type d -and -exec rm -rf {} \;
+	find "$(distdir)/swig" -depth -name .svn -and -type d -and -exec rm -rf {} \;
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..555af7a
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,35 @@
+NCL NEWS -- history of user-visible changes.  20 May 2003
+
+Copyright (C) 2003-2008 Paul O. Lewis
+
+Please send NCL bug reports to paul.lewis at uconn.edu.
+
+See ChangeLog for details about minor upgrades.
+
+Version 2.0
+-----------
+This version significant upgrade to NCL in terms of ease of use for programmers
+and the coverage of variants of NEXUS files.  This version naturally supports
+multiple instances of blocks (common in files from Mesquite) and the Mixed
+datatype used by MrBayes. Support for the UNALIGNED and ASSUMPTIONS block has
+been dramatically improved. The SETS and CODONS blocks are now handled
+(they are treated as special forms of the ASSUMPTIONS block to tolerate the
+inclusion of many of the same commands in different block types). Almost all of
+the changes in this version were made by Mark Holder, so please direct bug
+reports, questions, and feature requests to him (though the sourceforge page
+is the best place to report these).
+
+
+Version 2.0
+-----------
+Although this is the second version of the library, it is really the
+first official release. My container classes used in the first version
+have been replaced by their STL equivalents, and the source code
+documentation is now much more thorough. This version is being pubicized
+in the form of an application note in the journal Bioinformatics.
+
+Version 1.0
+-----------
+This first version did not make use of the standard template library,
+instead using container classes of my own design. This version was
+distributed from my web site, but never publicized.
diff --git a/README b/README
new file mode 100644
index 0000000..fd0ca2a
--- /dev/null
+++ b/README
@@ -0,0 +1,28 @@
+NCL README -- the NEXUS Class Library (NCL) README file
+
+Most documentation for this C++ class library is in the form of HTML
+files in the html directory. Please begin by viewing the html/index.html
+file in your web browser.
+
+See the INSTALL file for important information about building and installing
+the NCL and example programs, and incorporating the NCL into your own
+applications.
+
+As of March 09, 2012, NCL is available under a Simplified BSD license (see
+BSDLicense.txt) in addition to the GPL license.
+
+ACKNOWLEDGEMENTS
+	Many of the files used for testing were provided by Arlin Stoltzfus (see
+http://www.molevol.org/camel/projects/nexus/ for more information), the Mesquite
+package, and from TreeBase (thanks, to Bill Piel!).
+
+	The SWIG bindings for version 2.1 were inspired by the work of David Suarez
+Pascal in the 2007 Google Summer of Code.  They were simplified using new
+features of NCL 2.1.  Thanks to David for blazing the way on the old version,
+Google for funding, and NESCent (in particular Hilmar Lapp) for getting the
+NESCent GSoC program going.
+
+    The 2010 GSoC effort also led to enhancements in terms of annotation storage
+and xml parsing which are currently on 
+    https://ncl.svn.sourceforge.net/svnroot/ncl/branches/xml
+    Thanks to NESCent, Google, and Michael Elliot for that support.
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..aecd6be
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,975 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([config/ax_cxx_flags.m4])
+m4_include([config/ax_python_module.m4])
+m4_include([config/libtool.m4])
+m4_include([config/ltoptions.m4])
+m4_include([config/ltsugar.m4])
+m4_include([config/ltversion.m4])
+m4_include([config/lt~obsolete.m4])
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..878c8ea
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,101 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to 1 if you have the `alarm' function. */
+#undef HAVE_ALARM
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <float.h> header file. */
+#undef HAVE_FLOAT_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
diff --git a/config/ax_cxx_flags.m4 b/config/ax_cxx_flags.m4
new file mode 100644
index 0000000..d367433
--- /dev/null
+++ b/config/ax_cxx_flags.m4
@@ -0,0 +1,97 @@
+dnl @synopsis AX_CXXFLAGS()
+dnl @author Mark Holder based on examples by Dave Swofford
+dnl @version 2006-01-02
+dnl @license AllPermissive
+AC_DEFUN([AX_CXXFLAGS],
+[
+
+	dnl Check for debugging mode.
+	AC_ARG_ENABLE(
+		debugging,
+		AC_HELP_STRING(
+			[--enable-debugging],
+			[build for debugging]
+			),
+		,
+		[enable_debugging=no]
+		)
+	AC_ARG_ENABLE(
+		asserts,
+		AC_HELP_STRING(
+			[--enable-asserts],
+			[build with asserts turned on even if not debugging]
+			),
+		,
+		[enable_asserts=yes]
+		)
+	if test "$enable_debugging" = yes
+	then
+		AC_MSG_NOTICE([*** NOTE: debugging is enabled; optimization is suppressed!])
+	else
+		if test "$enable_asserts" = no
+		then
+			AC_MSG_NOTICE([*** NOTE: asserts will be disabled!])
+			CXXFLAGS="$CXXFLAGS -DNDEBUG"
+		fi
+	fi
+
+
+	if test "$enable_debugging" = yes; then
+		CXXFLAGS_OPTIM_SPEED="-O0"
+		CXXFLAGS="$CXXFLAGS -g"
+	else
+		CXXFLAGS_OPTIM_SPEED="-O"
+	fi
+
+	if test "$CXX" = "icpc" -o "$CC" = "icc" ; then
+			#	Intel C compiler for Linux
+		if test "$enable_debugging" = no; then
+			CXXFLAGS_OPTIM_SPEED="-O3"
+			CXXFLAGS_OPTIM_SIZE="-O2"
+		fi
+		case "$build_os" in
+			darwin*) CXXFLAGS="$CXXFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 ";;
+			*);;
+		esac
+	elif test "$CC" = "ccc"; then
+			#	Compaq C compiler for Linux
+		if test "x$arch" = "x"; then
+			arch="host"
+		fi
+		if test "$enable_debugging" = no; then
+			CXXFLAGS_OPTIM_SPEED="-fast -inline speed -arch $arch"
+			CXXFLAGS_OPTIM_SIZE="-fast -inline size -unroll 1 -arch $arch"
+		fi
+	elif test "$CC" = "xlc"; then
+			#	IBM XL C compiler
+		if test "x$arch" = "x"; then
+			arch="auto"
+		fi
+		if test "$enable_debugging" = no; then
+			CXXFLAGS_OPTIM_SPEED="-O3 -qarch=$arch"
+			CXXFLAGS_OPTIM_SIZE="-O3 -qarch=$arch"
+		fi
+	elif test "$GCC" = "yes" ; then
+		if test "$enable_debugging" = yes; then
+				#	Suppress warnings about possibly uninitialized variables but show everything else (used for
+				#   development, but these warnings should also not trip for release builds)
+			CXXFLAGS_WARNINGS="$CXXFLAGS_WARNINGS -Wall -Wimplicit -Wreturn-type -Wunused -Wredundant-decls -Wcast-align -Wcomment -Wextra"
+		else
+				#	Just suppress warnings about possibly uninitialized variables
+			CXXFLAGS_WARNINGS="$CXXFLAGS_WARNINGS"
+			CXXFLAGS_OPTIM_SPEED="-O3 -ffast-math"
+			CXXFLAGS_OPTIM_SIZE="-Os -ffast-math"
+		fi
+		case "$build_os" in
+			darwin*) CXXFLAGS_WARNINGS="$CXXFLAGS_WARNINGS";;
+			*);;
+		esac
+	fi
+	if test "x$CXXFLAGS_OPTIM_SIZE" = "x"; then
+		CXXFLAGS_OPTIM_SIZE=$CXXFLAGS_OPTIM_SPEED
+	fi
+
+
+	CXXFLAGS="$CXXFLAGS $CXXFLAGS_OPTIM_SPEED $CXXFLAGS_WARNINGS"
+
+])
diff --git a/config/ax_python_module.m4 b/config/ax_python_module.m4
new file mode 100644
index 0000000..5238a05
--- /dev/null
+++ b/config/ax_python_module.m4
@@ -0,0 +1,49 @@
+dnl @synopsis AC_PYTHON_MODULE(modname[, fatal[, msg]])
+dnl
+dnl Checks for Python module.
+dnl
+dnl If fatal is non-empty then absence of a module will trigger an
+dnl error, if fatal is empty then PYTHON will be set to an empty string
+dnl
+dnl If errormsg is non-empty, the message will be printed
+dnl instead of a generic error message.
+dnl
+dnl @category InstalledPackages
+dnl @author Andrew Collier <colliera at nu.ac.za>.
+dnl @version 2004-07-14
+dnl @license AllPermissive
+
+AC_DEFUN([AC_PYTHON_MODULE],[
+	if test -z "PYTHON"
+	then
+		AC_PATH_PROG([PYTHON], [python], [], [$PATH])
+	fi
+	AC_MSG_CHECKING(python module: $1)
+	if test -z "$PYTHON"
+	then
+		false
+	else
+		"$PYTHON" -c "import $1" 2>/dev/null
+	fi
+	if test $? -eq 0;
+	then
+		AC_MSG_RESULT(yes)
+		eval AS_TR_CPP(HAVE_PYMOD_$1)=yes
+	else
+		AC_MSG_RESULT(no)
+		eval AS_TR_CPP(HAVE_PYMOD_$1)=no
+		
+		if test -n "$2"
+		then
+			if test -n "$3"
+			then
+				AC_MSG_ERROR($3)
+			else
+				AC_MSG_ERROR(failed to find required module $1)
+			fi
+			exit 1
+		else
+			PYTHON=""
+		fi
+	fi
+])
diff --git a/config/config.guess b/config/config.guess
new file mode 100755
index 0000000..dc84c68
--- /dev/null
+++ b/config/config.guess
@@ -0,0 +1,1501 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+#   Free Software Foundation, Inc.
+
+timestamp='2009-11-20'
+
+# 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.
+#
+# You should have received a copy of the GNU General Public License
+# 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.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches at gnu.org> and include a ChangeLog
+# entry.
+#
+# 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:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+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
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+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."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    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
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# 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
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# 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=`(/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 ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# 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
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep -q __ELF__
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	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
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		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}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	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" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# 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'`
+	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
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	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/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	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/[^.]*//'`
+	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/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	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
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	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
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # 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}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  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);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  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` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	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 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	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
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	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
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *: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
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    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
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	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 ;;
+	    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
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #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);
+
+                  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`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    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
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.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__
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	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}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$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:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	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/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	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 ;;
+    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}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    *:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    *:Interix*:*)
+    	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    authenticamd | genuineintel | EM64T)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		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 ;;
+    8664:Windows_NT:*)
+	echo x86_64-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
+	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/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	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 '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	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="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    arm*:Linux:*:*)
+	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-gnu
+	else
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=${UNAME_MACHINE}el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=${UNAME_MACHINE}
+	#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-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-gnu
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	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-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit ;;
+    xtensa*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	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
+	# sysname and nodename.
+	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,
+	# I just have to hope.  -- rms.
+        # 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
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86: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}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    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}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# 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}
+	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
+	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
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		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 configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	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
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	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; } ;;
+    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; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	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}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		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 ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    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 ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		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
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
+	    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
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	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
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	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 ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+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
+
+#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
+
+$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, 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
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+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
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/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}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/config.sub b/config/config.sub
new file mode 100644
index 0000000..ba16ebf
--- /dev/null
+++ b/config/config.sub
@@ -0,0 +1,1676 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
+
+timestamp='2008-01-16'
+
+# 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.
+#
+# You should have received a copy of the GNU General Public License
+# 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.
+
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+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
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+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."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# 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/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-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)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		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/'`
+		;;
+	-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/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		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/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx | dvp \
+	| fido | fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| mt \
+	| msp430 \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]a*eb | 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 \
+	| spu | strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]a*eb-* | 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-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa*-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
+		;;
+	# 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-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16)
+		basic_machine=cr16-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	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
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mipsEE* | ee | ps2)
+		basic_machine=mips64r5900el-scei
+		case $os in
+		    -linux*)
+			;;
+		    *)
+			os=-elf
+			;;
+		esac
+		;;
+	iop)
+		basic_machine=mipsel-scei
+		os=-irx
+		;;
+	dvp)
+		basic_machine=dvp-scei
+		os=-elf
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tile*)
+		basic_machine=tile-unknown
+		os=-linux-gnu
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	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
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | 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
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# 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* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -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* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -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* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -irx*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-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|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-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
+		;;
+	-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
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+		os=-elf
+		;;
+        spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+        mep-*)
+		os=-elf
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/depcomp b/config/depcomp
new file mode 100644
index 0000000..807b991
--- /dev/null
+++ b/config/depcomp
@@ -0,0 +1,423 @@
+#! /bin/sh
+
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000 Free Software Foundation, Inc.
+
+# This program 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, 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.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, 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.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+   dir=`echo "$object" | sed 's,/.*$,/,'`
+   if test "$dir" = "$object"; then
+      dir=
+   fi
+   # FIXME: should be _deps on DOS.
+   depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  This file always lives in the current directory.
+  # Also, the AIX compiler puts `$object:' at the start of each line;
+  # $object doesn't have directory information.
+  stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  outname="$stripped.o"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      tmpdepfile1="$dir.libs/$base.lo.d"
+      tmpdepfile2="$dir.libs/$base.d"
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1="$dir$base.o.d"
+      tmpdepfile2="$dir$base.d"
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2"
+      exit $stat
+   fi
+
+   if test -f "$tmpdepfile1"; then
+      tmpdepfile="$tmpdepfile1"
+   else
+      tmpdepfile="$tmpdepfile2"
+   fi
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a space and a tab in the [].
+      sed -e 's,^.*\.[a-z]*:[ 	]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the proprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.  We will use -o /dev/null later,
+  # however we can't do the remplacement now because
+  # `-o $object' might simply not be used
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ 	]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    -*)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the proprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the proprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
diff --git a/config/install-sh b/config/install-sh
new file mode 100755
index 0000000..a06f467
--- /dev/null
+++ b/config/install-sh
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `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.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+	-c) instcmd="$cpprog"
+	    shift
+	    continue;;
+
+	-d) dir_arg=true
+	    shift
+	    continue;;
+
+	-m) chmodcmd="$chmodprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-o) chowncmd="$chownprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-g) chgrpcmd="$chgrpprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-s) stripcmd="$stripprog"
+	    shift
+	    continue;;
+
+	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+	    shift
+	    continue;;
+
+	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+	    shift
+	    continue;;
+
+	*)  if [ x"$src" = x ]
+	    then
+		src=$1
+	    else
+		# this colon is to work around a 386BSD /bin/sh bug
+		:
+		dst=$1
+	    fi
+	    shift
+	    continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+	echo "install:	no input file specified"
+	exit 1
+else
+	:
+fi
+
+if [ x"$dir_arg" != x ]; then
+	dst=$src
+	src=""
+
+	if [ -d $dst ]; then
+		instcmd=:
+		chmodcmd=""
+	else
+		instcmd=$mkdirprog
+	fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+	if [ -f "$src" ] || [ -d "$src" ]
+	then
+		:
+	else
+		echo "install:  $src does not exist"
+		exit 1
+	fi
+
+	if [ x"$dst" = x ]
+	then
+		echo "install:	no destination specified"
+		exit 1
+	else
+		:
+	fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+	if [ -d $dst ]
+	then
+		dst="$dst"/`basename $src`
+	else
+		:
+	fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+	'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+	pathcomp="${pathcomp}${1}"
+	shift
+
+	if [ ! -d "${pathcomp}" ] ;
+        then
+		$mkdirprog "${pathcomp}"
+	else
+		:
+	fi
+
+	pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+	$doit $instcmd $dst &&
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+	if [ x"$transformarg" = x ]
+	then
+		dstfile=`basename $dst`
+	else
+		dstfile=`basename $dst $transformbasename |
+			sed $transformarg`$transformbasename
+	fi
+
+# don't allow the sed command to completely eliminate the filename
+
+	if [ x"$dstfile" = x ]
+	then
+		dstfile=`basename $dst`
+	else
+		:
+	fi
+
+# Make a temp file name in the proper directory.
+
+	dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+	$doit $instcmd $src $dsttmp &&
+
+	trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
+
+# Now rename the file to the real destination.
+
+	$doit $rmcmd -f $dstdir/$dstfile &&
+	$doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/config/libtool.m4 b/config/libtool.m4
new file mode 100644
index 0000000..d812584
--- /dev/null
+++ b/config/libtool.m4
@@ -0,0 +1,7831 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+		   [m4_fatal([Libtool version $1 or higher is required],
+		             63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\	*)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+	[m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+	[tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+	   m4_quote(lt_decl_varnames),
+	m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+					   [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+	dnl If the libtool generation code has been placed in $CONFIG_LT,
+	dnl instead of duplicating it all over again into config.status,
+	dnl then we will have config.status run $CONFIG_LT later, so it
+	dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_REPLACE_SHELLFNS
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+	[lt_cv_ld_exported_symbols_list=yes],
+	[lt_cv_ld_exported_symbols_list=no])
+	LDFLAGS="$save_LDFLAGS"
+    ])
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
+
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+	[Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+	[], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+	[Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t at _DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+	[Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+	[Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*) ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+	  tmp_sharedflag='--shared' ;;
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 _LT_SYS_MODULE_PATH_AIX([$1])
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	     ;;
+	   *)
+	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX([$1])
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    _LT_SYS_MODULE_PATH_AIX([$1])
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	      fi
+	    fi
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+	    ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+		$RANLIB $oldlib'
+	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+		;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	    case $host_os in
+	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+		*)
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+	_LT_TAGVAR(link_all_deplibs, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+	      '"$_LT_TAGVAR(reload_cmds, $1)"
+	    ;;
+	  *)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case ${prev}${p} in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test "$pre_test_object_deps_done" = no; then
+	 case ${prev} in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+	   _LT_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+	   _LT_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC* | sunCC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
+
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
+
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/config/ltmain.sh b/config/ltmain.sh
new file mode 100755
index 0000000..3061e3c
--- /dev/null
+++ b/config/ltmain.sh
@@ -0,0 +1,9636 @@
+
+# libtool (GNU libtool) 2.4
+# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010 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.
+
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
+#
+# MODE must be one of the following:
+#
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#         host-triplet:	$host
+#         shell:		$SHELL
+#         compiler:		$LTCC
+#         compiler flags:		$LTCFLAGS
+#         linker:		$LD (gnu? $with_gnu_ld)
+#         $progname:	(GNU libtool) 2.4
+#         automake:	$automake_version
+#         autoconf:	$autoconf_version
+#
+# Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4
+TIMESTAMP=""
+package_revision=1.3293
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# NLS nuisances: We save the old values to restore during execute mode.
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+	  export $lt_var
+	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+	fi"
+done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
+
+$lt_unset CDPATH
+
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+
+
+: ${CP="cp -f"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${EGREP="grep -E"}
+: ${FGREP="grep -F"}
+: ${GREP="grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" 	$lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+		s@/\./@/@g
+		t dotsl
+		s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
+
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
+
+# The name of this program:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+	# list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+	IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "$my_tmpdir"
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+	my_arg=`$ECHO "$1" | $SED \
+	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+	    $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+	:more
+	/\./!{
+	  N
+	  s/\n# / /
+	  b more
+	}
+	:go
+	/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+	s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
+        s/^# //
+	s/^# *$//
+	s/\$progname/'$progname'/
+	p
+    }' < "$progpath"
+    echo
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
+func_help ()
+{
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+	:print
+        s/^# //
+	s/^# *$//
+	s*\$progname*'$progname'*
+	s*\$host*'"$host"'*
+	s*\$SHELL*'"$SHELL"'*
+	s*\$LTCC*'"$LTCC"'*
+	s*\$LTCFLAGS*'"$LTCFLAGS"'*
+	s*\$LD*'"$LD"'*
+	s/\$with_gnu_ld/'"$with_gnu_ld"'/
+	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+	p
+	d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    $opt_debug
+
+    func_error "missing argument for $1."
+    exit_cmd=exit
+}
+
+
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
+
+
+
+
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+nonopt=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+	taglist="$taglist $tagname"
+
+	# Evaluate the configuration.  Be careful to quote the path
+	# and the sed script, to avoid splitting on whitespace, but
+	# also don't use non-portable quotes within backquotes within
+	# quotes we have to do it in 2 steps:
+	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+	eval "$extractedcf"
+      else
+	func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
+    opt="$1"
+    shift
+    case $opt in
+      --debug|-x)	opt_debug='set -x'
+			func_echo "enabling shell trace mode"
+			$opt_debug
+			;;
+      --dry-run|--dryrun|-n)
+			opt_dry_run=:
+			;;
+      --config)
+			opt_config=:
+func_config
+			;;
+      --dlopen|-dlopen)
+			optarg="$1"
+			opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
+			shift
+			;;
+      --preserve-dup-deps)
+			opt_preserve_dup_deps=:
+			;;
+      --features)
+			opt_features=:
+func_features
+			;;
+      --finish)
+			opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+			;;
+      --help)
+			opt_help=:
+			;;
+      --help-all)
+			opt_help_all=:
+opt_help=': help-all'
+			;;
+      --mode)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+			shift
+			;;
+      --no-silent|--no-quiet)
+			opt_silent=false
+func_append preserve_args " $opt"
+			;;
+      --no-verbose)
+			opt_verbose=false
+func_append preserve_args " $opt"
+			;;
+      --silent|--quiet)
+			opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+			;;
+      --verbose|-v)
+			opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+			;;
+      --tag)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
+			shift
+			;;
+
+      -\?|-h)		func_usage				;;
+      --help)		func_help				;;
+      --version)	func_version				;;
+
+      # Separate optargs to long options:
+      --*=*)
+			func_split_long_opt "$opt"
+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
+			shift
+			;;
+
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+			func_split_short_opt "$opt"
+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+			shift
+			;;
+
+      --)		break					;;
+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
+    esac
+  done
+
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+      ;;
+  esac
+
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
+
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
+    fi
+
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
+
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
+
+
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
+
+
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+	for lalib_p_l in 1 2 3 4
+	do
+	    read lalib_p_line
+	    case "$lalib_p_line" in
+		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+	    esac
+	done
+	exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)	. "$1" ;;
+    *)		. "./$1" ;;
+    esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	func_append_quoted CC_quoted "$arg"
+      done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	      # Double-quote args containing other shell metacharacters.
+	      func_append_quoted CC_quoted "$arg"
+	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
+	    case "$@ " in
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  func_echo "unable to infer tagged configuration"
+	  func_fatal_error "specify a tag with \`--tag'"
+#	else
+#	  func_verbose "using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
+	;;
+
+      target )
+	libobj="$arg"
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  test -n "$libobj" && \
+	    func_fatal_error "you cannot specify \`-o' more than once"
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-pie | -fpie | -fPIE)
+          func_append pie_flag " $arg"
+	  continue
+	  ;;
+
+	-shared | -static | -prefer-pic | -prefer-non-pic)
+	  func_append later " $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  func_stripname '-Wc,' '' "$arg"
+	  args=$func_stripname_result
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+	  for arg in $args; do
+	    IFS="$save_ifs"
+	    func_append_quoted lastarg "$arg"
+	  done
+	  IFS="$save_ifs"
+	  func_stripname ' ' '' "$lastarg"
+	  lastarg=$func_stripname_result
+
+	  # Add the arguments to base_compile.
+	  func_append base_compile " $lastarg"
+	  continue
+	  ;;
+
+	*)
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_append_quoted base_compile "$lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+	func_basename "$srcfile"
+	libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	continue
+	;;
+
+      -static)
+	build_libtool_libs=no
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	$ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+      func_append removelist " $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    func_append removelist " $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	command="$base_compile $qsrcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	func_append command " -o $lobj"
+      fi
+
+      func_show_eval_locale "$command"	\
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	func_show_eval '$MV "$output_obj" "$lobj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+	suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $qsrcfile$pie_flag"
+      else
+	command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+	func_append command " -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      func_append command "$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	func_show_eval '$MV "$output_obj" "$obj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+	removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $opt_mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$opt_mode'"
+        ;;
+    esac
+
+    echo
+    $ECHO "Try \`$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $opt_dlopen; do
+      test -f "$file" \
+	|| func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+	func_source "$file"
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && \
+	    func_warning "\`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  func_append dir "/$objdir"
+	else
+	  if test ! -f "$dir/$dlname"; then
+	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+	  fi
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+	;;
+
+      *)
+	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -* | *.la | *.lo ) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if func_ltwrapper_script_p "$file"; then
+	  func_source "$file"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	elif func_ltwrapper_executable_p "$file"; then
+	  func_ltwrapper_scriptname "$file"
+	  func_source "$func_ltwrapper_scriptname_result"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_append_quoted args "$file"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+	eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+	      else
+		$lt_unset $lt_var
+	      fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+	echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libs=
+    libdirs=
+    admincmds=
+
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "\`$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
+
+	$ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
+
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
+    exit $EXIT_SUCCESS
+}
+
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       case $nonopt in *shtool*) :;; *) false;; esac; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    no_mode=:
+    for arg
+    do
+      arg2=
+      if test -n "$dest"; then
+	func_append files " $dest"
+	dest=$arg
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
+	;;
+      -g | -m | -o)
+	prev=$arg
+	;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*)
+	;;
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
+	  prev=
+	else
+	  dest=$arg
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	func_fatal_help "no file or destination specified"
+      else
+	func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+	func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  func_fatal_help "\`$destdir' must be an absolute directory name"
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	func_append staticlibs " $file"
+	;;
+
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$file' is not a valid libtool archive"
+
+	library_names=
+	old_library=
+	relink_command=
+	func_source "$file"
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append current_libdirs " $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append future_libdirs " $libdir" ;;
+	  esac
+	fi
+
+	func_dirname "$file" "/" ""
+	dir="$func_dirname_result"
+	func_append dir "$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  test "$inst_prefix_dir" = "$destdir" && \
+	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  func_warning "relinking \`$file'"
+	  func_show_eval "$relink_command" \
+	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names; shift
+	if test -n "$1"; then
+	  realname="$1"
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+	      'exit $?'
+	  tstripme="$stripme"
+	  case $host_os in
+	  cygwin* | mingw* | pw32* | cegcc*)
+	    case $realname in
+	    *.dll.a)
+	      tstripme=""
+	      ;;
+	    esac
+	    ;;
+	  esac
+	  if test -n "$tstripme" && test -n "$striplib"; then
+	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    # Try `ln -sf' first, because the `ln' binary might depend on
+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
+	    # so we also need to try rm && ln -s.
+	    for linkname
+	    do
+	      test "$linkname" != "$realname" \
+		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  func_execute_cmds "$postinstall_cmds" 'exit $?'
+	fi
+
+	# Install the pseudo-library for information purposes.
+	func_basename "$file"
+	name="$func_basename_result"
+	instname="$dir/$name"i
+	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  func_lo2o "$destfile"
+	  staticdest=$func_lo2o_result
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	test -n "$destfile" && \
+	  func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  func_lo2o "$file"
+	  staticobj=$func_lo2o_result
+	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      func_stripname '' '.exe' "$file"
+	      file=$func_stripname_result
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin* | *mingw*)
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      wrapper=$func_ltwrapper_scriptname_result
+	    else
+	      func_stripname '' '.exe' "$file"
+	      wrapper=$func_stripname_result
+	    fi
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if func_ltwrapper_script_p "$wrapper"; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  func_source "$wrapper"
+
+	  # Check the variables that should have been set.
+	  test -z "$generated_by_libtool_version" && \
+	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      func_source "$lib"
+	    fi
+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      func_warning "\`$lib' has not been installed in \`$libdir'"
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  func_source "$wrapper"
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    $opt_dry_run || {
+	      if test "$finalize" = yes; then
+	        tmpdir=`func_mktempdir`
+		func_basename "$file$stripped_ext"
+		file="$func_basename_result"
+	        outputname="$tmpdir/$file"
+	        # Replace the output file specification.
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+	        $opt_silent || {
+	          func_quote_for_expand "$relink_command"
+		  eval "func_echo $func_quote_for_expand_result"
+	        }
+	        if eval "$relink_command"; then :
+	          else
+		  func_error "error: relink \`$file' with the above command before installing it"
+		  $opt_dry_run || ${RM}r "$tmpdir"
+		  continue
+	        fi
+	        file="$outputname"
+	      else
+	        func_warning "cannot relink \`$file'"
+	      fi
+	    }
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyway
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    func_stripname '' '.exe' "$destfile"
+	    destfile=$func_stripname_result
+	    ;;
+	  esac
+	  ;;
+	esac
+	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+	$opt_dry_run || if test -n "$outputname"; then
+	  ${RM}r "$tmpdir"
+	fi
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	my_dlsyms="${my_outputname}S.c"
+      else
+	func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+	# Discover the nlist of each of the dlfiles.
+	nlist="$output_objdir/${my_outputname}.nm"
+
+	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+	# Parse the name list into a source file.
+	func_verbose "creating $output_objdir/$my_dlsyms"
+
+	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+	if test "$dlself" = yes; then
+	  func_verbose "generating symbol list for \`$output'"
+
+	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+	  # Add our own program objects to the symbol list.
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	  for progfile in $progfiles; do
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -n "$exclude_expsyms"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  if test -n "$export_symbols_regex"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  # Prepare the list of exported symbols
+	  if test -z "$export_symbols"; then
+	    export_symbols="$output_objdir/$outputname.exp"
+	    $opt_dry_run || {
+	      $RM $export_symbols
+	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	      case $host in
+	      *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+	        ;;
+	      esac
+	    }
+	  else
+	    $opt_dry_run || {
+	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	      case $host in
+	        *cygwin* | *mingw* | *cegcc* )
+	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+	          ;;
+	      esac
+	    }
+	  fi
+	fi
+
+	for dlprefile in $dlprefiles; do
+	  func_verbose "extracting global C symbols from \`$dlprefile'"
+	  func_basename "$dlprefile"
+	  name="$func_basename_result"
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=""
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname" ; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename="$func_basename_result"
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename" ; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
+	done
+
+	$opt_dry_run || {
+	  # Make sure we have at least an empty file.
+	  test -f "$nlist" || : > "$nlist"
+
+	  if test -n "$exclude_expsyms"; then
+	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	    $MV "$nlist"T "$nlist"
+	  fi
+
+	  # Try sorting and uniquifying the output.
+	  if $GREP -v "^: " < "$nlist" |
+	      if sort -k 3 </dev/null >/dev/null 2>&1; then
+		sort -k 3
+	      else
+		sort +2
+	      fi |
+	      uniq > "$nlist"S; then
+	    :
+	  else
+	    $GREP -v "^: " < "$nlist" > "$nlist"S
+	  fi
+
+	  if test -f "$nlist"S; then
+	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+	  else
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	  fi
+
+	  echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+	  case $need_lib_prefix in
+	  no)
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  *)
+	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  esac
+	  echo >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	} # !$opt_dry_run
+
+	pic_flag_for_symtable=
+	case "$compile_command " in
+	*" -static "*) ;;
+	*)
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+	  *-*-hpux*)
+	    pic_flag_for_symtable=" $pic_flag"  ;;
+	  *)
+	    if test "X$my_pic_p" != Xno; then
+	      pic_flag_for_symtable=" $pic_flag"
+	    fi
+	    ;;
+	  esac
+	  ;;
+	esac
+	symtab_cflags=
+	for arg in $LTCFLAGS; do
+	  case $arg in
+	  -pie | -fpie | -fPIE) ;;
+	  *) func_append symtab_cflags " $arg" ;;
+	  esac
+	done
+
+	# Now compile the dynamic symbol file.
+	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+	# Clean up the generated files.
+	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+	# Transform the symbol file into the correct name.
+	symfileobj="$output_objdir/${my_outputname}S.$objext"
+	case $host in
+	*cygwin* | *mingw* | *cegcc* )
+	  if test -f "$output_objdir/$my_outputname.def"; then
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	  else
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  fi
+	  ;;
+	*)
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  ;;
+	esac
+	;;
+      *)
+	func_fatal_error "unknown suffix for \`$my_dlsyms'"
+	;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+	$SED -n -e '
+	    1,100{
+		/ I /{
+		    s,.*,import,
+		    p
+		    q
+		}
+	    }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+	*) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+	*" $my_xlib_u "*)
+	  func_arith $extracted_serial + 1
+	  extracted_serial=$func_arith_result
+	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
+	*) break ;;
+	esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+	func_verbose "Extracting $my_xabs"
+	# Do not bother doing anything if just a dry run
+	$opt_dry_run || {
+	  darwin_orig_dir=`pwd`
+	  cd $my_xdir || exit $?
+	  darwin_archive=$my_xabs
+	  darwin_curdir=`pwd`
+	  darwin_base_archive=`basename "$darwin_archive"`
+	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+	  if test -n "$darwin_arches"; then
+	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+	    darwin_arch=
+	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+	    for darwin_arch in  $darwin_arches ; do
+	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+	      cd "$darwin_curdir"
+	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+	    done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+	    darwin_file=
+	    darwin_files=
+	    for darwin_file in $darwin_filelist; do
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+	      $LIPO -create -output "$darwin_file" $darwin_files
+	    done # $darwin_filelist
+	    $RM -rf unfat-$$
+	    cd "$darwin_orig_dir"
+	  else
+	    cd $darwin_orig_dir
+	    func_extract_an_archive "$my_xdir" "$my_xabs"
+	  fi # $darwin_arches
+	} # !$opt_dry_run
+	;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+	;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+	func_emit_wrapper_arg1=${1-no}
+
+	$ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  for lt_wr_arg
+  do
+    case \$lt_wr_arg in
+    --lt-*) ;;
+    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+    esac
+    shift
+  done
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+	  $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$ECHO \"\$relink_command_output\" >&2
+	$RM \"\$progdir/\$file\"
+	exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+	else
+	  $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	$ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+      func_exec_program \${1+\"\$@\"}
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+	cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+*/
+EOF
+	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+	    cat <<EOF
+volatile const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_path "$temp_rpath"
+	      cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test -n "$dllsearchpath"; then
+              func_to_host_path "$dllsearchpath:"
+	      cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test "$fast_install" = yes; then
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+	    else
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+	    fi
+
+
+	    cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  newargz = XMALLOC (char *, argc + 1);
+
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+	{
+EOF
+	    case "$host" in
+	      *mingw* | *cygwin* )
+		# make stdout use "unix" line endings
+		echo "          setmode(1,_O_BINARY);"
+		;;
+	      esac
+
+	    cat <<"EOF"
+	  lt_dump_script (stdout);
+	  return 0;
+	}
+      if (strcmp (argv[i], debug_opt) == 0)
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
+EOF
+
+	    cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+	    cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+	    case $host_os in
+	      mingw*)
+	    cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+	*p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+	*p = '/';
+      }
+  }
+EOF
+	    ;;
+	    esac
+
+	    cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
+  for (i = 0; i < newargc; i++)
+    {
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
+    }
+
+EOF
+
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
+      return 127;
+    }
+  return rval;
+EOF
+		;;
+	      *)
+		cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+		;;
+	    esac
+
+	    cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+			  string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+	return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+	{
+	  concat_name = xstrdup (wrapper);
+	  if (check_executable (concat_name))
+	    return concat_name;
+	  XFREE (concat_name);
+	}
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+	has_slash = 1;
+	break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+	{
+	  for (p = path; *p; p = p_next)
+	    {
+	      const char *q;
+	      size_t p_len;
+	      for (q = p; *q; q++)
+		if (IS_PATH_SEPARATOR (*q))
+		  break;
+	      p_len = q - p;
+	      p_next = (*q == '\0' ? q : q + 1);
+	      if (p_len == 0)
+		{
+		  /* empty path: current directory */
+		  if (getcwd (tmp, LT_PATHMAX) == NULL)
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
+		  tmp_len = strlen (tmp);
+		  concat_name =
+		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, tmp, tmp_len);
+		  concat_name[tmp_len] = '/';
+		  strcpy (concat_name + tmp_len + 1, wrapper);
+		}
+	      else
+		{
+		  concat_name =
+		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, p, p_len);
+		  concat_name[p_len] = '/';
+		  strcpy (concat_name + p_len + 1, wrapper);
+		}
+	      if (check_executable (concat_name))
+		return concat_name;
+	      XFREE (concat_name);
+	    }
+	}
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
+      if (lstat (tmp_pathspec, &s) == 0)
+	{
+	  if (S_ISLNK (s.st_mode) != 0)
+	    {
+	      has_symlinks = 1;
+	      break;
+	    }
+
+	  /* search backwards for last DIR_SEPARATOR */
+	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    p--;
+	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    {
+	      /* no more DIR_SEPARATORS left */
+	      break;
+	    }
+	  *p = '\0';
+	}
+      else
+	{
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
+	}
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+	*str = '\0';
+    }
+  return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
+	       const char *message, va_list ap)
+{
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+  va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+              $SED -e 's/\([\\"]\)/\\\1/g' \
+	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
+
+            cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    bindir=
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	break
+	;;
+      -all-static | -static | -static-libtool-libs)
+	case $arg in
+	-all-static)
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    func_warning "complete static linking is impossible in this configuration"
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	-static)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=built
+	  ;;
+	-static-libtool-libs)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	esac
+	build_libtool_libs=no
+	build_old_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  func_append compile_command " @OUTPUT@"
+	  func_append finalize_command " @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	bindir)
+	  bindir="$arg"
+	  prev=
+	  continue
+	  ;;
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    func_append compile_command " @SYMFILE@"
+	    func_append finalize_command " @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      func_append dlfiles " $arg"
+	    else
+	      func_append dlprefiles " $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  test -f "$arg" \
+	    || func_fatal_error "symbol file \`$arg' does not exist"
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	framework)
+	  case $host in
+	    *-*-darwin*)
+	      case "$deplibs " in
+		*" $qarg.ltframework "*) ;;
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
+		   ;;
+	      esac
+	      ;;
+	  esac
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat "$save_arg"`
+	    do
+#	      func_append moreargs " $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if func_lalib_unsafe_p "$arg"; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		func_source "$arg"
+
+		if test -z "$pic_object" ||
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none &&
+		   test "$non_pic_object" = none; then
+		  func_fatal_error "cannot find name of object for \`$arg'"
+		fi
+
+		# Extract subdirectory from the argument.
+		func_dirname "$arg" "/" ""
+		xdir="$func_dirname_result"
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      func_append dlfiles " $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    func_append dlprefiles " $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  func_append libobjs " $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  func_append non_pic_objects " $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		else
+		  # If the PIC object exists, use it instead.
+		  # $xdir was prepended to $pic_object above.
+		  non_pic_object="$pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if $opt_dry_run; then
+		  # Extract subdirectory from the argument.
+		  func_dirname "$arg" "/" ""
+		  xdir="$func_dirname_result"
+
+		  func_lo2o "$arg"
+		  pic_object=$xdir$objdir/$func_lo2o_result
+		  non_pic_object=$xdir$func_lo2o_result
+		  func_append libobjs " $pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+	        else
+		  func_fatal_error "\`$arg' is not a valid libtool object"
+		fi
+	      fi
+	    done
+	  else
+	    func_fatal_error "link input file \`$arg' does not exist"
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    func_fatal_error "only absolute run-paths are allowed"
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) func_append rpath " $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) func_append xrpath " $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	shrext)
+	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
+	weak)
+	  func_append weak_libs " $arg"
+	  prev=
+	  continue
+	  ;;
+	xcclinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xcompiler)
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
+	  prev=
+	  func_append compile_command " $wl$qarg"
+	  func_append finalize_command " $wl$qarg"
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  # See comment for -static flag below, for more details.
+	  func_append compile_command " $link_static_flag"
+	  func_append finalize_command " $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  func_fatal_error "more than one -exported-symbols argument is not allowed"
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -framework)
+	prev=framework
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  func_append compile_command " $arg"
+	  func_append finalize_command " $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
+	  if test "$#" -gt 0; then
+	    func_fatal_error "require no space between \`-L' and \`$1'"
+	  else
+	    func_fatal_error "need path for \`-L' option"
+	  fi
+	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  test -z "$absdir" && \
+	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
+	*)
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  ::) dllsearchpath=$dir;;
+	  *) func_append dllsearchpath ":$dir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    func_append deplibs " System.ltframework"
+	    continue
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	func_append deplibs " $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	prev=xcompiler
+	continue
+	;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	case "$new_inherited_linker_flags " in
+	    *" $arg "*) ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
+	esac
+	continue
+	;;
+
+      -multi_module)
+	single_module="${wl}-multi_module"
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # and Darwin in order for the loader to find any dlls it needs.
+	  func_warning "\`-no-install' is ignored for $host"
+	  func_warning "assuming \`-no-fast-install' instead"
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	func_stripname '-R' '' "$arg"
+	dir=$func_stripname_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
+	*)
+	  func_fatal_error "only absolute run-paths are allowed"
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) func_append xrpath " $dir" ;;
+	esac
+	continue
+	;;
+
+      -shared)
+	# The effects of -shared are defined in a previous loop.
+	continue
+	;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -static | -static-libtool-libs)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -weak)
+        prev=weak
+	continue
+	;;
+
+      -Wc,*)
+	func_stripname '-Wc,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Wl,*)
+	func_stripname '-Wl,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # -msg_* for osf cc
+      -msg_*)
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        func_append compiler_flags " $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      *.$objext)
+	# A standard object.
+	func_append objs " $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if func_lalib_unsafe_p "$arg"; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  func_source "$arg"
+
+	  if test -z "$pic_object" ||
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none &&
+	     test "$non_pic_object" = none; then
+	    func_fatal_error "cannot find name of object for \`$arg'"
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  func_dirname "$arg" "/" ""
+	  xdir="$func_dirname_result"
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		func_append dlfiles " $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      func_append dlprefiles " $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    func_append libobjs " $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    func_append non_pic_objects " $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  else
+	    # If the PIC object exists, use it instead.
+	    # $xdir was prepended to $pic_object above.
+	    non_pic_object="$pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if $opt_dry_run; then
+	    # Extract subdirectory from the argument.
+	    func_dirname "$arg" "/" ""
+	    xdir="$func_dirname_result"
+
+	    func_lo2o "$arg"
+	    pic_object=$xdir$objdir/$func_lo2o_result
+	    non_pic_object=$xdir$func_lo2o_result
+	    func_append libobjs " $pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  else
+	    func_fatal_error "\`$arg' is not a valid libtool object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	func_resolve_sysroot "$arg"
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  func_append dlfiles " $func_resolve_sysroot_result"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  func_append dlprefiles " $func_resolve_sysroot_result"
+	  prev=
+	else
+	  func_append deplibs " $func_resolve_sysroot_result"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_preserve_dup_deps ; then
+	case "$libs " in
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	esac
+      fi
+      func_append libs " $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+	  esac
+	  func_append pre_post_deps " $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+	passes="conv dlpreopen link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+	## FIXME: Find the place where the list is rebuilt in the wrong
+	##        order, and fix it there properly
+        tmp_deplibs=
+	for deplib in $deplibs; do
+	  tmp_deplibs="$deplib $tmp_deplibs"
+	done
+	deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+	# Collect and forward deplibs of preopened libtool libs
+	for lib in $dlprefiles; do
+	  # Ignore non-libtool-libs
+	  dependency_libs=
+	  func_resolve_sysroot "$lib"
+	  case $lib in
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
+	  esac
+
+	  # Collect preopened libtool deplibs, except any this library
+	  # has declared as weak libs
+	  for deplib in $dependency_libs; do
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
+	    case " $weak_libs " in
+	    *" $deplib_base "*) ;;
+	    *) func_append deplibs " $deplib" ;;
+	    esac
+	  done
+	done
+	libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    func_append compiler_flags " $deplib"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    func_warning "\`-l' is ignored for archives/objects"
+	    continue
+	  fi
+	  func_stripname '-l' '' "$deplib"
+	  name=$func_stripname_result
+	  if test "$linkmode" = lib; then
+	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+	  else
+	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+	  fi
+	  for searchdir in $searchdirs; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if func_lalib_p "$lib"; then
+		  library_names=
+		  old_library=
+		  func_source "$lib"
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    func_dirname "$lib" "" "."
+		    ladir="$func_dirname_result"
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+		;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	*.ltframework)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  *)
+	    func_warning "\`-L' is ignored for archives/objects"
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    func_stripname '-R' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) func_append xrpath " $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    # Linking convenience modules into shared libraries is allowed,
+	    # but linking other static libraries is non-portable.
+	    case " $dlpreconveniencelibs " in
+	    *" $deplib "*) ;;
+	    *)
+	      valid_a_lib=no
+	      case $deplibs_check_method in
+		match_pattern*)
+		  set dummy $deplibs_check_method; shift
+		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+		    | $EGREP "$match_pattern_regex" > /dev/null; then
+		    valid_a_lib=yes
+		  fi
+		;;
+		pass_all)
+		  valid_a_lib=yes
+		;;
+	      esac
+	      if test "$valid_a_lib" != yes; then
+		echo
+		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
+	      else
+		echo
+		$ECHO "*** Warning: Linking the shared library $output against the"
+		$ECHO "*** static library $deplib is not portable!"
+		deplibs="$deplib $deplibs"
+	      fi
+	      ;;
+	    esac
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      func_append newdlprefiles " $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      func_append newdlfiles " $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+	fi
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$lib" \
+	  || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+	func_dirname "$lib" "" "."
+	ladir="$func_dirname_result"
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	inherited_linker_flags=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+	avoidtemprpath=
+
+
+	# Read the .la file
+	func_source "$lib"
+
+	# Convert "-framework foo" to "foo.ltframework"
+	if test -n "$inherited_linker_flags"; then
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+	    case " $new_inherited_linker_flags " in
+	      *" $tmp_inherited_linker_flag "*) ;;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+	    esac
+	  done
+	fi
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      func_fatal_error "cannot find name of link library for \`$lib'"
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    func_fatal_error "\`$lib' is not a convenience library"
+	  fi
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    deplibs="$deplib $deplibs"
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	if test -n "$old_library" &&
+	   { test "$prefer_static_libs" = yes ||
+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib="$l"
+	  done
+	fi
+	if test -z "$linklib"; then
+	  func_fatal_error "cannot find name of link library for \`$lib'"
+	fi
+
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    func_append dlprefiles " $lib $dependency_libs"
+	  else
+	    func_append newdlfiles " $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    func_warning "cannot determine absolute directory name of \`$ladir'"
+	    func_warning "passing it literally to the linker, although it might fail"
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	func_basename "$lib"
+	laname="$func_basename_result"
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    func_warning "library \`$lib' was moved."
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$lt_sysroot$libdir"
+	    absdir="$lt_sysroot$libdir"
+	  fi
+	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+	else
+	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  else
+	    dir="$ladir/$objdir"
+	    absdir="$abs_ladir/$objdir"
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  fi
+	fi # $installed = yes
+	func_stripname 'lib' '.la' "$laname"
+	name=$func_stripname_result
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir" && test "$linkmode" = prog; then
+	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+	  fi
+	  case "$host" in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  func_append newlib_search_path " $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) func_stripname '-L' '' "$deplib"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
+		 ;;
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { { test "$prefer_static_libs" = no ||
+	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
+	       test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath:" in
+	      *"$absdir:"*) ;;
+	      *) func_append temp_rpath "$absdir:" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	use_static_libs=$prefer_static_libs
+	if test "$use_static_libs" = built && test "$installed" = yes; then
+	  use_static_libs=no
+	fi
+	if test -n "$library_names" &&
+	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
+	  case $host in
+	  *cygwin* | *mingw* | *cegcc*)
+	      # No point in relinking DLLs because paths are not encoded
+	      func_append notinst_deplibs " $lib"
+	      need_relink=no
+	    ;;
+	  *)
+	    if test "$installed" = no; then
+	      func_append notinst_deplibs " $lib"
+	      need_relink=yes
+	    fi
+	    ;;
+	  esac
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on some
+	  # systems (darwin).  Don't bleat about dlopened modules though!
+	  dlopenmodule=""
+	  for dlpremoduletest in $dlprefiles; do
+	    if test "X$dlpremoduletest" = "X$lib"; then
+	      dlopenmodule="$dlpremoduletest"
+	      break
+	    fi
+	  done
+	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+	    echo
+	    if test "$linkmode" = prog; then
+	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $ECHO "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    shift
+	    realname="$1"
+	    shift
+	    libname=`eval "\\$ECHO \"$libname_spec\""`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw* | *cegcc*)
+	        func_arith $current - $age
+		major=$func_arith_result
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    func_basename "$soroot"
+	    soname="$func_basename_result"
+	    func_stripname 'lib' '.dll' "$soname"
+	    newlib=libimp-$func_stripname_result.a
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      func_verbose "extracting exported symbol list from \`$soname'"
+	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      func_verbose "generating import library for \`$soname'"
+	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+		    *-*-unixware7*) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a (non-dlopened) module then we can not
+		    # link against it, someone is ignoring the earlier warnings
+		    if /usr/bin/file -L $add 2> /dev/null |
+			 $GREP ": [^:]* bundle" >/dev/null ; then
+		      if test "X$dlopenmodule" != "X$lib"; then
+			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
+			if test -z "$old_library" ; then
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
+			else
+			  add="$dir/$old_library"
+			fi
+		      elif test -n "$old_library"; then
+			add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes &&
+	         test "$hardcode_direct_absolute" = no; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$dir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case $libdir in
+		    [\\/]*)
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      func_fatal_configuration "unsupported hardcode properties"
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes &&
+		 test "$hardcode_minus_L" != yes &&
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes &&
+	       test "$hardcode_direct_absolute" = no; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+		add="$inst_prefix_dir$libdir/$linklib"
+	      else
+		add="$libdir/$linklib"
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case $libdir in
+		  [\\/]*)
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
+	    fi
+
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test "$linkmode" = prog; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    echo
+	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) func_stripname '-R' '' "$libdir"
+	           temp_xrpath=$func_stripname_result
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) func_append xrpath " $temp_xrpath";;
+		   esac;;
+	      *) func_append temp_deplibs " $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  func_append newlib_search_path " $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $func_resolve_sysroot_result"
+	  done
+
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      path=
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
+	        func_dirname "$deplib" "" "."
+		dir=$func_dirname_result
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    func_warning "cannot determine absolute directory name of \`$dir'"
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if $GREP "^installed=no" $deplib > /dev/null; then
+		case $host in
+		*-*-darwin*)
+		  depdepl=
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$absdir/$objdir/$depdepl" ; then
+		      depdepl="$absdir/$objdir/$depdepl"
+		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+		      path=
+		    fi
+		  fi
+		  ;;
+		*)
+		  path="-L$absdir/$objdir"
+		  ;;
+		esac
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  test -z "$libdir" && \
+		    func_fatal_error "\`$deplib' is not a valid libtool archive"
+		  test "$absdir" != "$libdir" && \
+		    func_warning "\`$deplib' seems to be moved"
+
+		  path="-L$absdir"
+		fi
+		;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$path $deplibs" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+	if test "$linkmode" = "prog"; then
+	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+	else
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) func_append lib_search_path " $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) func_append tmp_libs " $deplib" ;;
+	      esac
+	      ;;
+	    *) func_append tmp_libs " $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  func_append tmp_libs " $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+	func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      func_append objs "$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	func_stripname 'lib' '.la' "$outputname"
+	name=$func_stripname_result
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	test "$module" = no && \
+	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  func_stripname '' '.la' "$outputname"
+	  name=$func_stripname_result
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  func_stripname '' '.la' "$outputname"
+	  libname=$func_stripname_result
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+	else
+	  echo
+	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+	  $ECHO "*** objects $objs is not portable!"
+	  func_append libobjs " $objs"
+	fi
+      fi
+
+      test "$dlself" != no && \
+	func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+	func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	test -n "$vinfo" && \
+	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+	test -n "$release" && \
+	  func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	shift
+	IFS="$save_ifs"
+
+	test -n "$7" && \
+	  func_fatal_help "too many parameters to \`-version-info'"
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$1"
+	  number_minor="$2"
+	  number_revision="$3"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  darwin|linux|osf|windows|none)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|qnx|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_minor"
+	    lt_irix_increment=no
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$1"
+	  revision="$2"
+	  age="$3"
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "CURRENT \`$current' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $revision in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "REVISION \`$revision' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $age in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "AGE \`$age' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  func_arith $current + 1
+	  minor_current=$func_arith_result
+	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	irix | nonstopux)
+	  if test "X$lt_irix_increment" = "Xno"; then
+	    func_arith $current - $age
+	  else
+	    func_arith $current - $age + 1
+	  fi
+	  major=$func_arith_result
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test "$loop" -ne 0; do
+	    func_arith $revision - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring_prefix$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test "$loop" -ne 0; do
+	    func_arith $current - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  func_append verstring ":${current}.0"
+	  ;;
+
+	qnx)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  func_arith $current - $age
+	  major=$func_arith_result
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  func_fatal_configuration "unknown library version type \`$version_type'"
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    func_warning "undefined symbols not allowed in $host shared libraries"
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      func_append libobjs " $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$opt_mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$ECHO "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext | *.gcno)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+		 then
+		   continue
+		 fi
+	       fi
+	       func_append removelist " $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	test -n "$removelist" && \
+	  func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	func_append oldlibs " $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) func_append dlfiles " $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) func_append dlprefiles " $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    func_append deplibs " System.ltframework"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    ;;
+	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      func_append deplibs " -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $opt_dry_run || $RM conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $opt_dry_run || $RM conftest
+	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    func_append newdeplibs " $i"
+		    i=""
+		    ;;
+		  esac
+		fi
+		if test -n "$i" ; then
+		  libname=`eval "\\$ECHO \"$libname_spec\""`
+		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		  set dummy $deplib_matches; shift
+		  deplib_match=$1
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    func_append newdeplibs " $i"
+		  else
+		    droppeddeps=yes
+		    echo
+		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		$opt_dry_run || $RM conftest
+		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+		  ldd_output=`ldd conftest`
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      func_append newdeplibs " $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval "\\$ECHO \"$libname_spec\""`
+		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		    set dummy $deplib_matches; shift
+		    deplib_match=$1
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      func_append newdeplibs " $i"
+		    else
+		      droppeddeps=yes
+		      echo
+		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  echo
+		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method; shift
+	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  if test "$want_nocaseglob" = yes; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null |
+			 $GREP " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+			 $SED -e 10q |
+			 $EGREP "$file_magic_regex" > /dev/null; then
+			func_append newdeplibs " $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method; shift
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+		       $EGREP "$match_pattern_regex" > /dev/null; then
+		      func_append newdeplibs " $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+	    done
+	  fi
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	    ;;
+	  esac
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library with the System framework
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+	*-*-darwin*)
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		func_append dep_rpath " $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_apped perm_rpath " $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+	    else
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+	    fi
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      func_append rpath "$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	shift
+	realname="$1"
+	shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib="$output_objdir/$realname"
+	linknames=
+	for link
+	do
+	  func_append linknames " $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	test "X$libobjs" = "X " && libobjs=
+
+	delfiles=
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+	  export_symbols="$output_objdir/$libname.uexp"
+	  func_append delfiles " $export_symbols"
+	fi
+
+	orig_export_symbols=
+	case $host_os in
+	cygwin* | mingw* | cegcc*)
+	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+	    # exporting using user supplied symfile
+	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+	      # and it's NOT already a .def file. Must figure out
+	      # which of the given symbols are data symbols and tag
+	      # them as such. So, trigger use of export_symbols_cmds.
+	      # export_symbols gets reassigned inside the "prepare
+	      # the list of exported symbols" if statement, so the
+	      # include_expsyms logic still works.
+	      orig_export_symbols="$export_symbols"
+	      export_symbols=
+	      always_export_symbols=yes
+	    fi
+	  fi
+	  ;;
+	esac
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    func_verbose "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $opt_dry_run || $RM $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd1 in $cmds; do
+	      IFS="$save_ifs"
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test "$try_normal_branch" = yes \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=${output_objdir}/${output_la}.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
+		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
+		skipped_export=false
+	      else
+		# The command line is too long to execute in one step.
+		func_verbose "using reloadable object file for export list..."
+		skipped_export=:
+		# Break out early, otherwise skipped_export may be
+		# set to false by a later but shorter cmd.
+		break
+	      fi
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  tmp_export_symbols="$export_symbols"
+	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	fi
+
+	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+	  # The given exports_symbols file has to be filtered, so filter it.
+	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	  # 's' commands which not all seds can handle. GNU sed should be fine
+	  # though. Also, the filter scales superlinearly with the number of
+	  # global variables. join(1) would be nice here, but unfortunately
+	  # isn't a blessed tool.
+	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	  export_symbols=$output_objdir/$libname.def
+	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+	  case " $convenience " in
+	  *" $test_deplib "*) ;;
+	  *)
+	    func_append tmp_deplibs " $test_deplib"
+	    ;;
+	  esac
+	done
+	deplibs="$tmp_deplibs"
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec" &&
+	    test "$compiler_needs_object" = yes &&
+	    test -z "$libobjs"; then
+	    # extract the archives, so we have objects to list.
+	    # TODO: could optimize this to just extract one archive.
+	    whole_archive_flag_spec=
+	  fi
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    func_append generated " $gentop"
+
+	    func_extract_archives $gentop $convenience
+	    func_append libobjs " $func_extract_archives_result"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	fi
+
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  func_append linker_flags " $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$opt_mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    eval test_cmds=\"$archive_expsym_cmds\"
+	    cmds=$archive_expsym_cmds
+	  else
+	    eval test_cmds=\"$archive_cmds\"
+	    cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" &&
+	   func_len " $test_cmds" &&
+	   len=$func_len_result &&
+	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise
+	  # or, if using GNU ld and skipped_export is not :, use a linker
+	  # script.
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+	  func_basename "$output"
+	  output_la=$func_basename_result
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  last_robj=
+	  k=1
+
+	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+	    output=${output_objdir}/${output_la}.lnkscript
+	    func_verbose "creating GNU ld script: $output"
+	    echo 'INPUT (' > $output
+	    for obj in $save_libobjs
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
+	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+	    output=${output_objdir}/${output_la}.lnk
+	    func_verbose "creating linker input file list: $output"
+	    : > $output
+	    set x $save_libobjs
+	    shift
+	    firstobj=
+	    if test "$compiler_needs_object" = yes; then
+	      firstobj="$1 "
+	      shift
+	    fi
+	    for obj
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+	  else
+	    if test -n "$save_libobjs"; then
+	      func_verbose "creating reloadable object files..."
+	      output=$output_objdir/$output_la-${k}.$objext
+	      eval test_cmds=\"$reload_cmds\"
+	      func_len " $test_cmds"
+	      len0=$func_len_result
+	      len=$len0
+
+	      # Loop over the list of objects to be linked.
+	      for obj in $save_libobjs
+	      do
+		func_len " $obj"
+		func_arith $len + $func_len_result
+		len=$func_arith_result
+		if test "X$objlist" = X ||
+		   test "$len" -lt "$max_cmd_len"; then
+		  func_append objlist " $obj"
+		else
+		  # The command $test_cmds is almost too long, add a
+		  # command to the queue.
+		  if test "$k" -eq 1 ; then
+		    # The first file doesn't have a previous command to add.
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
+		  else
+		    # All subsequent reloadable object files will link in
+		    # the last one created.
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+		  fi
+		  last_robj=$output_objdir/$output_la-${k}.$objext
+		  func_arith $k + 1
+		  k=$func_arith_result
+		  output=$output_objdir/$output_la-${k}.$objext
+		  objlist=" $obj"
+		  func_len " $last_robj"
+		  func_arith $len0 + $func_len_result
+		  len=$func_arith_result
+		fi
+	      done
+	      # Handle the remaining objects by creating one last
+	      # reloadable object file.  All subsequent reloadable object
+	      # files will link in the last one created.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+	      if test -n "$last_robj"; then
+	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+	      fi
+	      func_append delfiles " $output"
+
+	    else
+	      output=
+	    fi
+
+	    if ${skipped_export-false}; then
+	      func_verbose "generating symbol list for \`$libname.la'"
+	      export_symbols="$output_objdir/$libname.exp"
+	      $opt_dry_run || $RM $export_symbols
+	      libobjs=$output
+	      # Append the command to create the export file.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+	      if test -n "$last_robj"; then
+		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+	      fi
+	    fi
+
+	    test -n "$save_libobjs" &&
+	      func_verbose "creating a temporary reloadable object file: $output"
+
+	    # Loop through the commands generated above and execute them.
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $concat_cmds; do
+	      IFS="$save_ifs"
+	      $opt_silent || {
+		  func_quote_for_expand "$cmd"
+		  eval "func_echo $func_quote_for_expand_result"
+	      }
+	      $opt_dry_run || eval "$cmd" || {
+		lt_exit=$?
+
+		# Restore the uninstalled library and exit
+		if test "$opt_mode" = relink; then
+		  ( cd "$output_objdir" && \
+		    $RM "${realname}T" && \
+		    $MV "${realname}U" "$realname" )
+		fi
+
+		exit $lt_exit
+	      }
+	    done
+	    IFS="$save_ifs"
+
+	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+
+          if ${skipped_export-false}; then
+	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	      tmp_export_symbols="$export_symbols"
+	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	    fi
+
+	    if test -n "$orig_export_symbols"; then
+	      # The given exports_symbols file has to be filtered, so filter it.
+	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	      # 's' commands which not all seds can handle. GNU sed should be fine
+	      # though. Also, the filter scales superlinearly with the number of
+	      # global variables. join(1) would be nice here, but unfortunately
+	      # isn't a blessed tool.
+	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	      export_symbols=$output_objdir/$libname.def
+	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	    fi
+	  fi
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	      cmds=$archive_expsym_cmds
+	    else
+	      cmds=$archive_cmds
+	    fi
+	  fi
+	fi
+
+	if test -n "$delfiles"; then
+	  # Append the command to remove temporary files to $cmds.
+	  eval cmds=\"\$cmds~\$RM $delfiles\"
+	fi
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append libobjs " $func_extract_archives_result"
+	  test "X$libobjs" = "X " && libobjs=
+	fi
+
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $opt_silent || {
+	    func_quote_for_expand "$cmd"
+	    eval "func_echo $func_quote_for_expand_result"
+	  }
+	  $opt_dry_run || eval "$cmd" || {
+	    lt_exit=$?
+
+	    # Restore the uninstalled library and exit
+	    if test "$opt_mode" = relink; then
+	      ( cd "$output_objdir" && \
+	        $RM "${realname}T" && \
+		$MV "${realname}U" "$realname" )
+	    fi
+
+	    exit $lt_exit
+	  }
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$opt_mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+	  if test -n "$convenience"; then
+	    if test -z "$whole_archive_flag_spec"; then
+	      func_show_eval '${RM}r "$gentop"'
+	    fi
+	  fi
+
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+	test -n "$objs$old_deplibs" && \
+	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+	libobj=$output
+	func_lo2o "$libobj"
+	obj=$func_lo2o_result
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+	else
+	  gentop="$output_objdir/${obj}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $convenience
+	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+	fi
+      fi
+
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+	func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) func_stripname '' '.exe' "$output"
+	          output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+	&& test "$dlopen_self" = unknown \
+	&& test "$dlopen_self_static" = unknown && \
+	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+	# Don't allow lazy linking, it breaks C++ global constructors
+	# But is supposedly fixed on 10.4 or later (yay!).
+	if test "$tagname" = CXX ; then
+	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+	    10.[0123])
+	      func_append compile_command " ${wl}-bind_at_load"
+	      func_append finalize_command " ${wl}-bind_at_load"
+	    ;;
+	  esac
+	fi
+	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $compile_deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $compile_deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append perm_rpath " $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  ::) dllsearchpath=$libdir;;
+	  *) func_append dllsearchpath ":$libdir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+	func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+	# Replace the output file specification.
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	exit_status=0
+	func_show_eval "$link_command" 'exit_status=$?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	# Delete the generated files.
+	if test -f "$output_objdir/${outputname}S.${objext}"; then
+	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+	fi
+
+	exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$opt_dry_run || $RM $output
+	# Link the executable and exit
+	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	func_warning "this platform does not like uninstalled shared libraries"
+	func_warning "\`$output' will be relinked during installation"
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    func_quote_for_eval "$var_value"
+	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) func_stripname '' '.exe' "$output"
+	         output=$func_stripname_result ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    func_stripname '' '.exe' "$outputname"
+	    outputname=$func_stripname_result ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    func_dirname_and_basename "$output" "" "."
+	    output_name=$func_basename_result
+	    output_path=$func_dirname_result
+	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
+	    cwrapper="$output_path/$output_name.exe"
+	    $RM $cwrappersource $cwrapper
+	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_cwrapperexe_src > $cwrappersource
+
+	    # The wrapper executable is built using the $host compiler,
+	    # because it contains $host paths and files. If cross-
+	    # compiling, it, like the target executable, must be
+	    # executed on the $host or under an emulation environment.
+	    $opt_dry_run || {
+	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+	      $STRIP $cwrapper
+	    }
+
+	    # Now, create the wrapper script for func_source use:
+	    func_ltwrapper_scriptname $cwrapper
+	    $RM $func_ltwrapper_scriptname_result
+	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+	    $opt_dry_run || {
+	      # note: this script will not be executed, so do not chmod.
+	      if test "x$build" = "x$host" ; then
+		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+	      else
+		func_emit_wrapper no > $func_ltwrapper_scriptname_result
+	      fi
+	    }
+	  ;;
+	  * )
+	    $RM $output
+	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_wrapper no > $output
+	    chmod +x $output
+	  ;;
+	esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save $symfileobj"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$old_deplibs $non_pic_objects"
+	  if test "$preload" = yes && test -f "$symfileobj"; then
+	    func_append oldobjs " $symfileobj"
+	  fi
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	func_append generated " $gentop"
+
+	func_extract_archives $gentop $addlibs
+	func_append oldobjs " $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+	cmds=$old_archive_from_new_cmds
+      else
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append oldobjs " $func_extract_archives_result"
+	fi
+
+	# POSIX demands no paths to be encoded in archives.  We have
+	# to avoid creating archives with duplicate basenames if we
+	# might have to extract them afterwards, e.g., when creating a
+	# static archive out of a convenience library, or when linking
+	# the entirety of a libtool archive into another (currently
+	# not supported by libtool).
+	if (for obj in $oldobjs
+	    do
+	      func_basename "$obj"
+	      $ECHO "$func_basename_result"
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	  :
+	else
+	  echo "copying selected object files to avoid basename conflicts..."
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+	  func_mkdir_p "$gentop"
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  counter=1
+	  for obj in $save_oldobjs
+	  do
+	    func_basename "$obj"
+	    objbase="$func_basename_result"
+	    case " $oldobjs " in
+	    " ") oldobjs=$obj ;;
+	    *[\ /]"$objbase "*)
+	      while :; do
+		# Make sure we don't pick an alternate name that also
+		# overlaps.
+		newobj=lt$counter-$objbase
+		func_arith $counter + 1
+		counter=$func_arith_result
+		case " $oldobjs " in
+		*[\ /]"$newobj "*) ;;
+		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
+		esac
+	      done
+	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
+	      ;;
+	    *) func_append oldobjs " $obj" ;;
+	    esac
+	  done
+	fi
+	eval cmds=\"$old_archive_cmds\"
+
+	func_len " $cmds"
+	len=$func_len_result
+	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  func_verbose "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  eval test_cmds=\"$old_archive_cmds\"
+	  func_len " $test_cmds"
+	  len0=$func_len_result
+	  len=$len0
+	  for obj in $save_oldobjs
+	  do
+	    func_len " $obj"
+	    func_arith $len + $func_len_result
+	    len=$func_arith_result
+	    func_append objlist " $obj"
+	    if test "$len" -lt "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+		RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
+	      len=$len0
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  func_quote_for_eval "$var_value"
+	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		func_basename "$deplib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$deplib' is not a valid libtool archive"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
+		;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+
+	    for lib in $dlfiles; do
+	      case $lib in
+	      *.la)
+	        func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      *) func_append newdlfiles " $lib" ;;
+	      esac
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+	      *.la)
+		# Only pass preopened files to the pseudo-archive (for
+		# eventual linking with the app. that links it) if we
+		# didn't already link the preopened objects directly into
+		# the library:
+		func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      esac
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlfiles " $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlprefiles " $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $RM $output
+	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test "x$bindir" != x ;
+	      then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
+	  esac
+	  $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $ECHO >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+	odir="$objdir"
+      else
+	odir="$dir/$objdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$opt_mode" = uninstall && odir="$dir"
+
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
+	case " $rmdirs " in
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+	 { test -h "$file"; } >/dev/null 2>&1 ||
+	 test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if func_lalib_p "$file"; then
+	  func_source $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    func_append rmfiles " $odir/$n"
+	  done
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+	  case "$opt_mode" in
+	  clean)
+	    case " $library_names " in
+	    *" $dlname "*) ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+	    esac
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+	    ;;
+	  uninstall)
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	    ;;
+	  esac
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if func_lalib_p "$file"; then
+
+	  # Read the .lo file
+	  func_source $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" &&
+	     test "$pic_object" != none; then
+	    func_append rmfiles " $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" &&
+	     test "$non_pic_object" != none; then
+	    func_append rmfiles " $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test "$opt_mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    func_stripname '' '.exe' "$file"
+	    file=$func_stripname_result
+	    func_stripname '' '.exe' "$name"
+	    noexename=$func_stripname_result
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    func_append rmfiles " $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if func_ltwrapper_p "$file"; then
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      relink_command=
+	      func_source $func_ltwrapper_scriptname_result
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
+	    else
+	      relink_command=
+	      func_source $dir/$noexename
+	    fi
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      func_append rmfiles " $odir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      func_append rmfiles " $odir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$opt_mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$opt_mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/config/ltoptions.m4 b/config/ltoptions.m4
new file mode 100644
index 0000000..17cfd51
--- /dev/null
+++ b/config/ltoptions.m4
@@ -0,0 +1,369 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/config/ltsugar.m4 b/config/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/config/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/config/ltversion.m4 b/config/ltversion.m4
new file mode 100644
index 0000000..9c7b5d4
--- /dev/null
+++ b/config/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3293 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4])
+m4_define([LT_PACKAGE_REVISION], [1.3293])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4'
+macro_revision='1.3293'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/config/lt~obsolete.m4 b/config/lt~obsolete.m4
new file mode 100644
index 0000000..c573da9
--- /dev/null
+++ b/config/lt~obsolete.m4
@@ -0,0 +1,98 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
diff --git a/config/missing b/config/missing
new file mode 100644
index 0000000..894e786
--- /dev/null
+++ b/config/missing
@@ -0,0 +1,360 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2005-06-08.21
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# This program 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, 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.
+
+# You should have received a copy of the GNU General Public License
+# 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.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case "$1" in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake at gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case "$1" in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f y.tab.h ]; then
+	echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+    fi
+    if [ -f "$file" ]; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case "$firstarg" in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case "$firstarg" in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config/mkinstalldirs b/config/mkinstalldirs
new file mode 100644
index 0000000..8ab885e
--- /dev/null
+++ b/config/mkinstalldirs
@@ -0,0 +1,99 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman at prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+   case "${1}" in
+     -h | --help | --h* )			# -h for help
+	echo "${usage}" 1>&2; exit 0 ;;
+     -m )					# -m PERM arg
+	shift
+	test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
+	dirmode="${1}"
+	shift ;;
+     -- ) shift; break ;;			# stop option processing
+     -* ) echo "${usage}" 1>&2; exit 1 ;;	# unknown option
+     * )  break ;;				# first non-opt arg
+   esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+0) exit 0 ;;
+esac
+
+case $dirmode in
+'')
+  if mkdir -p -- . 2>/dev/null; then
+    echo "mkdir -p -- $*"
+    exec mkdir -p -- "$@"
+  fi ;;
+*)
+  if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+    echo "mkdir -m $dirmode -p -- $*"
+    exec mkdir -m "$dirmode" -p -- "$@"
+  fi ;;
+esac
+
+for file
+do
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d
+   do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+	echo "mkdir $pathcomp"
+
+	mkdir "$pathcomp" || lasterr=$?
+
+	if test ! -d "$pathcomp"; then
+	  errstatus=$lasterr
+	else
+	  if test ! -z "$dirmode"; then
+	     echo "chmod $dirmode $pathcomp"
+
+	     lasterr=""
+	     chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+	     if test ! -z "$lasterr"; then
+	       errstatus=$lasterr
+	     fi
+	  fi
+	fi
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 3
+# End:
+# mkinstalldirs ends here
diff --git a/configure b/configure
new file mode 100755
index 0000000..5527690
--- /dev/null
+++ b/configure
@@ -0,0 +1,18947 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68 for NCL 2.1.18.
+#
+# Report bugs to <mtholder at gmail.com>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf at gnu.org and mtholder at gmail.com
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='NCL'
+PACKAGE_TARNAME='ncl'
+PACKAGE_VERSION='2.1.18'
+PACKAGE_STRING='NCL 2.1.18'
+PACKAGE_BUGREPORT='mtholder at gmail.com'
+PACKAGE_URL=''
+
+ac_unique_file="ChangeLog"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_list=
+ac_func_list=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+MAYBE_SWIG_DIR
+MAYBE_TEST_DIR
+PYTHON
+POW_LIB
+LIBOBJS
+CXXCPP
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+ac_ct_AR
+AR
+DLLTOOL
+OBJDUMP
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+LN_S
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+enable_dependency_tracking
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_debugging
+enable_asserts
+with_constfuncs
+with_reserveid
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+CXX
+CXXFLAGS
+CCC
+CXXCPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # 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 NCL 2.1.18 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/ncl]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of NCL 2.1.18:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-debugging      build for debugging
+  --enable-asserts        build with asserts turned on even if not debugging
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
+  --with-constfuncs=yes   Defines the NCL_CONST_FUNCS macro so functions that
+                          should be const are declared as such
+  --with-reserveid=yes    Defines the RESERVE_ID_KEYWORD macro so that id is
+                          not used as a variable name
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <mtholder at gmail.com>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+NCL configure 2.1.18
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## --------------------------------- ##
+## Report this to mtholder at gmail.com ##
+## --------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by NCL $as_me 2.1.18, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+as_fn_append ac_header_list " sys/time.h"
+as_fn_append ac_header_list " unistd.h"
+as_fn_append ac_func_list " alarm"
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+
+#	Directory that contains install-sh and other auxiliary files
+ac_aux_dir=
+for ac_dir in config "$srcdir"/config; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+
+################################################################################
+#	According to (http://www.mail-archive.com/autoconf@gnu.org/msg14232.html)
+#		this macro should be after AC_INIT but before AM_INIT_AUTOMAKE
+################################################################################
+
+
+am__api_version='1.11'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='ncl'
+ VERSION='2.1.18'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
+$as_echo_n "checking how to create a ustar tar archive... " >&6; }
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar plaintar pax cpio none'
+_am_tools=${am_cv_prog_tar_ustar-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      { echo "$as_me:$LINENO: $_am_tar --version" >&5
+   ($_am_tar --version) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && break
+    done
+    am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x ustar -w "$$tardir"'
+    am__tar_='pax -L -x ustar -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H ustar -L'
+    am__tar_='find "$tardir" -print | cpio -o -H ustar -L'
+    am__untar='cpio -i -H ustar -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_ustar}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
+   (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
+   ($am__untar <conftest.tar) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+if ${am_cv_prog_tar_ustar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  am_cv_prog_tar_ustar=$_am_tool
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5
+$as_echo "$am_cv_prog_tar_ustar" >&6; }
+
+
+
+
+
+
+
+
+# Checks for programs.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4'
+macro_revision='1.3293'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  ppc64-*linux*|powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  ppc*-*linux*|powerpc*-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[012]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      lt_prog_compiler_pic='-Xcompiler -fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ F* | *Sun*Fortran*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec=
+	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld='+b $libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	  export_dynamic_flag_spec='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     hardcode_libdir_flag_spec='-R$libdir'
+	     ;;
+	   *)
+	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+################################################################################
+# calling AC_PROG_CXX resets CXXFLAGS, we use our own flags set in the
+#	the AX_CXXFLAGS macro below.
+# So we cache the argument to configure
+#	here in ARG_CXX_FLAGS (so that our macro does not override them)
+ARG_CXX_FLAGS="$CXXFLAGS"
+################################################################################
+ARG_CXX_FLAGS="$CXXFLAGS"
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+
+      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    hardcode_direct_CXX=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    hardcode_minus_L_CXX=yes
+	    hardcode_libdir_flag_spec_CXX='-L$libdir'
+	    hardcode_libdir_separator_CXX=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	    allow_undefined_flag_CXX="-z nodefs"
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    no_undefined_flag_CXX=' ${wl}-bernotok'
+	    allow_undefined_flag_CXX=' ${wl}-berok'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      whole_archive_flag_spec_CXX='$convenience'
+	    fi
+	    archive_cmds_need_lc_CXX=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  allow_undefined_flag_CXX=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX=' '
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=yes
+	  file_list_spec_CXX='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+	  enable_shared_with_static_runtimes_CXX=yes
+	  # Don't use ranlib
+	  old_postinstall_cmds_CXX='chmod 644 $oldlib'
+	  postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=no
+	  enable_shared_with_static_runtimes_CXX=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    ld_shlibs_CXX=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      freebsd[12]*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+	hardcode_direct_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	      fi
+	    fi
+	    link_all_deplibs_CXX=yes
+	    ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    archive_cmds_need_lc_CXX=no
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+	      prelink_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      old_archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+		$RANLIB $oldlib'
+	      archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      no_undefined_flag_CXX=' -zdefs'
+	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      hardcode_libdir_flag_spec_CXX='-R$libdir'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      compiler_needs_object_CXX=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  hardcode_libdir_flag_spec_CXX='-R$libdir'
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	ld_shlibs_CXX=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	  hardcode_direct_absolute_CXX=yes
+	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    export_dynamic_flag_spec_CXX='${wl}-E'
+	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        allow_undefined_flag_CXX=' -expect_unresolved \*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+		;;
+	    esac
+
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	      hardcode_libdir_separator_CXX=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+	    no_undefined_flag_CXX=' -zdefs'
+	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    hardcode_libdir_flag_spec_CXX='-R$libdir'
+	    hardcode_shlibpath_var_CXX=no
+	    case $host_os in
+	      solaris2.[0-5] | solaris2.[0-5].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    link_all_deplibs_CXX=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[0-5] | solaris2.[0-5].*) ;;
+		*)
+		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	no_undefined_flag_CXX='${wl}-z,text'
+	allow_undefined_flag_CXX='${wl}-z,nodefs'
+	archive_cmds_need_lc_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+	hardcode_libdir_separator_CXX=':'
+	link_all_deplibs_CXX=yes
+	export_dynamic_flag_spec_CXX='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+	      '"$old_archive_cmds_CXX"
+	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+	      '"$reload_cmds_CXX"
+	    ;;
+	  *)
+	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case ${prev}${p} in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test "$pre_test_object_deps_done" = no; then
+	 case ${prev} in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC* | sunCC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fpic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-qpic'
+	    lt_prog_compiler_static_CXX='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      lt_prog_compiler_pic_CXX='-KPIC'
+	      lt_prog_compiler_static_CXX='-Bstatic'
+	      lt_prog_compiler_wl_CXX='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*) ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_CXX
+	  pic_flag=$lt_prog_compiler_pic_CXX
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+	  allow_undefined_flag_CXX=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc_CXX=no
+	  else
+	    lt_cv_archive_cmds_need_lc_CXX=yes
+	  fi
+	  allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+#Ranlib handled by check for libtool
+CXXFLAGS="$ARG_CXX_FLAGS"
+
+
+		# Check whether --enable-debugging was given.
+if test "${enable_debugging+set}" = set; then :
+  enableval=$enable_debugging;
+else
+  enable_debugging=no
+
+fi
+
+	# Check whether --enable-asserts was given.
+if test "${enable_asserts+set}" = set; then :
+  enableval=$enable_asserts;
+else
+  enable_asserts=yes
+
+fi
+
+	if test "$enable_debugging" = yes
+	then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: *** NOTE: debugging is enabled; optimization is suppressed!" >&5
+$as_echo "$as_me: *** NOTE: debugging is enabled; optimization is suppressed!" >&6;}
+	else
+		if test "$enable_asserts" = no
+		then
+			{ $as_echo "$as_me:${as_lineno-$LINENO}: *** NOTE: asserts will be disabled!" >&5
+$as_echo "$as_me: *** NOTE: asserts will be disabled!" >&6;}
+			CXXFLAGS="$CXXFLAGS -DNDEBUG"
+		fi
+	fi
+
+
+	if test "$enable_debugging" = yes; then
+		CXXFLAGS_OPTIM_SPEED="-O0"
+		CXXFLAGS="$CXXFLAGS -g"
+	else
+		CXXFLAGS_OPTIM_SPEED="-O"
+	fi
+
+	if test "$CXX" = "icpc" -o "$CC" = "icc" ; then
+			#	Intel C compiler for Linux
+		if test "$enable_debugging" = no; then
+			CXXFLAGS_OPTIM_SPEED="-O3"
+			CXXFLAGS_OPTIM_SIZE="-O2"
+		fi
+		case "$build_os" in
+			darwin*) CXXFLAGS="$CXXFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 ";;
+			*);;
+		esac
+	elif test "$CC" = "ccc"; then
+			#	Compaq C compiler for Linux
+		if test "x$arch" = "x"; then
+			arch="host"
+		fi
+		if test "$enable_debugging" = no; then
+			CXXFLAGS_OPTIM_SPEED="-fast -inline speed -arch $arch"
+			CXXFLAGS_OPTIM_SIZE="-fast -inline size -unroll 1 -arch $arch"
+		fi
+	elif test "$CC" = "xlc"; then
+			#	IBM XL C compiler
+		if test "x$arch" = "x"; then
+			arch="auto"
+		fi
+		if test "$enable_debugging" = no; then
+			CXXFLAGS_OPTIM_SPEED="-O3 -qarch=$arch"
+			CXXFLAGS_OPTIM_SIZE="-O3 -qarch=$arch"
+		fi
+	elif test "$GCC" = "yes" ; then
+		if test "$enable_debugging" = yes; then
+				#	Suppress warnings about possibly uninitialized variables but show everything else (used for
+				#   development, but these warnings should also not trip for release builds)
+			CXXFLAGS_WARNINGS="$CXXFLAGS_WARNINGS -Wall -Wimplicit -Wreturn-type -Wunused -Wredundant-decls -Wcast-align -Wcomment -Wextra"
+		else
+				#	Just suppress warnings about possibly uninitialized variables
+			CXXFLAGS_WARNINGS="$CXXFLAGS_WARNINGS"
+			CXXFLAGS_OPTIM_SPEED="-O3 -ffast-math"
+			CXXFLAGS_OPTIM_SIZE="-Os -ffast-math"
+		fi
+		case "$build_os" in
+			darwin*) CXXFLAGS_WARNINGS="$CXXFLAGS_WARNINGS";;
+			*);;
+		esac
+	fi
+	if test "x$CXXFLAGS_OPTIM_SIZE" = "x"; then
+		CXXFLAGS_OPTIM_SIZE=$CXXFLAGS_OPTIM_SPEED
+	fi
+
+
+	CXXFLAGS="$CXXFLAGS $CXXFLAGS_OPTIM_SPEED $CXXFLAGS_WARNINGS"
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler works" >&5
+$as_echo_n "checking whether C++ compiler works... " >&6; }
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <vector>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  compiler_works='yes'
+else
+  compiler_works='no'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $compiler_works" >&5
+$as_echo "$compiler_works" >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test x$compiler_works = xno
+then
+    as_fn_error $? "No functioning C++ compiler found" "$LINENO" 5
+fi
+
+################################################################################
+# the install-check requires python with subprocess to actually perform a check
+# these tests should not cause failure of configure if python is not found.
+################################################################################
+#AC_PATH_PROG([SWIG], [swig], [], [$PATH])
+
+#if test -z "$SWIG"
+#then
+#	if test -z "$USE_SWIG"
+#	then
+#		MAYBE_SWIG_DIR=
+#	else
+#		AC_MSG_ERROR([--with-swig was specified, but swig was not found on the path])
+#	fi
+#else
+#	if test -z "$USE_SWIG"
+#	then
+#		MAYBE_SWIG_DIR=
+#	else
+#		MAYBE_SWIG_DIR="swig"
+#	fi
+#fi
+#
+#PYTHON_SDK_DIR="$PYTHON_SDK_DIR"
+#if test -z "$PYTHON_SDK_DIR"
+#then
+#	if ! test -z "$MAYBE_SWIG_DIR"
+#	then
+#		AC_MSG_WARN([Currently the swig compilation requires that you specify the PYTHON_SDK_DIR environmental variable. It is very likely that the swig compilation will fail without this variable. The variable should be set to the directory that contains the python installation with subdirectories bin, include, and lib ])
+#	fi
+#fi
+#
+#PYTHON_NAME_WITH_VERSION="$PYTHON_NAME_WITH_VERSION"
+#if test -z "$PYTHON_NAME_WITH_VERSION"
+#then
+#	if ! test -z "$MAYBE_SWIG_DIR"
+#	then
+#		AC_MSG_WARN([Currently the swig compilation requires that you specify the PYTHON_NAME_WITH_VERSION environmental variable. It is very likely that the swig compilation will fail without this variable. It should be set to your python version, such as python2.6 ])
+#	fi
+#fi
+
+#MAYBE_SWIG_DIR=
+#USE_SWIG=
+#AC_ARG_WITH(
+#	[swig],
+#	AC_HELP_STRING(
+#		[--with-swig-python=yes],
+#		[Compiles NCL for use with SWIG bindings for use with languages other than C++ - currently only python examples are included]
+#		),
+#	[
+#	if test "$withval" = "yes"; then
+#		AM_PATH_PYTHON
+#		AC_PROG_SWIG(1.3.17)
+#		SWIG_ENABLE_CXX
+#		SWIG_PYTHON
+#		MAYBE_SWIG_DIR="swig"
+#	fi
+#	])
+
+
+
+#AC_CXX_RTTI
+
+CPPFLAGS="-I\$(top_srcdir) $CPPFLAGS"
+# Checks for libraries.
+
+# Checks for header files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+for ac_header in float.h stdlib.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if ${ac_cv_header_stdbool_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdbool.h>
+#ifndef bool
+ "error: bool is not defined"
+#endif
+#ifndef false
+ "error: false is not defined"
+#endif
+#if false
+ "error: false is not 0"
+#endif
+#ifndef true
+ "error: true is not defined"
+#endif
+#if true != 1
+ "error: true is not 1"
+#endif
+#ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+#endif
+
+	struct s { _Bool s: 1; _Bool t; } s;
+
+	char a[true == 1 ? 1 : -1];
+	char b[false == 0 ? 1 : -1];
+	char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+	char d[(bool) 0.5 == true ? 1 : -1];
+	/* See body of main program for 'e'.  */
+	char f[(_Bool) 0.0 == false ? 1 : -1];
+	char g[true];
+	char h[sizeof (_Bool)];
+	char i[sizeof s.t];
+	enum { j = false, k = true, l = false * true, m = true * 256 };
+	/* The following fails for
+	   HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+	_Bool n[m];
+	char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+	char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+	/* Catch a bug in an HP-UX C compiler.  See
+	   http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+	   http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+	 */
+	_Bool q = true;
+	_Bool *pq = &q;
+
+int
+main ()
+{
+
+	bool e = &s;
+	*pq |= q;
+	*pq |= ! q;
+	/* Refer to every declared value, to avoid compiler optimizations.  */
+	return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+		+ !m + !n + !o + !p + !q + !pq);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdbool_h=yes
+else
+  ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if ${ac_cv_struct_tm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+				     int *p = &tm.tm_sec;
+				     return !p;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm=time.h
+else
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
+
+fi
+
+
+# Checks for library functions.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if ${ac_cv_header_time+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_time=yes
+else
+  ac_cv_header_time=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+fi
+
+
+
+
+  for ac_header in $ac_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+  for ac_func in $ac_func_list
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5
+$as_echo_n "checking for working mktime... " >&6; }
+if ${ac_cv_func_working_mktime+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_working_mktime=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Test program from Paul Eggert and Tony Leneis.  */
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# ifdef HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+
+#include <limits.h>
+#include <stdlib.h>
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifndef HAVE_ALARM
+# define alarm(X) /* empty */
+#endif
+
+/* Work around redefinition to rpl_putenv by other config tests.  */
+#undef putenv
+
+static time_t time_t_max;
+static time_t time_t_min;
+
+/* Values we'll use to set the TZ environment variable.  */
+static const char *tz_strings[] = {
+  (const char *) 0, "TZ=GMT0", "TZ=JST-9",
+  "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"
+};
+#define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0]))
+
+/* Return 0 if mktime fails to convert a date in the spring-forward gap.
+   Based on a problem report from Andreas Jaeger.  */
+static int
+spring_forward_gap ()
+{
+  /* glibc (up to about 1998-10-07) failed this test. */
+  struct tm tm;
+
+  /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
+     instead of "TZ=America/Vancouver" in order to detect the bug even
+     on systems that don't support the Olson extension, or don't have the
+     full zoneinfo tables installed.  */
+  putenv ((char*) "TZ=PST8PDT,M4.1.0,M10.5.0");
+
+  tm.tm_year = 98;
+  tm.tm_mon = 3;
+  tm.tm_mday = 5;
+  tm.tm_hour = 2;
+  tm.tm_min = 0;
+  tm.tm_sec = 0;
+  tm.tm_isdst = -1;
+  return mktime (&tm) != (time_t) -1;
+}
+
+static int
+mktime_test1 (time_t now)
+{
+  struct tm *lt;
+  return ! (lt = localtime (&now)) || mktime (lt) == now;
+}
+
+static int
+mktime_test (time_t now)
+{
+  return (mktime_test1 (now)
+	  && mktime_test1 ((time_t) (time_t_max - now))
+	  && mktime_test1 ((time_t) (time_t_min + now)));
+}
+
+static int
+irix_6_4_bug ()
+{
+  /* Based on code from Ariel Faigon.  */
+  struct tm tm;
+  tm.tm_year = 96;
+  tm.tm_mon = 3;
+  tm.tm_mday = 0;
+  tm.tm_hour = 0;
+  tm.tm_min = 0;
+  tm.tm_sec = 0;
+  tm.tm_isdst = -1;
+  mktime (&tm);
+  return tm.tm_mon == 2 && tm.tm_mday == 31;
+}
+
+static int
+bigtime_test (int j)
+{
+  struct tm tm;
+  time_t now;
+  tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j;
+  now = mktime (&tm);
+  if (now != (time_t) -1)
+    {
+      struct tm *lt = localtime (&now);
+      if (! (lt
+	     && lt->tm_year == tm.tm_year
+	     && lt->tm_mon == tm.tm_mon
+	     && lt->tm_mday == tm.tm_mday
+	     && lt->tm_hour == tm.tm_hour
+	     && lt->tm_min == tm.tm_min
+	     && lt->tm_sec == tm.tm_sec
+	     && lt->tm_yday == tm.tm_yday
+	     && lt->tm_wday == tm.tm_wday
+	     && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
+		  == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
+	return 0;
+    }
+  return 1;
+}
+
+static int
+year_2050_test ()
+{
+  /* The correct answer for 2050-02-01 00:00:00 in Pacific time,
+     ignoring leap seconds.  */
+  unsigned long int answer = 2527315200UL;
+
+  struct tm tm;
+  time_t t;
+  tm.tm_year = 2050 - 1900;
+  tm.tm_mon = 2 - 1;
+  tm.tm_mday = 1;
+  tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+  tm.tm_isdst = -1;
+
+  /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
+     instead of "TZ=America/Vancouver" in order to detect the bug even
+     on systems that don't support the Olson extension, or don't have the
+     full zoneinfo tables installed.  */
+  putenv ((char*) "TZ=PST8PDT,M4.1.0,M10.5.0");
+
+  t = mktime (&tm);
+
+  /* Check that the result is either a failure, or close enough
+     to the correct answer that we can assume the discrepancy is
+     due to leap seconds.  */
+  return (t == (time_t) -1
+	  || (0 < t && answer - 120 <= t && t <= answer + 120));
+}
+
+int
+main ()
+{
+  time_t t, delta;
+  int i, j;
+
+  /* This test makes some buggy mktime implementations loop.
+     Give up after 60 seconds; a mktime slower than that
+     isn't worth using anyway.  */
+  alarm (60);
+
+  for (;;)
+    {
+      t = (time_t_max << 1) + 1;
+      if (t <= time_t_max)
+	break;
+      time_t_max = t;
+    }
+  time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - time_t_max;
+
+  delta = time_t_max / 997; /* a suitable prime number */
+  for (i = 0; i < N_STRINGS; i++)
+    {
+      if (tz_strings[i])
+	putenv ((char*) tz_strings[i]);
+
+      for (t = 0; t <= time_t_max - delta; t += delta)
+	if (! mktime_test (t))
+	  return 1;
+      if (! (mktime_test ((time_t) 1)
+	     && mktime_test ((time_t) (60 * 60))
+	     && mktime_test ((time_t) (60 * 60 * 24))))
+	return 1;
+
+      for (j = 1; ; j <<= 1)
+	if (! bigtime_test (j))
+	  return 1;
+	else if (INT_MAX / 2 < j)
+	  break;
+      if (! bigtime_test (INT_MAX))
+	return 1;
+    }
+  return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ());
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_working_mktime=yes
+else
+  ac_cv_func_working_mktime=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_working_mktime" >&5
+$as_echo "$ac_cv_func_working_mktime" >&6; }
+if test $ac_cv_func_working_mktime = no; then
+  case " $LIBOBJS " in
+  *" mktime.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS mktime.$ac_objext"
+ ;;
+esac
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
+$as_echo_n "checking for working strtod... " >&6; }
+if ${ac_cv_func_strtod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_strtod=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+$ac_includes_default
+#ifndef strtod
+double strtod ();
+#endif
+int
+main()
+{
+  {
+    /* Some versions of Linux strtod mis-parse strings with leading '+'.  */
+    char *string = " +69";
+    char *term;
+    double value;
+    value = strtod (string, &term);
+    if (value != 69 || term != (string + 4))
+      return 1;
+  }
+
+  {
+    /* Under Solaris 2.4, strtod returns the wrong value for the
+       terminating character under some conditions.  */
+    char *string = "NaN";
+    char *term;
+    strtod (string, &term);
+    if (term != string && *(term - 1) == 0)
+      return 1;
+  }
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_strtod=yes
+else
+  ac_cv_func_strtod=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
+$as_echo "$ac_cv_func_strtod" >&6; }
+if test $ac_cv_func_strtod = no; then
+  case " $LIBOBJS " in
+  *" strtod.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
+ ;;
+esac
+
+ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
+if test "x$ac_cv_func_pow" = xyes; then :
+
+fi
+
+if test $ac_cv_func_pow = no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
+$as_echo_n "checking for pow in -lm... " >&6; }
+if ${ac_cv_lib_m_pow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pow ();
+int
+main ()
+{
+return pow ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_pow=yes
+else
+  ac_cv_lib_m_pow=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
+$as_echo "$ac_cv_lib_m_pow" >&6; }
+if test "x$ac_cv_lib_m_pow" = xyes; then :
+  POW_LIB=-lm
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
+$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
+fi
+
+fi
+
+fi
+
+for ac_func in memmove strchr strtol
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+################################################################################
+# the install-check requires python with subprocess to actually perform a check
+# these tests should not cause failure of configure if python is not found.
+################################################################################
+# Extract the first word of "python", so it can be a program name with args.
+set dummy python; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PYTHON+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PYTHON in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+if test -n "$PYTHON"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
+$as_echo "$PYTHON" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+	if test -z "PYTHON"
+	then
+		# Extract the first word of "python", so it can be a program name with args.
+set dummy python; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PYTHON+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PYTHON in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+if test -n "$PYTHON"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
+$as_echo "$PYTHON" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking python module: subprocess" >&5
+$as_echo_n "checking python module: subprocess... " >&6; }
+	if test -z "$PYTHON"
+	then
+		false
+	else
+		"$PYTHON" -c "import subprocess" 2>/dev/null
+	fi
+	if test $? -eq 0;
+	then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+		eval HAVE_PYMOD_SUBPROCESS=yes
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+		eval HAVE_PYMOD_SUBPROCESS=no
+
+		if test -n ""
+		then
+			if test -n ""
+			then
+				as_fn_error $? "" "$LINENO" 5
+			else
+				as_fn_error $? "failed to find required module subprocess" "$LINENO" 5
+			fi
+			exit 1
+		else
+			PYTHON=""
+		fi
+	fi
+
+
+
+if test -z "$PYTHON"
+then
+	MAYBE_TEST_DIR=
+else
+	MAYBE_TEST_DIR="test"
+fi
+
+
+# Check whether --with-constfuncs was given.
+if test "${with_constfuncs+set}" = set; then :
+  withval=$with_constfuncs;
+	if test "$withval" = "yes"; then
+		CPPFLAGS="-DNCL_CONST_FUNCS $CPPFLAGS"
+	fi
+
+fi
+
+
+
+# Check whether --with-reserveid was given.
+if test "${with_reserveid+set}" = set; then :
+  withval=$with_reserveid;
+	if test "$withval" = "yes"; then
+		CPPFLAGS="-DRESERVE_ID_KEYWORD $CPPFLAGS"
+	fi
+
+fi
+
+
+
+
+
+
+
+#AC_SUBST(PYTHON_SDK_DIR)
+#AC_SUBST(PYTHON_NAME_WITH_VERSION)
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+ac_config_files="$ac_config_files Makefile example/Makefile example/basiccmdline/Makefile example/compressor/Makefile example/gapcode/Makefile example/nclsimplest/Makefile example/ncltest/Makefile example/normalizer/Makefile example/patristic/Makefile example/phylobaseinterface/Makefile example/splitsinfile/Makefile example/subsetter/Makefile example/translate/Makefile ncl/Makefile test/Makefile nclv2.1.pc"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by NCL $as_me 2.1.18, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <mtholder at gmail.com>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+NCL config.status 2.1.18
+configured by $0, generated by GNU Autoconf 2.68,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "$hardcode_libdir_flag_spec_ld_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+nm_file_list_spec \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "example/Makefile") CONFIG_FILES="$CONFIG_FILES example/Makefile" ;;
+    "example/basiccmdline/Makefile") CONFIG_FILES="$CONFIG_FILES example/basiccmdline/Makefile" ;;
+    "example/compressor/Makefile") CONFIG_FILES="$CONFIG_FILES example/compressor/Makefile" ;;
+    "example/gapcode/Makefile") CONFIG_FILES="$CONFIG_FILES example/gapcode/Makefile" ;;
+    "example/nclsimplest/Makefile") CONFIG_FILES="$CONFIG_FILES example/nclsimplest/Makefile" ;;
+    "example/ncltest/Makefile") CONFIG_FILES="$CONFIG_FILES example/ncltest/Makefile" ;;
+    "example/normalizer/Makefile") CONFIG_FILES="$CONFIG_FILES example/normalizer/Makefile" ;;
+    "example/patristic/Makefile") CONFIG_FILES="$CONFIG_FILES example/patristic/Makefile" ;;
+    "example/phylobaseinterface/Makefile") CONFIG_FILES="$CONFIG_FILES example/phylobaseinterface/Makefile" ;;
+    "example/splitsinfile/Makefile") CONFIG_FILES="$CONFIG_FILES example/splitsinfile/Makefile" ;;
+    "example/subsetter/Makefile") CONFIG_FILES="$CONFIG_FILES example/subsetter/Makefile" ;;
+    "example/translate/Makefile") CONFIG_FILES="$CONFIG_FILES example/translate/Makefile" ;;
+    "ncl/Makefile") CONFIG_FILES="$CONFIG_FILES ncl/Makefile" ;;
+    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "nclv2.1.pc") CONFIG_FILES="$CONFIG_FILES nclv2.1.pc" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+#                 Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..f618db6
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,201 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_INIT(NCL, 2.1.18, mtholder at gmail.com)
+AC_CONFIG_HEADERS([config.h])
+
+AC_PREREQ(2.57)
+
+#	Directory that contains install-sh and other auxiliary files
+AC_CONFIG_AUX_DIR([config])
+
+################################################################################
+#	According to (http://www.mail-archive.com/autoconf@gnu.org/msg14232.html)
+#		this macro should be after AC_INIT but before AM_INIT_AUTOMAKE
+################################################################################
+AC_CONFIG_MACRO_DIR(config)
+
+AM_INIT_AUTOMAKE([1.6 foreign dist-zip tar-ustar filename-length-max=299])
+
+AC_CONFIG_SRCDIR([ChangeLog])
+
+# Checks for programs.
+AC_PROG_LN_S
+AC_PROG_INSTALL
+AC_PROG_LIBTOOL
+
+################################################################################
+# calling AC_PROG_CXX resets CXXFLAGS, we use our own flags set in the
+#	the AX_CXXFLAGS macro below.
+# So we cache the argument to configure
+#	here in ARG_CXX_FLAGS (so that our macro does not override them)
+ARG_CXX_FLAGS="$CXXFLAGS"
+################################################################################
+ARG_CXX_FLAGS="$CXXFLAGS"
+AC_PROG_CXX
+
+#Ranlib handled by check for libtool
+CXXFLAGS="$ARG_CXX_FLAGS"
+AX_CXXFLAGS
+
+AC_MSG_CHECKING([whether C++ compiler works])
+AC_LANG_PUSH(C++)
+AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[
+#include <vector>
+]], [[]]), [compiler_works='yes'], [compiler_works='no'])
+AC_MSG_RESULT([$compiler_works])
+AC_LANG_POP()
+if test x$compiler_works = xno
+then
+    AC_MSG_ERROR([No functioning C++ compiler found])
+fi
+
+################################################################################
+# the install-check requires python with subprocess to actually perform a check
+# these tests should not cause failure of configure if python is not found.
+################################################################################
+#AC_PATH_PROG([SWIG], [swig], [], [$PATH])
+
+#if test -z "$SWIG"
+#then
+#	if test -z "$USE_SWIG"
+#	then
+#		MAYBE_SWIG_DIR=
+#	else
+#		AC_MSG_ERROR([--with-swig was specified, but swig was not found on the path])
+#	fi
+#else
+#	if test -z "$USE_SWIG"
+#	then
+#		MAYBE_SWIG_DIR=
+#	else
+#		MAYBE_SWIG_DIR="swig"
+#	fi
+#fi
+#
+#PYTHON_SDK_DIR="$PYTHON_SDK_DIR"
+#if test -z "$PYTHON_SDK_DIR"
+#then
+#	if ! test -z "$MAYBE_SWIG_DIR"
+#	then
+#		AC_MSG_WARN([Currently the swig compilation requires that you specify the PYTHON_SDK_DIR environmental variable. It is very likely that the swig compilation will fail without this variable. The variable should be set to the directory that contains the python installation with subdirectories bin, include, and lib ])
+#	fi
+#fi
+#
+#PYTHON_NAME_WITH_VERSION="$PYTHON_NAME_WITH_VERSION"
+#if test -z "$PYTHON_NAME_WITH_VERSION"
+#then
+#	if ! test -z "$MAYBE_SWIG_DIR"
+#	then
+#		AC_MSG_WARN([Currently the swig compilation requires that you specify the PYTHON_NAME_WITH_VERSION environmental variable. It is very likely that the swig compilation will fail without this variable. It should be set to your python version, such as python2.6 ])
+#	fi
+#fi
+
+#MAYBE_SWIG_DIR=
+#USE_SWIG=
+#AC_ARG_WITH(
+#	[swig],
+#	AC_HELP_STRING(
+#		[--with-swig-python=yes],
+#		[Compiles NCL for use with SWIG bindings for use with languages other than C++ - currently only python examples are included]
+#		),
+#	[
+#	if test "$withval" = "yes"; then
+#		AM_PATH_PYTHON
+#		AC_PROG_SWIG(1.3.17)
+#		SWIG_ENABLE_CXX
+#		SWIG_PYTHON
+#		MAYBE_SWIG_DIR="swig"
+#	fi
+#	])
+
+
+AC_SUBST(CXXFLAGS)
+#AC_CXX_RTTI
+
+CPPFLAGS="-I\$(top_srcdir) $CPPFLAGS"
+# Checks for libraries.
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([float.h stdlib.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_C_CONST
+AC_C_INLINE
+AC_STRUCT_TM
+
+# Checks for library functions.
+AC_FUNC_MKTIME
+AC_FUNC_STRTOD
+AC_CHECK_FUNCS([memmove strchr strtol])
+
+################################################################################
+# the install-check requires python with subprocess to actually perform a check
+# these tests should not cause failure of configure if python is not found.
+################################################################################
+AC_PATH_PROG([PYTHON], [python], [], [$PATH])
+AC_PYTHON_MODULE([subprocess], [], [])
+AC_SUBST(PYTHON)
+
+if test -z "$PYTHON"
+then
+	MAYBE_TEST_DIR=
+else
+	MAYBE_TEST_DIR="test"
+fi
+
+AC_ARG_WITH(
+	[constfuncs],
+	AC_HELP_STRING(
+		[--with-constfuncs=yes],
+		[Defines the NCL_CONST_FUNCS macro so functions that should be const are declared as such]
+		),
+	[
+	if test "$withval" = "yes"; then
+		CPPFLAGS="-DNCL_CONST_FUNCS $CPPFLAGS"
+	fi
+	])
+
+AC_ARG_WITH(
+	[reserveid],
+	AC_HELP_STRING(
+		[--with-reserveid=yes],
+		[Defines the RESERVE_ID_KEYWORD macro so that id is not used as a variable name]
+		),
+	[
+	if test "$withval" = "yes"; then
+		CPPFLAGS="-DRESERVE_ID_KEYWORD $CPPFLAGS"
+	fi
+	])
+
+
+
+
+AC_SUBST(MAYBE_TEST_DIR)
+AC_SUBST(MAYBE_SWIG_DIR)
+#AC_SUBST(PYTHON_SDK_DIR)
+#AC_SUBST(PYTHON_NAME_WITH_VERSION)
+
+AC_PROG_MAKE_SET
+
+AC_CONFIG_FILES([					\
+	Makefile 						\
+	example/Makefile				\
+	example/basiccmdline/Makefile	\
+	example/compressor/Makefile	\
+	example/gapcode/Makefile		\
+	example/nclsimplest/Makefile	\
+	example/ncltest/Makefile		\
+	example/normalizer/Makefile		\
+	example/patristic/Makefile		\
+	example/phylobaseinterface/Makefile		\
+	example/splitsinfile/Makefile	\
+	example/subsetter/Makefile	\
+	example/translate/Makefile   	\
+	ncl/Makefile					\
+	test/Makefile                    \
+	nclv2.1.pc
+	])
+AC_OUTPUT
diff --git a/data/characters.nex b/data/characters.nex
new file mode 100644
index 0000000..18ed5f7
--- /dev/null
+++ b/data/characters.nex
@@ -0,0 +1,127 @@
+#nexus
+
+begin taxa;
+  dimensions ntax=6;
+  taxlabels
+	'P. fimbriata'
+	'P. robusta'
+	'P. americana'
+	'P. myriophylla'
+	'P. polygama'
+	'P. macrophylla'
+  ;
+end;
+
+[!
+*************
+* Standard  *
+*************
+]
+begin characters;
+  dimensions nchar=45;
+  format datatype=dna missing=? gap=-;
+  matrix
+	P._fimbriata    acctcggcttaacgaacctcggcttaacgaacctcggcttaacga
+	P._robusta      acctcggcttaaccaacctcggcttaacgaacctcggcttaacga
+	P._americana    acgtcgctttca---acgtcgctttcaccaacgtcgctttcacca
+	P._myriophylla  acgtcgctttca---acgtcgctttcaccaacgtc?ctttcacca
+	P._polygama     acgtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca
+	P._macrophylla  acgtcgctctcaccaacgtcgctttcaccaacgtcgctttcacca
+  ;
+end;
+
+[!
+**********
+* Tokens *
+**********
+]
+begin characters;
+  dimensions nchar=3;
+  charstatelabels
+	1 'leaf margins' / entire fimbriate,
+	2 'flower color' / 'white to cream' crimson,
+	3 'breeding system' / hermaphroditic gynomonoecious gynodioecious dioecious
+  ;
+  format tokens;
+  matrix
+	P._fimbriata    fimbriate  crimson         gynomonoecious
+	P._robusta      fimbriate  crimson         gynomonoecious
+	P._americana    entire     white_to_cream  hermaphroditic
+	P._myriophylla  entire     white_to_cream  hermaphroditic
+	P._polygama     entire     white_to_cream  dioecious
+	P._macrophylla  entire     crimson         gynodioecious
+  ;
+end;
+
+[!
+***********
+* Symbols *
+***********
+]
+begin characters;
+  dimensions nchar=3;
+  charstatelabels
+	1 'leaf margins' / entire fimbriate,
+	2 'flower color' / 'white to cream' crimson,
+	3 'breeding system' / hermaphroditic gynomonoecious gynodioecious dioecious
+  ;
+  format notokens symbols="0123";
+  matrix
+	P._fimbriata    111
+	P._robusta      111
+	P._americana    000
+	P._myriophylla  000
+	P._polygama     003
+	P._macrophylla  012
+  ;
+end;
+
+[!
+*****************************
+* Interleaved, missing taxa *
+*****************************
+]
+begin characters;
+  dimensions ntax=4 nchar=15;
+  format datatype=dna interleave;
+  matrix
+	P._fimbriata    acctcggc
+	P._robusta      acctcggc
+	P._americana    acgtcgct
+	P._myriophylla  acgtcgct
+
+	P._fimbriata    ttaacga
+	P._robusta      ttaacca
+	P._americana    ctcacca
+	P._myriophylla  ttcacca
+  ;
+end;
+
+[!
+****************
+** transposed **
+****************
+]
+
+begin characters;
+  dimensions nchar=15;
+  format datatype=dna transpose;
+  matrix
+      site_1   aaaaaa
+      site_2   cccccc
+      site_3   ccggcc
+      site_4   tttttt
+      site_5   cccccc
+      site_6   gggggg
+      site_7   ggcccc
+      site_8   cctttt
+      site_9   ttcttt
+      site_10  tttttt
+      site_11  aacccc
+      site_12  aaaaaa
+      site_13  cccccc
+      site_14  gcccgg
+      site_15  aaaaaa
+  ;
+end;
+
diff --git a/data/distances.nex b/data/distances.nex
new file mode 100644
index 0000000..d097977
--- /dev/null
+++ b/data/distances.nex
@@ -0,0 +1,246 @@
+#nexus
+
+begin taxa;
+  dimensions ntax=8;
+  taxlabels taxon_1 taxon_2 taxon_3 taxon_4 taxon_5 taxon_6 taxon_7 taxon_8;
+end;
+
+[!
+***************************************************
+* Non-interleaved, lower-triangular, no diagonals *
+***************************************************
+]
+begin distances;
+  format nodiagonal;
+  matrix
+    taxon_1
+    taxon_2    1
+    taxon_3    2   3
+    taxon_4    4   5   6
+    taxon_5    7   8   9  10
+    taxon_6   11  12  13  14  15
+    taxon_7   16  17  18  19  20  21
+    taxon_8   22  23  24  25  26  27  28;
+end;
+
+[!
+************************************************
+* Non-interleaved, lower-triangular, diagonals *
+************************************************
+]
+begin distances;
+  matrix
+    taxon_1    0
+    taxon_2    1   0
+    taxon_3    2   3   0
+    taxon_4    4   5   6   0
+    taxon_5    7   8   9  10   0
+    taxon_6   11  12  13  14  15   0
+    taxon_7   16  17  18  19  20  21   0
+    taxon_8   22  23  24  25  26  27  28   0;
+end;
+
+[!
+***************************************************
+* Non-interleaved, upper-triangular, no diagonals *
+***************************************************
+]
+begin distances;
+  format triangle=upper nodiagonal;
+  matrix
+    taxon_1    1   2   3   4   5   6   7
+    taxon_2        8   9  10  11  12  13
+    taxon_3           14  15  16  17  18
+    taxon_4               19  20  21  22
+    taxon_5                   23  24  25
+    taxon_6                       26  27
+    taxon_7                           28
+    taxon_8;
+end;
+
+[!
+************************************************
+* Non-interleaved, upper-triangular, diagonals *
+************************************************
+]
+begin distances;
+  format triangle=upper;
+  matrix
+    taxon_1    0  1   2   3   4   5   6   7
+    taxon_2       0   8   9  10  11  12  13
+    taxon_3           0  14  15  16  17  18
+    taxon_4               0  19  20  21  22
+    taxon_5                   0  23  24  25
+    taxon_6                       0  26  27
+    taxon_7                           0  28
+    taxon_8                               0;
+end;
+
+[!
+*******************************************
+* Non-interleaved, rectangular, diagonals *
+*******************************************
+]
+begin distances;
+  format triangle=both;
+  matrix
+    taxon_1    0   1   2   3   4   5   6   7
+    taxon_2    1   0   8   9  10  11  12  13
+    taxon_3    2   3   0  14  15  16  17  18
+    taxon_4    4   5   6   0  19  20  21  22
+    taxon_5    7   8   9  10   0  23  24  25
+    taxon_6   11  12  13  14  15   0  26  27
+    taxon_7   16  17  18  19  20  21   0  28
+    taxon_8   22  23  24  25  26  27  28   0;
+end;
+
+[!
+***********************************************
+* Interleaved, lower-triangular, no diagonals *
+***********************************************
+]
+begin distances;
+  format nodiagonal interleave;
+  matrix
+    taxon_1
+    taxon_2   1
+    taxon_3   2  3
+    taxon_4   4  5
+    taxon_5   7  8
+    taxon_6  11 12
+    taxon_7  16 17
+    taxon_8  22 23
+
+    taxon_3
+    taxon_4   6
+    taxon_5   9 10
+    taxon_6  13 14 15
+    taxon_7  18 19 20
+    taxon_8  24 25 26
+
+    taxon_6
+    taxon_7  21
+    taxon_8  27 28;
+end;
+
+[!
+********************************************
+* Interleaved, lower-triangular, diagonals *
+********************************************
+]
+begin distances;
+  format interleave;
+  matrix
+    taxon_1   0
+    taxon_2   1  0
+    taxon_3   2  3
+    taxon_4   4  5
+    taxon_5   7  8
+    taxon_6  11 12
+    taxon_7  16 17
+    taxon_8  22 23
+
+    taxon_3   0
+    taxon_4   6  0
+    taxon_5   9 10  0
+    taxon_6  13 14 15
+    taxon_7  18 19 20
+    taxon_8  24 25 26
+
+    taxon_6   0
+    taxon_7  21  0
+    taxon_8  27 28  0;
+end;
+
+[!
+***********************************************
+* Interleaved, upper-triangular, no diagonals *
+***********************************************
+]
+begin distances;
+  format nodiagonal triangle=upper interleave;
+  matrix
+    taxon_1      1  2
+    taxon_2         8
+    taxon_3
+
+    taxon_1   3   4
+    taxon_2   9  10
+    taxon_3  14  15
+    taxon_4      19
+    taxon_5
+
+    taxon_1   5   6   7
+    taxon_2  11  12  13
+    taxon_3  16  17  18
+    taxon_4  20  21  22
+    taxon_5  23  24  25
+    taxon_6      26  27
+    taxon_7          28
+    taxon_8;
+end;
+
+[!
+********************************************
+* Interleaved, upper-triangular, diagonals *
+********************************************
+]
+begin distances;
+  format triangle=upper interleave;
+  matrix
+    taxon_1   0  1  2
+    taxon_2      0  8
+    taxon_3         0
+
+    taxon_1   3   4
+    taxon_2   9  10
+    taxon_3  14  15
+    taxon_4   0  19
+    taxon_5       0
+
+    taxon_1   5   6   7
+    taxon_2  11  12  13
+    taxon_3  16  17  18
+    taxon_4  20  21  22
+    taxon_5  23  24  25
+    taxon_6   0  26  27
+    taxon_7       0  28
+    taxon_8           0;
+end;
+
+[!
+******************************************
+* Interleaved, rectangular, no diagonals *
+******************************************
+]
+begin distances;
+  format interleave triangle=both;
+  matrix
+    taxon_1   0   1   2   3
+    taxon_2   1   0   8   9
+    taxon_3   2   3   0  14
+    taxon_4   4   5   6   0
+    taxon_5   7   8   9  10
+    taxon_6  11  12  13  14
+    taxon_7  16  17  18  19
+    taxon_8  22  23  24  25
+
+    taxon_1   4   5
+    taxon_2  10  11
+    taxon_3  15  16
+    taxon_4  19  20
+    taxon_5   0  23
+    taxon_6  15   0
+    taxon_7  20  21
+    taxon_8  26  27
+
+    taxon_1   6   7
+    taxon_2  12  13
+    taxon_3  17  18
+    taxon_4  21  22
+    taxon_5  24  25
+    taxon_6  26  27
+    taxon_7   0  28
+    taxon_8  28   0;
+end;
+
diff --git a/data/sample.tre b/data/sample.tre
new file mode 100644
index 0000000..307a129
--- /dev/null
+++ b/data/sample.tre
@@ -0,0 +1,51 @@
+#nexus
+
+[!Output comment before first block]
+
+begin paup; [this is an unknown block]
+	lset nst=2 basefreq=empirical tratio=estimate rates=gamma shape=estimate;
+end;
+
+[!Let's see if we can deal with [nested] comments]
+
+[!
+What happens if we do this!
+]
+
+begin [comment at beginning of token]taxa;
+	dimensions[comment at end of token] ntax=11;
+	taxlabels  [comment between tokens]
+		P._fimbriata
+		'P. robusta'
+		'P. americana'
+		'P. myriophylla'
+		'P. articulata'
+		'P. parksii'
+		'P. gracilis'
+		'P. macrophylla'
+		'P. polygama'
+		'P. basiramia'
+		'P. ciliata'
+		[!output comment in TAXLABELS command]
+	;
+end;
+
+begin trees;
+	translate
+		1  P._fimbriata,
+		2  P._robusta,
+		3  P._americana,
+		4  P._myriophylla,
+		5  P._articulata,
+		6  P._parksii,
+		7  P._polygama,
+		8  P._macrophylla,
+		9  P._gracilis,
+		10  P._basiramia,
+		11  P._ciliata
+	;
+	utree unrooted =      (1,2,((4,3,(5,6)),((7,8),(9,(10,11)))));
+	tree  rooted   =      ((1,2),((4,3,(5,6)),(7,(8,(9,(10,11))))));
+	utree u_to_r   = [&R] ((1,2),((4,3,(5,6)),(7,(8,(9,(10,11))))));
+	tree  r_to_u   = [&U] (1,2,((4,3,(5,6)),((7,8),(9,(10,11)))));
+end;
diff --git a/data/unaligned.nex b/data/unaligned.nex
new file mode 100644
index 0000000..b6a4827
--- /dev/null
+++ b/data/unaligned.nex
@@ -0,0 +1,28 @@
+#nexus
+
+begin taxa;
+  dimensions ntax=10;
+  taxlabels
+    taxon_1
+    taxon_2
+    taxon_3
+    taxon_4
+    taxon_5
+    taxon_6
+    taxon_7
+    taxon_8
+    taxon_9
+    taxon_10
+    ;
+end;
+
+begin unaligned;
+  dimensions ntax=5;
+  format datatype=dna;
+  matrix
+    taxon_10 ACYAGGACTAGATCAAGTT,
+    taxon_2 ACCAGGAC(CT)AGCGGATCAAG,
+    taxon_7 ACCAGGACTAGATCAAG,
+    taxon_4 AGCCAGGACTAGTTC,
+    taxon_5 {AG}TCAGGACNAGA?CAAGTTC;
+end;
diff --git a/example/Makefile.am b/example/Makefile.am
new file mode 100644
index 0000000..132971f
--- /dev/null
+++ b/example/Makefile.am
@@ -0,0 +1,12 @@
+SUBDIRS = compressor \
+	nclsimplest \
+	ncltest \
+	basiccmdline \
+	normalizer \
+	subsetter \
+	patristic \
+	gapcode \
+	splitsinfile \
+	translate \
+	phylobaseinterface
+
diff --git a/example/Makefile.in b/example/Makefile.in
new file mode 100644
index 0000000..4a30627
--- /dev/null
+++ b/example/Makefile.in
@@ -0,0 +1,578 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = example
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = compressor \
+	nclsimplest \
+	ncltest \
+	basiccmdline \
+	normalizer \
+	subsetter \
+	patristic \
+	gapcode \
+	splitsinfile \
+	translate \
+	phylobaseinterface
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/basiccmdline/Makefile.am b/example/basiccmdline/Makefile.am
new file mode 100644
index 0000000..ecf21da
--- /dev/null
+++ b/example/basiccmdline/Makefile.am
@@ -0,0 +1,4 @@
+LDADD       = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = basiccmdline
+basiccmdline_SOURCES = basiccmdline.cpp basiccmdline.h
diff --git a/example/basiccmdline/Makefile.in b/example/basiccmdline/Makefile.in
new file mode 100644
index 0000000..88e9093
--- /dev/null
+++ b/example/basiccmdline/Makefile.in
@@ -0,0 +1,493 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = basiccmdline$(EXEEXT)
+subdir = example/basiccmdline
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_basiccmdline_OBJECTS = basiccmdline.$(OBJEXT)
+basiccmdline_OBJECTS = $(am_basiccmdline_OBJECTS)
+basiccmdline_LDADD = $(LDADD)
+basiccmdline_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(basiccmdline_SOURCES)
+DIST_SOURCES = $(basiccmdline_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+basiccmdline_SOURCES = basiccmdline.cpp basiccmdline.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/basiccmdline/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/basiccmdline/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+basiccmdline$(EXEEXT): $(basiccmdline_OBJECTS) $(basiccmdline_DEPENDENCIES) 
+	@rm -f basiccmdline$(EXEEXT)
+	$(CXXLINK) $(basiccmdline_OBJECTS) $(basiccmdline_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/basiccmdline.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/basiccmdline/basiccmdline.cpp b/example/basiccmdline/basiccmdline.cpp
new file mode 100644
index 0000000..cfca3d0
--- /dev/null
+++ b/example/basiccmdline/basiccmdline.cpp
@@ -0,0 +1,1045 @@
+//	Copyright (C) 1999-2002 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#include "ncl/ncl.h"
+#include "basiccmdline.h"
+#include <sstream>
+#include <cassert>
+using namespace std;
+/*----------------------------------------------------------------------------------------------------------------------
+	The constructor simply passes along `i' to the base class constructor. Nothing else needs to be done.
+*/
+MyNexusToken::MyNexusToken(
+  istream & i)	/* is the input file stream attached to the NEXUS file to be read */
+  : NxsToken(i)
+	{
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Overrides the NxsToken::OutputComment virtual function (which does nothing) to display output comments [!comments
+	like this one beginning with an exclamation point]. The output comment contained in `msg' is simply sent to the
+	standard output stream cout.
+*/
+void MyNexusToken::OutputComment(
+  const NxsString & msg)	/* is the output comment to be displayed */
+	{
+	cout << msg << endl;
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Initializes the `NCL_BLOCKTYPE_ATTR_NAME' data member to "BASICCMDLINE" and calls the FactoryDefaults member function to perform the
+	remaining initializations. The data member `next_command' is set to NULL so that memory will be allocated for it in
+	FactoryDefaults.
+*/
+BASICCMDLINE::BASICCMDLINE()
+	{
+	NCL_BLOCKTYPE_ATTR_NAME				= "BASICCMDLINE";
+
+	// Make sure all data members that are pointers are initialized to NULL!
+	// Failure to do this will result in problems because functions such as
+	// FactoryDefaults() will try to delete an object if it is non-NULL.
+	taxa			= NULL;
+	trees			= NULL;
+	assumptions		= NULL;
+	distances		= NULL;
+	characters		= NULL;
+	data			= NULL;
+	unaligned		= NULL;
+	next_command	= NULL;
+
+	FactoryDefaults();
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Closes `logf' if it is open and deletes memory allocated to `next_command'.
+*/
+BASICCMDLINE::~BASICCMDLINE()
+	{
+	NCL_ASSERT(next_command != NULL);
+	delete [] next_command;
+
+	if (logf_open)
+		logf.close();
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	The code here is identical to the base class version (simply returns 0), so the code here should either be
+	modified or this derived version eliminated altogether. Under what circumstances would you need to modify the
+	default code, you ask? This function should be modified to something meaningful if this derived class needs to
+	construct and run a NxsSetReader object to read a set involving characters. The NxsSetReader object may need to
+	use this function to look up a character label encountered in the set. A class that overrides this method should
+	return the character index in the range [1..`nchar']; i.e., add one to the 0-offset index.
+*/
+unsigned BASICCMDLINE::CharLabelToNumber(
+  NxsString) NCL_COULD_BE_CONST	/* is the character label to be translated to character number */
+	{
+	return 0;
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called by the NxsReader object when a block named `blockName' is entered. Allows program to notify user of
+	progress in parsing the NEXUS file. Also gives program the opportunity to ask user if it is ok to purge data
+	currently contained in this block. If user is asked whether existing data should be deleted, and the answer comes
+	back no, then then return false, otherwise return true. Overrides pure virtual function in class NxsReader.
+*/
+bool BASICCMDLINE::EnteringBlock(
+  NxsString blockName)	/* is the name of the block just entered */
+	{
+	message = "Reading ";
+	message += blockName;
+	message += " block...";
+	PrintMessage();
+
+	return true;
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called by the NxsReader object when exiting a block named `blockName'. Allows program to notify user of progress
+	in parsing the NEXUS file. Virtual function that overrides the pure virtual function in the base class NxsReader.
+*/
+void BASICCMDLINE::ExitingBlock(
+  NxsString )	/* is the name of the block just exited */
+	{
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Sets all data members to their factory default settings: `inf_open', `logf_open' and `quit_now' are set to false;
+	`message' to the null string, and the pointers `data', `characters', `assumptions', `taxa' and `trees'
+	are all set to NULL. The C-string `next_command' is allocated COMMAND_MAXLEN + 1 bytes if it is currently NULL,
+	and its first byte is set to the null character to create an empty `next_command' string.
+*/
+void BASICCMDLINE::FactoryDefaults()
+	{
+	isEmpty = true;
+	inf_open = false;
+	logf_open = false;
+	quit_now = false;
+	message.clear();
+
+	if (trees != NULL)
+		{
+		Detach(trees);
+		delete trees;
+		trees = NULL;
+		}
+
+	if (taxa != NULL)
+		{
+		Detach(taxa);
+		delete taxa;
+		taxa = NULL;
+		}
+
+	if (assumptions != NULL)
+		{
+		Detach(assumptions);
+		delete assumptions;
+		assumptions = NULL;
+		}
+
+	if (distances != NULL)
+		{
+		Detach(distances);
+		delete distances;
+		distances = NULL;
+		}
+
+	if (characters != NULL)
+		{
+		Detach(characters);
+		delete characters;
+		characters = NULL;
+		}
+
+	if (data != NULL)
+		{
+		Detach(data);
+		delete data;
+		data = NULL;
+		}
+
+	if (unaligned != NULL)
+		{
+		Detach(unaligned);
+		delete unaligned;
+		unaligned = NULL;
+		}
+
+	if (next_command == NULL)
+		{
+		next_command = new char[COMMAND_MAXLEN + 1];
+		}
+	next_command[0] = '\0';
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Returns true if file named `fn' already exists, false otherwise.
+*/
+bool BASICCMDLINE::FileExists(
+  const char * fn)	/* is the name of the file to check */
+	{
+	bool exists = false;
+
+	FILE *fp = fopen(fn, "r");
+	if (fp != NULL)
+		{
+		fclose(fp);
+		exists = true;
+		}
+
+	return exists;
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called whenever a file name needs to be read from either the command line or a file. Expects next token to be "="
+	followed by the token representing the file name. Call this function after, say, the keyword "file" has been read
+	in the following LOG command:
+>
+	log file=doofus.txt start replace;
+>
+	Note that this function will read only the "=doofus.txt " leaving "start replace;" in the stream for reading at
+	a later time.
+*/
+NxsString BASICCMDLINE::GetFileName(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	// Eat the equals sign
+	token.GetNextToken();
+
+	if (!token.Equals("="))
+		{
+		errormsg = "Expecting an equals sign, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	// Now get the filename itself
+	token.GetNextToken();
+
+	return token.GetToken();
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called when the END or ENDBLOCK command needs to be parsed from within the BASICCMDLINE block. Basically just
+	checks to make sure the next token in the data file is a semicolon.
+*/
+void BASICCMDLINE::HandleEndblock(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	// Get the semicolon following END or ENDBLOCK token
+	token.GetNextToken();
+
+	if (!token.Equals(";"))
+		{
+		errormsg = "Expecting ';' to terminate the END or ENDBLOCK command, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Handles everything after the EXECUTE keyword and the terminating semicolon. Purges all blocks before executing
+	file specified, and no warning is given of this.
+*/
+void BASICCMDLINE::HandleExecute(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	// Issuing the EXECUTE command from within a file is a no-no (at least in this program)
+	if (inf_open)
+		{
+		errormsg = "Cannot issue execute command from within a BASICCMDLINE block";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	// Get the file name to execute (note: if filename contains underscores, these will be
+	// automatically converted to spaces; user should surround such filenames with single quotes)
+	token.GetNextToken();
+
+	NxsString fn = token.GetToken();
+
+	// Get the semicolon terminating the EXECUTE command
+	token.GetNextToken();
+
+	if (!token.Equals(";"))
+		{
+		errormsg = "Expecting ';' to terminate the EXECUTE command, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	if (FileExists(fn.c_str()))
+		{
+		cerr << endl;
+		cerr << "Opening " << fn << "..." << endl;
+
+		PurgeBlocks();
+
+		ifstream inf(fn.c_str(), ios::binary | ios::in);
+
+		inf_open = true;
+
+		MyNexusToken ftoken(inf);
+
+		try
+			{
+			Execute(ftoken);
+			}
+		catch(NxsException x)
+			{
+			NexusError(errormsg, x.pos, x.line, x.col);
+			}
+
+		if (inf_open)
+			inf.close();
+		inf_open = false;
+
+		// Users are allowed to put DATA blocks in their NEXUS files, but internally the data is always
+		// stored in a NxsCharacterBlock object.
+		if (characters->IsEmpty() && !data->IsEmpty())
+			{
+			data->TransferTo(*characters);
+			}
+
+		}	// if (FileExists(fn.c_str()))
+
+	else
+		{
+		cerr << endl;
+		cerr << "Oops! Could not find specified file: " << fn << endl;
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called when the HELP command needs to be parsed from within the BASICCMDLINE block.
+*/
+void BASICCMDLINE::HandleHelp(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	// Retrieve all tokens for this command, stopping only in the event
+	// of a semicolon or an unrecognized keyword
+	for (;;)
+		{
+		token.GetNextToken();
+
+		if (token.Equals(";"))
+			{
+			break;
+			}
+		else
+			{
+			errormsg = "Unexpected keyword (";
+			errormsg += token.GetToken();
+			errormsg += ") encountered reading HELP command";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		}
+
+	message = "\nExamples of use of available commands:";
+	message += "\n  help                     -> shows this message";
+	message += "\n  log file=mylog.txt start -> opens log file named mylog.txt";
+	message += "\n  log stop                 -> closes current log file";
+	message += "\n  exe mydata.nex           -> executes nexus file mydata.nex";
+	message += "\n  show                     -> reports on blocks currently stored";
+	message += "\n  quit                     -> terminates application";
+	message += "\n";
+	PrintMessage();
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called when the HELP command needs to be parsed from within the BASICCMDLINE block.
+*/
+void BASICCMDLINE::HandleShow(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	// Retrieve all tokens for this command, stopping only in the event
+	// of a semicolon or an unrecognized keyword
+	for (;;)
+		{
+		token.GetNextToken();
+
+		if (token.Equals(";"))
+			break;
+		else
+			{
+			errormsg = "Unexpected keyword (";
+			errormsg += token.GetToken();
+			errormsg += ") encountered reading HELP command";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		}
+
+	bool taxaStored			= !taxa->IsEmpty();
+	bool treesStored		= !trees->IsEmpty();
+	bool assumptionsStored	= !assumptions->IsEmpty();
+	bool distancesStored	= !distances->IsEmpty();
+	bool charactersStored	= !characters->IsEmpty();
+	bool dataStored			= !data->IsEmpty();
+	bool unalignedStored	= !unaligned->IsEmpty();
+	bool isAnythingStored = (taxaStored || treesStored || assumptionsStored || distancesStored || charactersStored || dataStored || unalignedStored);
+
+	if (isAnythingStored)
+		message = "\nNexus blocks currently stored:";
+	else
+		message = "\nNo Nexus blocks are currently stored.";
+	PrintMessage();
+
+	if (!taxa->IsEmpty())
+		{
+		cerr << "\n  TAXA block found" << endl;
+		taxa->Report(cerr);
+		if (logf_open)
+			taxa->Report(logf);
+		}
+
+	if (!trees->IsEmpty())
+		{
+		cerr << "\n  TREES block found" << endl;
+		trees->Report(cerr);
+		if (logf_open)
+			trees->Report(logf);
+		}
+
+	if (!assumptions->IsEmpty())
+		{
+		cerr << "\n  ASSUMPTIONS block found" << endl;
+		assumptions->Report(cerr);
+		if (logf_open)
+			assumptions->Report(logf);
+		}
+
+	if (!distances->IsEmpty())
+		{
+		cerr << "\n  DISTANCES block found" << endl;
+		distances->Report(cerr);
+		if (logf_open)
+			distances->Report(logf);
+		}
+
+	if (!characters->IsEmpty())
+		{
+		cerr << "\n  CHARACTERS block found" << endl;
+		characters->Report(cerr);
+		if (logf_open)
+			characters->Report(logf);
+		}
+
+	if (!data->IsEmpty())
+		{
+		cerr << "\n  DATA block found" << endl;
+		data->Report(cerr);
+		if (logf_open)
+			data->Report(logf);
+		}
+
+	if (!unaligned->IsEmpty())
+		{
+		cerr << "\n  UNALIGNED block found" << endl;
+		unaligned->Report(cerr);
+		if (logf_open)
+			unaligned->Report(logf);
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called when the LOG command needs to be parsed from within the BASICCMDLINE block.
+*/
+void BASICCMDLINE::HandleLog(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	bool starting = false;
+	bool stopping = false;
+	bool appending = false;
+	bool replacing = false;
+	bool name_provided = false;
+	NxsString logfname;
+
+	// Retrieve all tokens for this command, stopping only in the event
+	// of a semicolon or an unrecognized keyword
+	for (;;)
+		{
+		token.GetNextToken();
+
+		if (token.Equals(";"))
+			{
+			break;
+			}
+		else if (token.Abbreviation("STOp"))
+			{
+			stopping = true;
+			}
+		else if (token.Abbreviation("STArt"))
+			{
+			starting = true;
+			}
+		else if (token.Abbreviation("Replace"))
+			{
+			replacing = true;
+			}
+		else if (token.Abbreviation("Append"))
+			{
+			appending = true;
+			}
+		else if (token.Abbreviation("File"))
+			{
+			logfname = GetFileName(token);
+			name_provided = true;
+			}
+		else
+			{
+			errormsg = "Unexpected keyword (";
+			errormsg += token.GetToken();
+			errormsg += ") encountered reading LOG command";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		}
+
+	// Check for incompatible combinations of keywords
+	if (stopping && (starting || appending || replacing || name_provided))
+		{
+		errormsg = "Cannot specify STOP with any of the following START, APPEND, REPLACE, FILE";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	if (appending && replacing)
+		{
+		errormsg = "Cannot specify APPEND and REPLACE at the same time";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	if (logf_open && (starting || name_provided || appending || replacing))
+		{
+		errormsg = "Cannot start log file since log file is already open";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	// Is user closing an open log file?
+	if (stopping)
+		{
+		logf.close();
+		logf_open = false;
+
+		message = "\nLog file closed";
+		PrintMessage();
+
+		return;
+		}
+
+	// If this far, must be attempting to open a log file
+	if (!name_provided)
+		{
+		errormsg = "Must provide a file name when opening a log file\n";
+		errormsg += "e.g., log file=doofus.txt start replace;";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	if (appending)
+		{
+		logf_open = true;
+		logf.open(logfname.c_str(), ios::out | ios::app);
+
+		message = "\nAppending to log file ";
+		message += logfname;
+		PrintMessage();
+		}
+
+	else if (replacing)
+		{
+		logf_open = true;
+		logf.open(logfname.c_str());
+
+		message = "\nReplacing log file ";
+		message += logfname;
+		PrintMessage();
+		}
+
+	else
+		{
+		bool exists = FileExists(logfname.c_str());
+		bool userok = true;
+		if (exists && !UserQuery("Ok to replace?", "Log file specified already exists", BASICCMDLINE::UserQueryEnum(BASICCMDLINE::uq_yes | BASICCMDLINE::uq_no)))
+			userok = false;
+
+		if (userok)
+			{
+			logf_open = true;
+			logf.open(logfname.c_str());
+			}
+
+		if (exists && userok)
+			{
+			message = "\nReplacing log file ";
+			message += logfname;
+			}
+
+		else if (userok)
+			{
+			message = "\nLog file ";
+			message += logfname;
+			message += " opened";
+			}
+
+		else
+			{
+			message = "\nLog command aborted";
+			}
+
+		PrintMessage();
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Accepts a string in the form of a BASICCMDLINE block containing one command and processes it just like a real
+	BASICCMDLINE block in a NEXUS data file.
+*/
+void BASICCMDLINE::HandleNextCommand()
+	{
+	std::istringstream cmdin(next_command);
+
+	MyNexusToken token(cmdin);
+	try
+		{
+		Read(token);
+		}
+	catch(NxsException x)
+		{
+		NexusError(errormsg, x.pos, x.line, x.col);
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called when an error is encountered in a NEXUS file. Allows program to give user details of the error as well as
+	the precise location of the error.
+*/
+void BASICCMDLINE::NexusError(
+  NxsString msg,	/* is the error message */
+  file_pos ,		/* is the point in the NEXUS file where the error occurred */
+  long line,		/* is the line in the NEXUS file where the error occurred */
+  long col)			/* is the column in the NEXUS file where the error occurred */
+	{
+	message = "\n";
+	message += msg;
+	PrintMessage();
+
+	if (inf_open)
+		{
+		message = "Line:   ";
+		message += line;
+		PrintMessage();
+
+		message = "Column: ";
+		message += col;
+		PrintMessage();
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Begins with the command just entered by the user, which is stored in the data member `next_command', adds a
+	semicolon (if the user failed to supply one), and then adds the string "end;" so the whole bundle looks like a
+	very short BASICCMDLINE block. This is then passed to HandleNextCommand, which processes it just like a real
+	BASICCMDLINE block in a NEXUS data file.
+*/
+void BASICCMDLINE::PreprocessNextCommand()
+	{
+	// If user failed to add the terminating semicolon, we'll do it now. We will also remove the line feed
+	// at the end and add the command "end;" to the end of the line (see explanation below).
+	unsigned len = (unsigned)strlen(next_command);
+	NCL_ASSERT(len > 0);
+
+	// Remove any whitespace characters from end of string entered by user
+	//
+	unsigned i = len;
+	while (i > 0 && next_command[i-1] == ' ' || next_command[i-1] == '\t' || next_command[i-1] == '\n')
+		i--;
+
+	// If character at position i - 1 is a semicolon, put '\0' terminator at position i;
+	// otherwise, put a semicolon at position i and terminator at i + 1
+	if (next_command[i-1] != ';')
+		{
+		next_command[i] = ';';
+		i++;
+		}
+	NCL_ASSERT(i <= COMMAND_MAXLEN);
+	next_command[i] = '\0';
+
+	// Now add a semicolon at the beginning and terminate with an "END;" command
+	// so that we can pretend this is simply a very short private NEXUS block
+	// containing only one command.  This allows us to simply use the Read
+	// function we inherited from the base class BstBase to process the command.
+	len = (unsigned)strlen(next_command);
+	NCL_ASSERT(len < COMMAND_MAXLEN-2);
+	NxsString tmp = ";";
+	tmp += next_command;
+	tmp += "end;";
+	strcpy(next_command, tmp.c_str());
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	All output is funneled through here. Writes string currently stored in `message' (a NxsString data member) to the
+	output file stream, if open, and also to the console via cerr. Places a newline after the string if `linefeed' is
+	true.
+*/
+void BASICCMDLINE::PrintMessage(
+  bool linefeed) const /* if true, places newline character after message */
+	{
+	cerr << message;
+	if (linefeed)
+		cerr << endl;
+
+	if (logf_open)
+		{
+		logf << message;
+		if (linefeed)
+			logf << endl;
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Detaches all blocks, deletes them, creates new blocks, and finally adds the new blocks. Call this function if
+	you want to be sure that there is no data currently stored in any blocks.
+*/
+void BASICCMDLINE::PurgeBlocks()
+	{
+	if (blockList != NULL)
+		{
+		Detach(taxa);
+		Detach(trees);
+		Detach(assumptions);
+		Detach(distances);
+		Detach(characters);
+		Detach(data);
+		Detach(unaligned);
+		}
+
+	delete taxa;
+	delete trees;
+	delete assumptions;
+	delete distances;
+	delete characters;
+	delete data;
+	delete unaligned;
+
+	taxa		= new NxsTaxaBlock();
+	trees		= new NxsTreesBlock(taxa);
+	assumptions	= new NxsAssumptionsBlock(taxa);
+	distances	= new NxsDistancesBlock(taxa);
+	characters	= new NxsCharactersBlock(taxa, assumptions);
+	data		= new NxsDataBlock(taxa, assumptions);
+	unaligned	= new NxsUnalignedBlock(taxa);
+
+	Add(taxa);
+	Add(trees);
+	Add(assumptions);
+	Add(distances);
+	Add(characters);
+	Add(data);
+	Add(unaligned);
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	This function provides the ability to read everything following the block name (which is read by the NxsReader
+	object) to the END or ENDBLOCK statement. Characters are read from the input stream `in'. Overrides the virtual
+	function in the base class.
+*/
+void BASICCMDLINE::Read(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	isEmpty = false;
+
+	// This should be the semicolon after the block name
+	token.GetNextToken();
+
+	if (!token.Equals(";"))
+		{
+		errormsg = "Expecting ';' after ";
+		errormsg += NCL_BLOCKTYPE_ATTR_NAME;
+		errormsg += " block name, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	for (;;)
+		{
+		token.GetNextToken();
+
+		if (token.Abbreviation("ENdblock"))
+			{
+			HandleEndblock(token);
+			break;
+			}
+		else if (token.Abbreviation("Help"))
+			{
+			HandleHelp(token);
+			}
+		else if (token.Abbreviation("Log"))
+			{
+			HandleLog(token);
+			}
+		else if (token.Abbreviation("EXecute"))
+			{
+			HandleExecute(token);
+			}
+		else if (token.Abbreviation("Show"))
+			{
+			HandleShow(token);
+			}
+		else if (token.Abbreviation("Quit"))
+			{
+			quit_now = true;
+
+			message = "\nBASICCMDLINE says goodbye\n";
+			PrintMessage();
+
+			break;
+			}
+		else
+			{
+			SkippingCommand(token.GetToken());
+			do
+				{
+				token.GetNextToken();
+				}
+			while (!token.AtEOF() && !token.Equals(";"));
+
+			if (token.AtEOF())
+				{
+				errormsg = "Unexpected end of file encountered";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			}
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Overrides the NxsBlock virtual function. This function does nothing because the BASICCMDLINE block is simply a
+	private command block and does not store any data.
+*/
+void BASICCMDLINE::Reset()
+	{
+	NxsBlock::Reset();
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	This function outputs a brief report of the contents of this BASICCMDLINE block. Overrides the virtual function
+	in the NxsBlock base class.
+*/
+void BASICCMDLINE::Report(
+  ostream & out) NCL_COULD_BE_CONST /* is the output stream to which to write the report */
+	{
+	message.clear();
+	PrintMessage();
+	out << message << '\n';
+	message = NCL_BLOCKTYPE_ATTR_NAME;
+	message += " block contains...";
+	PrintMessage();
+	out << message << '\n';
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Runs the command line interpreter, allowing BASICCMDLINE to interact with user. Typically, this is the only
+	function called in main after a BASICCMDLINE object is created. If `infile_name' is non-NULL, the first command
+	executed by the command interpreter will be "EXECUTE `infile_name'".
+*/
+void BASICCMDLINE::Run(
+  char * infile_name)	/* is the name of the NEXUS data file to execute (can be NULL) */
+	{
+	taxa			= new NxsTaxaBlock();
+	trees			= new NxsTreesBlock(taxa);
+	assumptions		= new NxsAssumptionsBlock(taxa);
+	characters		= new NxsCharactersBlock(taxa, assumptions);
+	distances		= new NxsDistancesBlock(taxa);
+	data			= new NxsDataBlock(taxa, assumptions);
+	unaligned		= new NxsUnalignedBlock(taxa);
+
+	Add(taxa);
+	Add(trees);
+	Add(assumptions);
+	Add(characters);
+	Add(distances);
+	Add(data);
+	Add(unaligned);
+	Add(this);
+
+	if (infile_name != NULL)
+		{
+		strcpy(next_command, "exe \'");
+		strncat(next_command, infile_name, 252);
+		strncat(next_command, "\'", 252);
+		PreprocessNextCommand();
+		HandleNextCommand();
+		}
+
+	quit_now = false;
+	while (!quit_now)
+		{
+		cerr << endl;
+		cerr << "BASICCMDLINE> ";
+		//cin.getline(next_command, COMMAND_MAXLEN);
+		unsigned i = 0;
+		for(;;)
+			{
+			int ch = cin.get();
+			if (i > COMMAND_MAXLEN)
+				{
+				cerr << endl;
+				cerr << "Error: the length of any one command cannot exceed ";
+				cerr << COMMAND_MAXLEN << " characters" << endl;
+				break;
+				}
+			else if (ch == 10 || ch == 13)
+				break;
+			next_command[i++] = (char)ch;
+			next_command[i] = '\0';
+			}
+		PreprocessNextCommand();
+		HandleNextCommand();
+		}
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called when program does not recognize a block name encountered in a NEXUS file. Virtual function that overrides
+	the virtual function in the base class NxsReader.
+*/
+void BASICCMDLINE::SkippingBlock(
+  NxsString blockName)	/* is the unrecognized block name */
+	{
+	message = "Skipping unknown block (";
+	message += blockName;
+	message += ")";
+	PrintMessage();
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	This function is called when an unknown command named `commandName' is about to be skipped. This version of the
+	function (which is identical to the base class version) does nothing (i.e., no warning is issued that a command
+	was unrecognized). Modify this virtual function to provide such warnings to the user (or eliminate it altogether
+	since the base class version already does what this does).
+*/
+void BASICCMDLINE::SkippingCommand(
+  NxsString commandName)	/* is the name of the command being skipped */
+	{
+	message = "Skipping unknown command (";
+	message += commandName;
+	message += ")";
+	PrintMessage();
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Called by the NxsReader object when skipping a block named blockName that has been disabled. Allows program to
+	notify user of progress in parsing the NEXUS file. Virtual function that overrides the virtual function in the
+	base class NxsReader.
+*/
+void BASICCMDLINE::SkippingDisabledBlock(
+  NxsString )	/* is the name of the block just exited */
+	{
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	The code here is identical to the base class version (simply returns 0), so the code here should either be modified
+	or this derived version eliminated altogether. Under what circumstances would you need to modify the default code,
+	you ask? This function should be modified to something meaningful if this derived class needs to construct and run
+	a NxsSetReader object to read a set involving taxa. The NxsSetReader object may need to use this function to look
+	up a taxon label encountered in the set. A class that overrides this method should return the taxon index in the
+	range [1..ntax]; i.e., add one to the 0-offset index.
+*/
+unsigned BASICCMDLINE::TaxonLabelToNumber(
+  NxsString ) const /* is the taxon label to be translated to a taxon number */
+	{
+	return 0;
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+	Returns true if response is either "ok" or "yes", and returns false if response is either "no" or "cancel".
+	This is a general query function that can handle many situations. The possible responses are enumerated in
+	BASICCMDLINE::UserQueryEnum: uq_cancel, uq_ok, uq_yes, and uq_no. Not yet fully implemented: only handles uq_ok
+	alone or the (uq_yes | uq_no) combination.
+*/
+bool BASICCMDLINE::UserQuery(
+  NxsString mb_message,						/* is the question posed to the user */
+  NxsString mb_title,						/* is the title of the message box */
+  BASICCMDLINE::UserQueryEnum mb_choices)	/* is the bit combination of uq_xx values indicating which buttons to show */
+	{
+	const bool yes_no			= (mb_choices == (BASICCMDLINE::uq_yes | BASICCMDLINE::uq_no));
+	const bool ok_only		= (mb_choices == BASICCMDLINE::uq_ok);
+	NCL_ASSERT(ok_only || yes_no); // Still working on other choices
+
+	if (ok_only)
+		{
+		cerr << endl;
+		cerr << mb_title << endl;
+		cerr << "  " << mb_message;
+		cerr << " (press return to acknowledge) ";
+		cin.getline(next_command, COMMAND_MAXLEN);
+		return true;
+		}
+	cerr << endl;
+	cerr << mb_title << endl;
+	cerr << "  " << mb_message;
+	cerr << " (y/n) ";
+
+	cin.getline(next_command, COMMAND_MAXLEN);
+
+	// This could be made much simpler by just checking first letter: if 'y' then
+	// assume yes, if 'n' assume no.
+	bool yep  = (next_command[0] == 'y' && next_command[1] == '\0');
+	bool nope = (next_command[0] == 'n' && next_command[1] == '\0');
+
+	while (!yep && !nope)
+		{
+		cerr << endl;
+		cerr << "Must answer by typing either y or n and then pressing the Enter key" << endl;
+		cerr << endl;
+		cerr << mb_title << endl;
+		cerr << "  " << mb_message;
+		cerr << " (y/n) ";
+
+		cin.getline(next_command, COMMAND_MAXLEN);
+		yep  = (next_command[0] == 'y' && next_command[1] == '\0');
+		nope = (next_command[0] == 'n' && next_command[1] == '\0');
+		}
+
+	return yep;
+	}
+
+int main(int argc, char *argv[])
+	{
+	char * infile_name = NULL;
+
+	if (argc > 2)
+		{
+		cerr << "Sorry, this program can accept at most one command" << endl;
+		cerr << "line argument, which must be the name of a NEXUS" << endl;
+		cerr << "data file." << endl;
+		cerr << endl;
+		exit(0);
+		}
+
+	else if (argc > 1)
+		{
+		infile_name = argv[1];
+		}
+
+	BASICCMDLINE basiccmdline;
+	basiccmdline.Run(infile_name);
+
+	return 0;
+	}
diff --git a/example/basiccmdline/basiccmdline.h b/example/basiccmdline/basiccmdline.h
new file mode 100644
index 0000000..a59b576
--- /dev/null
+++ b/example/basiccmdline/basiccmdline.h
@@ -0,0 +1,176 @@
+//	Copyright (C) 1999-2002 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_BASICCMDLINE_H
+#define NCL_BASICCMDLINE_H
+#include <iostream>
+#define COMMAND_MAXLEN  255
+
+/*----------------------------------------------------------------------------------------------------------------------
+|	BASICCMDLINE provides a template for creating a program that reads NEXUS data files and provides a basic command
+|	line. After compiling BASICCMDLINE, you will already have a program that understands the following commands, either
+|	typed in at the console or provided in a BASICCMDLINE block in a NEXUS data file (exception is the execute command,
+|	which can only be entered at the console). Keywords in the descriptions below are given in uppercase, however the
+|	commands themselves are case-insensitive. Lower-case indicates a parameter supplied by the user (e.g., "filename"
+|	would be replaced by the actual name of the file). Square brackets indicate optional keywords or subcommands.
+|>
+|	EXECUTE filename;
+|
+|	LOG [options];
+|
+|	  Option         Action
+|	  ------------------------------------------------------
+|	  FILE=filename  specifies name of log file to start
+|	  START          indicates logging is to be started
+|	  STOP           indicates logging is to be stopped
+|	  APPEND         append to log file if it already exists
+|	  REPLACE        replace log file without asking
+|
+|	QUIT;
+|>
+|	See the Read function for details and to add other commands.
+|
+|	To change the name of the program (which is also the prompt name and the name of the program's private NEXUS
+|	block), replace all occurrences of BASICCMDLINE with the name of your program (also search for the string
+|	"basiccmdline" and replace with an appropriate string at each occurrence).
+|
+|	This class handles reading and storage for the NxsReader block BASICCMDLINE. It also serves as the main class for
+|	the program BASICCMDLINE, acting as both a NxsReader object (in order to be capable of parsing data files) as well
+|	as a NxsBlock object (in order to be able to process commands in a BASICCMDLINE block).
+|
+|	Acting as a NxsBlock, it overrides the member functions Read and Reset, which are virtual functions in the base
+|	class NxsBlock. Acting as a NxsReader object, it overrides the member functions EnteringBlock, SkippingBlock, and
+|	NexusError.
+|
+|	Adding a new data member? Don't forget to:
+|~
+|	o Describe it in the class header comment at the top of "basiccmdline.h"
+|	o Initialize it (unless it is self-initializing) in the constructor and reinitialize it in the Reset function
+|	o Describe the initial state in the constructor documentation
+|	o Delete memory allocated to it in both the destructor and Reset function
+|	o Report it in some way in the Report function
+|~
+*/
+class BASICCMDLINE
+  : public NxsBlock,
+  public NxsReader
+	{
+	public:
+
+		enum UserQueryEnum		/* enumeration used with UserQuery member function to specify which choices to provide the user */
+			{
+			uq_cancel = 0x01,	/* provide opportunity to cancel */
+			uq_ok	  = 0x02,	/* provide opportunity to answer ok */
+			uq_yes	  = 0x04,	/* provide opportunity to answer yes */
+			uq_no 	  = 0x08	/* provide opportunity to answer no */
+			};
+
+								BASICCMDLINE();
+		virtual					~BASICCMDLINE();
+
+		bool					EnteringBlock(NxsString blockName);
+		void					ExitingBlock(NxsString blockName);
+		void					ExecuteStarting();
+		void					ExecuteStopping();
+		void					OutputComment(const NxsString &msg);
+		void					HandleNextCommand();
+		void					NexusError(NxsString msg, file_pos pos, long line, long col);
+		void					PreprocessNextCommand();
+		void					PrintMessage(bool linefeed = true) const ;
+		virtual void			Report(std::ostream & out) NCL_COULD_BE_CONST ;
+		void					Run(char *infile_name);
+		void					SkippingBlock(NxsString blockName);
+		void					SkippingCommand(NxsString commandName);
+		void					SkippingDisabledBlock(NxsString blockName);
+		virtual bool			UserQuery(NxsString mb_message, NxsString mb_title, BASICCMDLINE::UserQueryEnum mb_choices = BASICCMDLINE::uq_ok);
+		virtual unsigned		CharLabelToNumber(NxsString s) NCL_COULD_BE_CONST;
+
+	protected:
+
+		bool					inf_open;			/* true if `inf' is currently open */
+		bool					logf_open;			/* true if `logf' is currently open */
+		bool					quit_now;			/* set to false at beginning of Run and turns true only when QUIT command processed */
+		mutable std::ofstream		logf;				/* the log file output stream */
+		mutable NxsString		message;			/* workspace for composing output strings */
+		NxsTreesBlock *			trees;				/* pointer to NxsTreesBlock object */
+		NxsTaxaBlock *			taxa;				/* pointer to NxsTaxaBlock object */
+		NxsAssumptionsBlock *	assumptions;		/* pointer to NxsAssumptionsBlock object */
+		NxsDistancesBlock *		distances;			/* pointer to NxsDistancesBlock object */
+		NxsCharactersBlock *	characters;			/* pointer to NxsCharactersBlock object */
+		NxsDataBlock *			data;				/* pointer to NxsDataBlock object */
+		NxsUnalignedBlock *		unaligned;			/* pointer to NxsUnalignedBlock object */
+		char *					next_command;		/* workspace for processing next command entered interactively by user */
+
+		bool					FileExists(const char* fn);
+		NxsString				GetFileName(NxsToken& token);
+		void					FactoryDefaults();
+		void					HandleEndblock(NxsToken& token);
+		void					HandleShow(NxsToken& token);
+		void					HandleHelp(NxsToken& token);
+		void					HandleLog(NxsToken& token);
+		void					HandleExecute(NxsToken& token);
+		void					PurgeBlocks();
+		virtual void			Read(NxsToken& token);
+		virtual void			Reset();
+		unsigned				TaxonLabelToNumber(NxsString s) const;
+	};
+
+/*----------------------------------------------------------------------------------------------------------------------
+|	The MyNexusToken class provides a NxsToken-derived object that can display output comments as it encounters them.
+|	The virtual function NxsToken::OutputComment is overridden in this class for this purpose.
+*/
+class MyNexusToken
+  : public NxsToken
+	{
+	public:
+				MyNexusToken(std::istream &i);
+
+		void	OutputComment(const NxsString &msg);
+	};
+
+/*----------------------------------------------------------------------------------------------------------------------
+|	Will be called by NxsReader::Execute after the initial "#NEXUS" keyword is found in a NEXUS file but before other
+|	tokens are read. Add code here if you need to do any initializations prior to encountering any NEXUS blocks in a
+|	NEXUS data file.
+*/
+inline void BASICCMDLINE::ExecuteStarting()
+	{
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+|	Will be called by NxsReader::Execute just before it exits after reading to the end of a NEXUS data file (or until
+|	encountering a LEAVE command between NEXUS blocks. Add code here if you need to clean up any memory allocated in
+|	ExecuteStarting.
+*/
+inline void BASICCMDLINE::ExecuteStopping()
+	{
+	}
+
+/*----------------------------------------------------------------------------------------------------------------------
+|	Called if an "output comment" is encountered in a NEXUS data file. An output comment is a comment [text enclosed in
+|	square brackets] that begins with an exclamation point. [!This is an example of a NEXUS output comment]. Output
+|	comments are supposed to be displayed when encountered. Modify this function's body to display output comments,
+|	which are made available as they are encountered via the `msg' argument.
+*/
+inline void	BASICCMDLINE::OutputComment(const NxsString &)
+	{
+	}
+
+#endif
+
diff --git a/example/compressor/Makefile.am b/example/compressor/Makefile.am
new file mode 100644
index 0000000..cf10abd
--- /dev/null
+++ b/example/compressor/Makefile.am
@@ -0,0 +1,5 @@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = NEXUSCharacterCompressor
+NEXUSCharacterCompressor_SOURCES = compressor.cpp
+NEXUSCharacterCompressor_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/example/compressor/Makefile.in b/example/compressor/Makefile.in
new file mode 100644
index 0000000..e392ea9
--- /dev/null
+++ b/example/compressor/Makefile.in
@@ -0,0 +1,501 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = NEXUSCharacterCompressor$(EXEEXT)
+subdir = example/compressor
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_NEXUSCharacterCompressor_OBJECTS =  \
+	NEXUSCharacterCompressor-compressor.$(OBJEXT)
+NEXUSCharacterCompressor_OBJECTS =  \
+	$(am_NEXUSCharacterCompressor_OBJECTS)
+NEXUSCharacterCompressor_LDADD = $(LDADD)
+NEXUSCharacterCompressor_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(NEXUSCharacterCompressor_SOURCES)
+DIST_SOURCES = $(NEXUSCharacterCompressor_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+NEXUSCharacterCompressor_SOURCES = compressor.cpp
+NEXUSCharacterCompressor_CPPFLAGS = $(AM_CPPFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/compressor/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/compressor/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+NEXUSCharacterCompressor$(EXEEXT): $(NEXUSCharacterCompressor_OBJECTS) $(NEXUSCharacterCompressor_DEPENDENCIES) 
+	@rm -f NEXUSCharacterCompressor$(EXEEXT)
+	$(CXXLINK) $(NEXUSCharacterCompressor_OBJECTS) $(NEXUSCharacterCompressor_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUSCharacterCompressor-compressor.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+NEXUSCharacterCompressor-compressor.o: compressor.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSCharacterCompressor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSCharacterCompressor-compressor.o -MD -MP -MF $(DEPDIR)/NEXUSCharacterCompressor-compressor.Tpo -c -o NEXUSCharacterCompressor-compressor.o `test -f 'compressor.cpp' || echo '$(srcdir)/'`compressor.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSCharacterCompressor-compressor.Tpo $(DEPDIR)/NEXUSCharacterCompressor-compressor.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='compressor.cpp' object='NEXUSCharacterCompressor-compressor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSCharacterCompressor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSCharacterCompressor-compressor.o `test -f 'compressor.cpp' || echo '$(srcdir)/'`compressor.cpp
+
+NEXUSCharacterCompressor-compressor.obj: compressor.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSCharacterCompressor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSCharacterCompressor-compressor.obj -MD -MP -MF $(DEPDIR)/NEXUSCharacterCompressor-compressor.Tpo -c -o NEXUSCharacterCompressor-compressor.obj `if test -f 'compressor.cpp'; then $(CYGPATH_W) 'compressor.cpp'; else $(CYGPATH_W) '$(srcdir)/compressor.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSCharacterCompressor-compressor.Tpo $(DEPDIR)/NEXUSCharacterCompressor-compressor.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='compressor.cpp' object='NEXUSCharacterCompressor-compressor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSCharacterCompressor_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSCharacterCompressor-compressor.obj `if test -f 'compressor.cpp'; then $(CYGPATH_W) 'compressor.cpp'; else $(CYGPATH_W) '$(srcdir)/compressor.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/compressor/compressor.cpp b/example/compressor/compressor.cpp
new file mode 100644
index 0000000..21a6a77
--- /dev/null
+++ b/example/compressor/compressor.cpp
@@ -0,0 +1,235 @@
+#include<string>
+#include<vector>
+#include<cassert>
+#include "ncl/nxscxxdiscretematrix.h"
+#include "ncl/nxsmultiformat.h"
+
+bool gCullGapped = false;
+
+
+int main(int argc, char * argv[])
+{
+	/* Usually it is easiest to surround interactions with NCL in a try block
+		that catches NxsException instances.
+		Reading files can certainly generate these errors, but even queries
+		after the parse can result in these exceptions.
+	*/
+	std::string filename;
+	for (int argi = 1; argi < argc; ++argi) 
+	    {
+	    if (strlen(argv[argi]) > 1 && argv[argi][0] == '-')
+	        {
+	        if (argv[argi][1] == 'h')
+                {
+                std::cerr << "Takes a arguments: The path to a NEXUS file with a single characters block.  Optional arguments: -g to cull positions with gaps or missing data\n";
+                return 0;
+                }
+            else if (argv[argi][1] == 'g')
+                gCullGapped = true;
+            else
+                {
+                std::cerr << "Option flag -" << argv[argi][1] << " is not supported\n.";
+                return 1;
+                }
+            }
+        else if (filename.empty())
+            filename.assign(argv[argi]);
+        else
+            {
+    		std::cerr << "Expecting one file name as an argument.\n";
+            return 1;
+            }
+        }
+            
+
+	if (filename.empty())
+		{
+		std::cerr << "Expecting one arguments: a file name\n";
+		return 1;
+		}
+
+	try {
+		int blocksToRead =  (PublicNexusReader::NEXUS_TAXA_BLOCK_BIT
+							| PublicNexusReader::NEXUS_CHARACTERS_BLOCK_BIT
+							| PublicNexusReader::NEXUS_ASSUMPTIONS_BLOCK_BIT
+							| PublicNexusReader::NEXUS_SETS_BLOCK_BIT
+							);
+		MultiFormatReader nexusReader(blocksToRead, NxsReader::WARNINGS_TO_STDERR);
+
+		/* See discussion in "Making NCL less strict" */
+		NxsCharactersBlock * charsB = nexusReader.GetCharactersBlockTemplate();
+		NxsDataBlock * dataB = nexusReader.GetDataBlockTemplate();
+		charsB->SetAllowAugmentingOfSequenceSymbols(true);
+		dataB->SetAllowAugmentingOfSequenceSymbols(true);
+
+
+		/* End of code related to the section on making NCL less strict */
+
+
+		std::cerr << "Reading " << filename << "\n";
+		try {
+			nexusReader.DemoteBlocks();
+			nexusReader.ReadFilepath(filename.c_str(), MultiFormatReader::NEXUS_FORMAT);
+			}
+		catch(const NxsException &x)
+			{
+			std::cerr << "Error:\n " << x.msg << std::endl;
+			if (x.line > 0 || x.pos > 0)
+				std::cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << std::endl;
+			return 2;
+			}
+		catch(...)
+			{
+			nexusReader.DeleteBlocksFromFactories();
+			std::cerr << "Exiting with an unknown error" << std::endl;
+			return 1;
+			}
+
+		const unsigned numTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+		if (numTaxaBlocks != 1)
+			{
+			std::cerr << "Expecting a file with exactly 1 TAXA block, but found " << numTaxaBlocks << " in the file " << filename << ".\n";
+			return 2;
+			}
+		NxsTaxaBlock * taxaBlock = nexusReader.GetTaxaBlock(0);
+		const unsigned nCharBlocks = nexusReader.GetNumCharactersBlocks(taxaBlock);
+		if (nCharBlocks != 1)
+			{
+			std::cerr << "Expecting a file with exactly 1 CHARACTERS/DATA block, but found " << nCharBlocks << " in the file " << filename << ".\n";
+			return 3;
+			}
+		NCL_COULD_BE_CONST  NxsCharactersBlock * charBlock = nexusReader.GetCharactersBlock(taxaBlock, 0);
+		
+		std::vector<const NxsDiscreteDatatypeMapper *> mappers = charBlock->GetAllDatatypeMappers();
+		if (mappers.size() != 1)
+			{
+			std::cerr << "Expecting an unmixed characters block, but found a matrix with datatype = mixed or a datatype with augmented symbols\n";
+			return 4;
+			}
+		
+		const NxsDiscreteDatatypeMapper * dm = mappers[0];
+		
+		ScopedTwoDMatrix<NxsCDiscreteStateSet> compressedMatrix;
+        std::vector<unsigned> patternCounts;
+        std::vector<double> patternWeights;
+        bool hasWeights = true;
+        bool hasIntWeights = true;
+        
+        
+        std::vector<NxsCharacterPattern> compressedTransposedMatrix;
+        if (true)
+            {
+            std::vector<int> originalIndexToCompressed;
+            std::vector<std::set<unsigned> > compressedIndexToOriginal;
+            if (true) 
+                {
+                NxsCXXDiscreteMatrix cxxMat(*charBlock, false, 0L, false);
+
+                hasWeights = cxxMat.hasWeights();
+                hasIntWeights = cxxMat.hasIntWeights();
+                NxsCompressDiscreteMatrix(cxxMat, compressedTransposedMatrix, &originalIndexToCompressed, &compressedIndexToOriginal);
+                }
+           std::vector<double> * wtsPtr = (hasWeights ? &patternWeights : 0L);   
+           NxsTransposeCompressedMatrix(compressedTransposedMatrix, compressedMatrix, &patternCounts, wtsPtr);
+           }
+		
+		NxsCDiscreteStateSet ** matrixAlias = compressedMatrix.GetAlias();
+		const unsigned ntaxTotal =  charBlock->GetNTaxTotal();
+		const unsigned numPatterns = patternCounts.size();
+		std::set<unsigned> culledSet;
+		if (gCullGapped)
+		    {
+		    unsigned ind = 0;
+		    for (std::vector<NxsCharacterPattern>::const_iterator ctmIt = compressedTransposedMatrix.begin();
+		                                                          ctmIt != compressedTransposedMatrix.end(); 
+		                                                          ++ctmIt, ++ind)
+                {
+                if (!ctmIt->StateCodesAreNonNegative())
+                    culledSet.insert(ind);
+                }
+		    }
+		const unsigned numCulled = culledSet.size();
+		
+		
+		std::cout << "#NEXUS\nBEGIN DATA;\n\tDimensions ntax = " << ntaxTotal << " nchar = " << numPatterns - numCulled << ";\n\t";
+		charBlock->WriteFormatCommand(std::cout);
+		std::cout << "Matrix\n";
+		const unsigned width = taxaBlock->GetMaxTaxonLabelLength();
+        for (unsigned i = 0; i < ntaxTotal; i++)
+			{
+            const std::string currTaxonLabel = NxsString::GetEscaped(taxaBlock->GetTaxonLabel(i));
+            std::cout << currTaxonLabel;
+            unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+            unsigned diff = width - currTaxonLabelLen;
+            for (unsigned k = 0; k < diff+5; k++)
+                std::cout << ' ';
+            NxsCDiscreteStateSet * matrixRow = matrixAlias[i];
+            /*
+            for (unsigned j = 0; j < numPatterns; ++j)
+                std::cout << ' ' << (int) matrixRow[j] ;
+            std::cout << '\n';
+            */
+            for (unsigned j = 0; j < numPatterns; ++j)
+                {
+                if (culledSet.find(j) == culledSet.end()) 
+                    dm->WriteStateCodeAsNexusString(std::cout, matrixRow[j], true);
+                }
+            /*
+            for (unsigned j = 0; j < numPatterns; ++j)
+                std::cout << ' ' << (int) matrixRow[j];
+            */
+            std::cout << '\n';
+            }
+        const char * sp = (hasWeights ? " " : " * ");
+
+        unsigned ind = 0;
+        std::cout << ";\nEND;\nBEGIN ASSUMPTIONS;\n\tWTSET" << sp << " counts ( vector ) =";
+        for (std::vector<unsigned>::const_iterator cIt = patternCounts.begin(); cIt != patternCounts.end(); ++cIt, ++ind)
+            {
+            if (culledSet.find(ind) == culledSet.end()) 
+                std::cout << ' ' << *cIt;
+            }
+        std::cout << ";\n";
+        if (hasWeights)
+            {
+            std::cout << "\tWTSET * sum_of_weights ( vector ) =";
+            if (hasIntWeights)
+                {
+                for (std::vector<double>::const_iterator cIt = patternWeights.begin(); cIt != patternWeights.end(); ++cIt, ++ind)
+                    {
+                    int w = int(0.01 + *cIt);
+                    if (culledSet.find(ind) == culledSet.end()) 
+                        std::cout << ' ' << w;
+                    }
+
+                }
+            else
+                for (std::vector<double>::const_iterator cIt = patternWeights.begin(); cIt != patternWeights.end(); ++cIt, ++ind)
+                    {
+                    if (culledSet.find(ind) == culledSet.end()) 
+                        std::cout << ' ' << *cIt;
+                    }
+            std::cout << ";\n";
+            }
+        std::cout << "END;\n";
+       
+        
+
+		
+		
+		nexusReader.DeleteBlocksFromFactories();
+	}
+	catch(const NxsException &x)
+		{
+		std::cerr << "Error:\n " << x.msg << std::endl;
+		if (x.line > 0 || x.pos > 0)
+			std::cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << std::endl;
+		return 2;
+		}
+	catch(...)
+		{
+		std::cerr << "Exiting with an unknown error" << std::endl;
+		return 1;
+		}
+	return 0;
+}
diff --git a/example/gapcode/Makefile.am b/example/gapcode/Makefile.am
new file mode 100644
index 0000000..f6cc890
--- /dev/null
+++ b/example/gapcode/Makefile.am
@@ -0,0 +1,5 @@
+LDADD       = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = NEXUSgapcode
+NEXUSgapcode_SOURCES = gapcode.cpp
+NEXUSgapcode_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/example/gapcode/Makefile.in b/example/gapcode/Makefile.in
new file mode 100644
index 0000000..c155083
--- /dev/null
+++ b/example/gapcode/Makefile.in
@@ -0,0 +1,499 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = NEXUSgapcode$(EXEEXT)
+subdir = example/gapcode
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_NEXUSgapcode_OBJECTS = NEXUSgapcode-gapcode.$(OBJEXT)
+NEXUSgapcode_OBJECTS = $(am_NEXUSgapcode_OBJECTS)
+NEXUSgapcode_LDADD = $(LDADD)
+NEXUSgapcode_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(NEXUSgapcode_SOURCES)
+DIST_SOURCES = $(NEXUSgapcode_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+NEXUSgapcode_SOURCES = gapcode.cpp
+NEXUSgapcode_CPPFLAGS = $(AM_CPPFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/gapcode/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/gapcode/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+NEXUSgapcode$(EXEEXT): $(NEXUSgapcode_OBJECTS) $(NEXUSgapcode_DEPENDENCIES) 
+	@rm -f NEXUSgapcode$(EXEEXT)
+	$(CXXLINK) $(NEXUSgapcode_OBJECTS) $(NEXUSgapcode_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUSgapcode-gapcode.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+NEXUSgapcode-gapcode.o: gapcode.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSgapcode_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSgapcode-gapcode.o -MD -MP -MF $(DEPDIR)/NEXUSgapcode-gapcode.Tpo -c -o NEXUSgapcode-gapcode.o `test -f 'gapcode.cpp' || echo '$(srcdir)/'`gapcode.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSgapcode-gapcode.Tpo $(DEPDIR)/NEXUSgapcode-gapcode.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gapcode.cpp' object='NEXUSgapcode-gapcode.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSgapcode_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSgapcode-gapcode.o `test -f 'gapcode.cpp' || echo '$(srcdir)/'`gapcode.cpp
+
+NEXUSgapcode-gapcode.obj: gapcode.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSgapcode_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSgapcode-gapcode.obj -MD -MP -MF $(DEPDIR)/NEXUSgapcode-gapcode.Tpo -c -o NEXUSgapcode-gapcode.obj `if test -f 'gapcode.cpp'; then $(CYGPATH_W) 'gapcode.cpp'; else $(CYGPATH_W) '$(srcdir)/gapcode.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSgapcode-gapcode.Tpo $(DEPDIR)/NEXUSgapcode-gapcode.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gapcode.cpp' object='NEXUSgapcode-gapcode.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSgapcode_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSgapcode-gapcode.obj `if test -f 'gapcode.cpp'; then $(CYGPATH_W) 'gapcode.cpp'; else $(CYGPATH_W) '$(srcdir)/gapcode.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/gapcode/gapcode.cpp b/example/gapcode/gapcode.cpp
new file mode 100644
index 0000000..ea491da
--- /dev/null
+++ b/example/gapcode/gapcode.cpp
@@ -0,0 +1,654 @@
+//	Copyright (C) 2007-2008 Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+/*******************************************************************************
+ * This file contains code for 4 executables:
+ *		NEXUSnormalizer, NEXUSvalidator, NEXUSinspector, and NEX_us2ml
+ *	with conditional compilation used to determine the behavior.
+ *
+ *		* NEXUSnormalizer - writes a NEXUS version of the file with consistent
+ *			ordering of blocks and commands. Ideally 2 equivalent files will
+ *			produce the same normalized output. This version of tthe program is
+ *			less ambitious. The goal is to be able to run (for any valid NEXUS
+ *			in.nex file):
+ *				$ NEXUSnormalizer in.nex > outOrig.nex
+ *				$ NEXUSnormalizer outOrig.nex > outSecond.nex
+ *				$ diff outOrig.nex outSecond.nex
+ *			and find no differences.
+ *		* NEXUSvalidator - reports errors and warnings to stderr. Invalid files
+ *			cause exit with a non-zero return code
+ *		* NEXUSinspector - writes a brief report of every block parsed
+ *		* NEXUS_us2ml - writes a nexml version of the input (partially
+ *			implemented, note that the code to write nexml is in us2ml.cpp).
+ * See the processFilepath() function for an example of how to deal with NCL
+ *	to read a file using the new MultiFormatReader class. When the file
+ *	is correctly read, the processContent() function is called.
+ *
+ * All other code has to do with reading command line arguments and other
+ * 	user-interface concerns.
+ */
+#include "ncl/ncl.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxspublicblocks.h"
+#include "ncl/nxsmultiformat.h"
+#include <cassert>
+using namespace std;
+long gStrictLevel = 2;
+long gInterleaveLen = -1;
+bool gGapCodeAllPresentSites = false;
+bool gGapCodeAllAbsentSites = false;
+
+
+void processContent(PublicNexusReader & nexusReader, ostream *out);
+
+
+void vecToListOfIntWeights(const std::vector<int> &, NxsTransformationManager::ListOfIntWeights & iw);
+
+void vecToListOfDblWeights(const std::vector<double> &dblWts, NxsTransformationManager::ListOfDblWeights & dw);
+
+
+void vecToListOfIntWeights(const std::vector<int> & v, NxsTransformationManager::ListOfIntWeights & iw)
+	{
+	std::map<int, NxsUnsignedSet> m;
+	unsigned index = 0;
+	for (std::vector<int>::const_iterator vIt = v.begin(); vIt != v.end(); ++vIt, ++index)
+		{
+		std::map<int, NxsUnsignedSet>::iterator el = m.find(*vIt);
+		if (el == m.end())
+			{
+			std::set<unsigned> s;
+			s.insert(index);
+			m[*vIt] = s;
+			}
+		else
+			el->second.insert(index);
+		}
+	for (std::map<int, NxsUnsignedSet>::const_iterator mIt = m.begin(); mIt != m.end(); ++mIt)
+		iw.push_back(NxsTransformationManager::IntWeightToIndexSet(mIt->first, mIt->second));
+	}
+
+void vecToListOfDblWeights(const std::vector<double> & v, NxsTransformationManager::ListOfDblWeights & iw)
+	{
+	std::map<double, NxsUnsignedSet> m;
+	unsigned index = 0;
+	for (std::vector<double>::const_iterator vIt = v.begin(); vIt != v.end(); ++vIt, ++index)
+		{
+		std::map<double, NxsUnsignedSet>::iterator el = m.find(*vIt);
+		if (el == m.end())
+			{
+			std::set<unsigned> s;
+			s.insert(index);
+			m[*vIt] = s;
+			}
+		else
+			el->second.insert(index);
+		}
+	for (std::map<double, NxsUnsignedSet>::const_iterator mIt = m.begin(); mIt != m.end(); ++mIt)
+		iw.push_back(NxsTransformationManager::DblWeightToIndexSet(mIt->first, mIt->second));
+	}
+
+
+void writeCharactersAsGapped(ostream & out, NxsCharactersBlock * cb);
+
+////////////////////////////////////////////////////////////////////////////////
+// Takes NxsReader that has successfully read a file, and processes the
+//	information stored in the reader.
+//
+// The caller is responsibel for calling DeleteBlocksFromFactories() to clean
+//	up (if the reader uses the factory API).
+////////////////////////////////////////////////////////////////////////////////
+void processContent(PublicNexusReader & nexusReader, ostream *out)
+	{
+	if (!out)
+		return;
+	BlockReaderList blocks = nexusReader.GetUsedBlocksInOrder();
+
+	*out << "#NEXUS\n";
+	for (BlockReaderList::const_iterator bIt = blocks.begin(); bIt != blocks.end(); ++bIt)
+		{
+		NxsBlock * b = *bIt;
+		if (b->GetID() == "TAXA")
+			b->WriteAsNexus(*out);
+		else if (b->GetID() == "CHARACTERS" || b->GetID() == "DATA" )
+			{
+			NxsCharactersBlock * charactersBPtr = (NxsCharactersBlock *) b;
+			writeCharactersAsGapped(*out, charactersBPtr);
+			}
+		}
+	}
+
+////////////////////////////////////////////////////////////////////////////////
+// Creates a NxsReader, and tries to read the file `filename`.  If the
+//	read succeeds, then processContent will be called.
+////////////////////////////////////////////////////////////////////////////////
+void processFilepath(
+	const char * filename, // name of the file to be read
+	ostream *out, // output stream to use (NULL for no output). Not that cerr is used to report errors.
+	MultiFormatReader::DataFormatType fmt) // enum indicating the file format to expect.
+	{
+	assert(filename);
+	try
+		{
+		MultiFormatReader nexusReader(-1, NxsReader::WARNINGS_TO_STDERR);
+		if (gStrictLevel != 2)
+			nexusReader.SetWarningToErrorThreshold((int)NxsReader::FATAL_WARNING + 1 - (int) gStrictLevel);
+			NxsCharactersBlock * charsB = nexusReader.GetCharactersBlockTemplate();
+			NxsDataBlock * dataB = nexusReader.GetDataBlockTemplate();
+			charsB->SetAllowAugmentingOfSequenceSymbols(true);
+			dataB->SetAllowAugmentingOfSequenceSymbols(true);
+		if (gInterleaveLen > 0)
+			{
+			assert(charsB);
+			charsB->SetWriteInterleaveLen(gInterleaveLen);
+			dataB->SetWriteInterleaveLen(gInterleaveLen);
+			}
+		NxsTreesBlock * treesB = nexusReader.GetTreesBlockTemplate();
+		assert(treesB);
+		if (gStrictLevel < 2)
+			treesB->SetAllowImplicitNames(true);
+		if (gStrictLevel < 2)
+			{
+			NxsStoreTokensBlockReader *storerB =  nexusReader.GetUnknownBlockTemplate();
+			assert(storerB);
+			storerB->SetTolerateEOFInBlock(true);
+			}
+		cerr << "Executing" <<endl;
+		try {
+			nexusReader.ReadFilepath(filename, fmt);
+			processContent(nexusReader, out);
+			}
+		catch(...)
+			{
+			nexusReader.DeleteBlocksFromFactories();
+			throw;
+			}
+		nexusReader.DeleteBlocksFromFactories();
+		}
+	catch (const NxsException &x)
+		{
+		cerr << "Error:\n " << x.msg << endl;
+		if (x.line >=0)
+			cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << endl;
+		exit(2);
+		}
+	}
+
+void readFilepathAsNEXUS(const char *filename, MultiFormatReader::DataFormatType fmt)
+	{
+	cerr << "[Reading " << filename << "	 ]" << endl;
+	try {
+		ostream * outStream = 0L;
+		outStream = &cout;
+		processFilepath(filename, outStream, fmt);
+		}
+	catch (...)
+		{
+		cerr << "Normalizing of " << filename << " failed (with an exception)" << endl;
+		exit(1);
+		}
+	}
+
+void readFilesListedIsFile(const char *masterFilepath, MultiFormatReader::DataFormatType fmt)
+	{
+	ifstream masterStream(masterFilepath, ios::binary);
+	if (masterStream.bad())
+		{
+		cerr << "Could not open " << masterFilepath << "." << endl;
+		exit(3);
+		}
+	char filename[1024];
+	while ((!masterStream.eof())  && masterStream.good())
+		{
+		masterStream.getline(filename, 1024);
+		if (strlen(filename) > 0 && filename[0] != '#')
+			readFilepathAsNEXUS(filename, fmt);
+		}
+	}
+
+void printGapCodeHelp(ostream & out)
+	{
+	out << "NEXUSgapcode takes reads a file and rewrites the characters blocks with gaps coded as missing and an additional character block that displayse the presence/absence of a base for all gapped columns in the alignment.\n";
+	out << "\nThe most common usage is simply:\n    NEXUSgapcode <path to NEXUS file>\n";
+	out << "\nCommand-line flags:\n\n";
+	out << "    -h on the command line shows this help message\n\n";
+	out << "    -c Produce gap codes for columns in which all sites have a residue\n\n";
+	out << "    -d Produce gap codes for columns in which all sites lack a residue (if\n            this is not specified all-gap columns will be coded as all ? columns.\n";
+	out << "    -l<path> reads a file and treats each line of the file as a path to NEXUS file\n\n";
+	out << "    -s<non-negative integer> controls the NEXUS strictness level.\n";
+	out << "        the default level is equivalent to -s2 invoking the program with \n";
+	out << "        -s3 or a higher number will convert some warnings into fatal errors.\n";
+	out << "        Running with -s1 will cause the parser to accept dangerous constructs,\n";
+	out << "        and running with -s0 will cause the parser make every attempt to finish\n";
+	out << "        parsing the file (warning about very serious errors).\n\n";
+	out << "        Note that when -s0 strictness level is used, and the parser fails to\n";
+	out << "        finish, it will often be the result of an earlier error than the \n";
+	out << "        error that is reported in the last message.\n";
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		//passs
+#	elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+		//passs
+#	else
+		out << "    -i<number> specifies the length of the interleaved pages to create\n";
+#	endif
+	out << "    -f<format> specifies the input file format expected:\n";
+	out << "            -fnexus     NEXUS (this is also the default)\n";
+	out << "            -faafasta   Amino acid data in fasta\n";
+	out << "            -fdnafasta  DNA data in fasta\n";
+	out << "            -frnafasta  RNA data in fasta\n";
+	out << "        The complete list of format names that can follow the -f flag is:\n";
+	std::vector<std::string> fmtNames =  MultiFormatReader::getFormatNames();
+	for (std::vector<std::string>::const_iterator n = fmtNames.begin(); n != fmtNames.end(); ++n)
+		{
+		out << "            "<< *n << "\n";
+		}
+	}
+
+int main(int argc, char *argv[])
+	{
+	MultiFormatReader::DataFormatType f(MultiFormatReader::NEXUS_FORMAT);
+
+	bool readfile = false;
+	for (int i = 1; i < argc; ++i)
+		{
+		const char * filepath = argv[i];
+		const unsigned slen = strlen(filepath);
+		if (strlen(filepath) > 1 && filepath[0] == '-' && filepath[1] == 'h')
+			printGapCodeHelp(cout);
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 's')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gStrictLevel)))
+				{
+				cerr << "Expecting an integer after -s\n" << endl;
+				printGapCodeHelp(cerr);
+				return 2;
+				}
+			}
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		//pass
+#	elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+		//pass
+#	else
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'i')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gInterleaveLen)) || gInterleaveLen < 1)
+				{
+				cerr << "Expecting a positive integer after -i\n" << endl;
+				printGapCodeHelp(cerr);
+				return 2;
+				}
+			}
+#	endif
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'f')
+			{
+			f = MultiFormatReader::UNSUPPORTED_FORMAT;
+			if (slen > 2)
+				{
+				std::string fmtName(filepath + 2, slen - 2);
+				f =  MultiFormatReader::formatNameToCode(fmtName);
+				}
+			if (f == MultiFormatReader::UNSUPPORTED_FORMAT)
+				{
+				cerr << "Expecting a format after -f\n" << endl;
+				printGapCodeHelp(cerr);
+				return 2;
+				}
+			}
+		else if (strlen(filepath) > 2 && filepath[0] == '-' && filepath[1] == 'l')
+			{
+			readfile = true;
+			readFilesListedIsFile(filepath+2, f);
+			}
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'c')
+			{
+			gGapCodeAllPresentSites = true;
+			}
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'd')
+			{
+			gGapCodeAllAbsentSites = true;
+			}
+		else
+			{
+			readfile = true;
+			readFilepathAsNEXUS(filepath, f);
+			}
+		}
+	if (!readfile)
+		{
+		cerr << "Expecting the path to NEXUS file as the only command line argument!\n" << endl;
+		printGapCodeHelp(cerr);
+		return 1;
+		}
+	return 0;
+	}
+
+
+void writeCoreAssumptions(ostream &out, NxsCharactersBlock * cb, const char * newTitle)
+{
+	std::vector<int>			intWts;
+	std::vector<double>			dblWts;
+	NxsUnsignedSet activeExSet = cb->GetExcludedIndexSet();
+
+	const NxsTransformationManager &tm = cb->GetNxsTransformationManagerRef();
+	intWts = tm.GetDefaultIntWeights();
+	if (intWts.empty())
+		dblWts = tm.GetDefaultDoubleWeights();
+
+	if (!(activeExSet.empty() && intWts.empty() && dblWts.empty()))
+		{
+		out << "BEGIN ASSUMPTIONS; \n    LINK CHARACTERS = ";
+		out << NxsString::GetEscaped(newTitle) << " ;\n";
+		if (!activeExSet.empty())
+			{
+			NxsString exsetName;
+			exsetName << newTitle;
+			exsetName.append("ExSet");
+			NxsUnsignedSetMap m;
+			m[exsetName] = activeExSet;
+			NxsWriteSetCommand("EXSET", m, out, exsetName.c_str());;
+			}
+		if (!(intWts.empty() && dblWts.empty()))
+			{
+			NxsTransformationManager &cbntm = cb->GetNxsTransformationManagerRef();
+			const std::string &wtSetName =  cbntm.GetDefaultWeightSetName();
+			NxsTransformationManager ntm;
+			if (!intWts.empty())
+				{
+				NxsTransformationManager::ListOfIntWeights iw;
+				vecToListOfIntWeights(intWts, iw);
+				ntm.AddIntWeightSet(wtSetName, iw, true);
+				}
+			else
+				{
+				NxsTransformationManager::ListOfDblWeights dw;
+				vecToListOfDblWeights(dblWts, dw);
+				ntm.AddRealWeightSet(wtSetName, dw, true);
+				}
+			ntm.WriteWtSet(out);
+			}
+		out << "END;\n";
+		}
+}
+
+void writeCharactersAsGapped(ostream &out, NxsCharactersBlock * cb)
+{
+	if (!cb )
+		return;
+	NxsTaxaBlockAPI *tb = cb->GetTaxaBlockPtr(NULL);
+	if (tb == NULL)
+		return;
+	NxsCharactersBlock::DataTypesEnum dt = cb->GetDataType();
+	const char g = cb->GetGapSymbol();
+	const std::string baseTitle = cb->GetTitle();
+	if (tb == NULL
+		|| dt == NxsCharactersBlock::standard
+		|| dt == NxsCharactersBlock::continuous
+		|| dt == NxsCharactersBlock::mixed
+		|| (g == '\0' &&  !gGapCodeAllPresentSites))
+		{
+		cb->WriteAsNexus(out);
+		writeCoreAssumptions(out, cb, baseTitle.c_str());
+		return;
+		}
+	bool isAutogen = cb->IsAutoGeneratedTitle();
+	std::string newTitle = baseTitle;
+	newTitle.append("GapsAsMissing");
+	cb->SetTitle(newTitle, isAutogen);
+
+	std::set<unsigned> gappedColumns;
+	std::set<unsigned> residueColumns;
+
+	out << "BEGIN CHARACTERS;\n";
+	cb->WriteBasicBlockCommands(out);
+
+	const unsigned ntaxTotal = tb->GetNTax();
+	out << "    DIMENSIONS";
+	if (tb)
+		{
+		const unsigned wod = cb->GetNTaxWithData();
+		if (wod > 0 && wod != ntaxTotal)
+			out << " NTax=" << wod;
+		}
+	const unsigned nc = cb->GetNCharTotal();
+	out << " NChar=" << nc << ";\n";
+	cb->WriteEliminateCommand(out);
+	cb->SetGapSymbol('\0');
+	cb->WriteFormatCommand(out);
+	cb->SetGapSymbol(g);
+
+	cb->WriteCharStateLabelsCommand(out);
+
+	std::vector<int>			intWts;
+	std::vector<double>			dblWts;
+	NxsUnsignedSet activeExSet = cb->GetExcludedIndexSet();
+
+	const NxsTransformationManager &tm = cb->GetNxsTransformationManagerRef();
+	intWts = tm.GetDefaultIntWeights();
+	if (intWts.empty())
+		dblWts = tm.GetDefaultDoubleWeights();
+
+	unsigned width = tb->GetMaxTaxonLabelLength();
+	out << "Matrix\n";
+	unsigned begCharInd = 0;
+	unsigned endCharInd = nc;
+	for (unsigned i = 0; i < ntaxTotal; i++)
+		{
+		if (cb->TaxonIndHasData(i))
+			{
+			const std::string currTaxonLabel = NxsString::GetEscaped(tb->GetTaxonLabel(i));
+			out << currTaxonLabel;
+			unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+			unsigned diff = width - currTaxonLabelLen;
+			for (unsigned k = 0; k < diff + 5; k++)
+				out << ' ';
+
+			const NxsDiscreteStateRow & row = cb->GetDiscreteMatrixRow(i);
+			if (!row.empty())
+				{
+				const NxsDiscreteDatatypeMapper * dm = cb->GetDatatypeMapperForChar(0);
+				if (dm == NULL)
+					throw NxsNCLAPIException("No DatatypeMapper in WriteStatesForTaxonAsNexus");
+				if (cb->IsMixedType())
+					throw NxsNCLAPIException("Mixed datatypes are not supported by the NEXUSgapcode program.");
+				if (cb->IsTokens())
+					{
+					for (unsigned charInd = begCharInd; charInd < endCharInd; ++charInd)
+						{
+						int sc = row[charInd];
+						out << ' ';
+						if (sc == NXS_GAP_STATE_CODE)
+							out << dm->GetMissingSymbol();
+						else
+							{
+							NxsString sl = cb->GetStateLabel(charInd, sc); /*v2.1to2.2 2 */
+							if (sl == " ")
+								{
+								NxsString errormsg = "Writing character state ";
+								errormsg << 1 + sc << " for character " << 1+charInd << ", but no appropriate chararcter label or symbol was found.";
+								throw NxsNCLAPIException(errormsg);
+								}
+							else
+								out  << NxsString::GetEscaped(sl);
+							}
+						}
+					}
+				else
+					{
+					std::vector<NxsDiscreteStateCell>::const_iterator endIt = row.begin() + begCharInd;
+					std::vector<NxsDiscreteStateCell>::const_iterator begIt = endIt;
+					if (endCharInd == row.size())
+						endIt = row.end();
+					else
+						endIt += endCharInd - begCharInd;
+					unsigned j = begCharInd;
+					for (; begIt != endIt; ++begIt, ++j)
+						{
+						NxsDiscreteStateCell c;
+						if (*begIt == NXS_GAP_STATE_CODE)
+							{
+							c = NXS_MISSING_CODE;
+							gappedColumns.insert(j);
+							}
+						else
+							{
+							c = *begIt;
+							if (gGapCodeAllPresentSites)
+								gappedColumns.insert(j);
+							residueColumns.insert(j);
+							}
+						dm->WriteStateCodeAsNexusString(out, c, true);
+						}
+					}
+				}
+			out << '\n';
+			}
+		}
+	out << ";\n";
+	cb->WriteSkippedCommands(out);
+	out << "END;\n";
+
+
+	writeCoreAssumptions(out, cb, newTitle.c_str());
+	const unsigned nGappedCols = gappedColumns.size();
+	if (nGappedCols > 0)
+		{
+		newTitle = baseTitle;
+		newTitle.append("GapsAsBinary");
+		cb->SetTitle(newTitle, isAutogen);
+			out << "BEGIN CHARACTERS;\n";
+		cb->WriteBasicBlockCommands(out);
+
+		out << "    DIMENSIONS";
+		if (tb)
+			{
+			const unsigned wod = cb->GetNTaxWithData();
+			if (wod > 0 && wod != ntaxTotal)
+				out << " NTax=" << wod;
+			}
+		out << " NChar=" << nGappedCols << ";\n";
+		out << " CharStateLabels " ;
+		unsigned currChNumber = 1;
+		std::set<unsigned>::iterator gcIt = gappedColumns.begin();
+		out << currChNumber++ << " col_" << (1 + *gcIt);
+		for (++gcIt ; gcIt != gappedColumns.end(); ++gcIt)
+			out << ",\n    " << currChNumber++ << " col_" << (1 + *gcIt);
+		out << " ;\n" ;
+		out << "Format Datatype = Standard Symbols=\"01\" missing = '?' ;\n";
+
+		out << "Matrix\n";
+		for (unsigned i = 0; i < ntaxTotal; i++)
+			{
+			if (cb->TaxonIndHasData(i))
+				{
+				const std::string currTaxonLabel = NxsString::GetEscaped(tb->GetTaxonLabel(i));
+				out << currTaxonLabel;
+				unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+				unsigned diff = width - currTaxonLabelLen;
+				for (unsigned k = 0; k < diff + 5; k++)
+					out << ' ';
+
+				const NxsDiscreteStateRow & row = cb->GetDiscreteMatrixRow(i);
+				for (std::set<unsigned>::iterator cIt = gappedColumns.begin(); cIt != gappedColumns.end(); ++cIt)
+					{
+					NxsDiscreteStateCell sc = row[*cIt];
+					if (sc == NXS_GAP_STATE_CODE)
+						{
+						if (gGapCodeAllAbsentSites || (residueColumns.find(*cIt) != residueColumns.end()))
+							out << '0';
+						else
+							out << '?';
+						}
+					else if (sc == NXS_MISSING_CODE) 
+						{
+						out << '?';
+						}
+					else 
+						{
+						out << '1';
+						}
+					}
+				out << '\n';
+				}
+			}
+		out << ";\n";
+		cb->WriteSkippedCommands(out);
+		out << "END;\n";
+		}
+
+	std::vector<int>			gapintWts;
+	std::vector<double>			gapdblWts;
+	std::set<unsigned>			gapactiveExSet;
+	if (!activeExSet.empty())
+		{
+		unsigned gapind = 0;
+		for (std::set<unsigned>::iterator cIt = gappedColumns.begin(); cIt != gappedColumns.end(); ++cIt, ++gapind)
+			{
+			if (activeExSet.find(*cIt) != activeExSet.end())
+				gapactiveExSet.insert(gapind);
+			}
+		}
+	if (!intWts.empty())
+		{
+		for (std::set<unsigned>::iterator cIt = gappedColumns.begin(); cIt != gappedColumns.end(); ++cIt)
+			gapintWts.push_back(intWts[*cIt]);
+		}
+	if (!dblWts.empty())
+		{
+		for (std::set<unsigned>::iterator cIt = gappedColumns.begin(); cIt != gappedColumns.end(); ++cIt)
+			gapdblWts.push_back(dblWts[*cIt]);
+		}
+
+	if (!(gapactiveExSet.empty() && gapintWts.empty() && gapdblWts.empty()))
+		{
+		out << "BEGIN ASSUMPTIONS; \n    LINK CHARACTERS = ";
+		out << NxsString::GetEscaped(newTitle) << " ;\n";
+		if (!gapactiveExSet.empty())
+			{
+			NxsString exsetName;
+			exsetName << newTitle;
+			exsetName.append("GapExSet");
+			NxsUnsignedSetMap m;
+			m[exsetName] = gapactiveExSet;
+			NxsWriteSetCommand("EXSET", m, out, exsetName.c_str());;
+			}
+		if (!(gapintWts.empty() && gapdblWts.empty()))
+			{
+			NxsTransformationManager &cbntm = cb->GetNxsTransformationManagerRef();
+			std::string wtSetName =  cbntm.GetDefaultWeightSetName();
+			wtSetName.append("GapWtSet");
+			NxsTransformationManager ntm;
+			if (!gapintWts.empty())
+				{
+				NxsTransformationManager::ListOfIntWeights iw;
+				vecToListOfIntWeights(gapintWts, iw);
+				ntm.AddIntWeightSet(wtSetName, iw, true);
+				}
+			else
+				{
+				NxsTransformationManager::ListOfDblWeights dw;
+				vecToListOfDblWeights(gapdblWts, dw);
+				ntm.AddRealWeightSet(wtSetName, dw, true);
+				}
+			ntm.WriteWtSet(out);
+			}
+		out << "END;\n";
+		}
+
+
+	cb->SetTitle(baseTitle, isAutogen);
+}
diff --git a/example/nclsimplest/Makefile.am b/example/nclsimplest/Makefile.am
new file mode 100644
index 0000000..5d41190
--- /dev/null
+++ b/example/nclsimplest/Makefile.am
@@ -0,0 +1,5 @@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = $(CPPFLAGS) -I at top_srcdir@/ncl
+noinst_PROGRAMS = nclsimplest
+nclsimplest_SOURCES = nclsimplest.cpp
+
diff --git a/example/nclsimplest/Makefile.in b/example/nclsimplest/Makefile.in
new file mode 100644
index 0000000..bfbdc26
--- /dev/null
+++ b/example/nclsimplest/Makefile.in
@@ -0,0 +1,484 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = nclsimplest$(EXEEXT)
+subdir = example/nclsimplest
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_nclsimplest_OBJECTS = nclsimplest.$(OBJEXT)
+nclsimplest_OBJECTS = $(am_nclsimplest_OBJECTS)
+nclsimplest_LDADD = $(LDADD)
+nclsimplest_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(nclsimplest_SOURCES)
+DIST_SOURCES = $(nclsimplest_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = $(CPPFLAGS) -I at top_srcdir@/ncl
+nclsimplest_SOURCES = nclsimplest.cpp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/nclsimplest/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/nclsimplest/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+nclsimplest$(EXEEXT): $(nclsimplest_OBJECTS) $(nclsimplest_DEPENDENCIES) 
+	@rm -f nclsimplest$(EXEEXT)
+	$(CXXLINK) $(nclsimplest_OBJECTS) $(nclsimplest_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nclsimplest.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/nclsimplest/nclsimplest.cpp b/example/nclsimplest/nclsimplest.cpp
new file mode 100644
index 0000000..e2f6668
--- /dev/null
+++ b/example/nclsimplest/nclsimplest.cpp
@@ -0,0 +1,108 @@
+#include "ncl/ncl.h"
+using namespace std;
+NxsTaxaBlock	*taxa	= NULL;
+NxsTreesBlock	*trees	= NULL;
+
+class MyReader : public NxsReader
+	{
+	public:
+		ifstream inf;
+		ofstream outf;
+
+		MyReader(char *infname, char *outfname) : NxsReader()
+			{
+			inf.open(infname, ios::binary);
+			outf.open(outfname);
+			}
+
+		~MyReader()
+			{
+			inf.close();
+			outf.close();
+			}
+
+	void ExecuteStarting() {}
+	void ExecuteStopping() {}
+
+	bool EnteringBlock(NxsString blockName)
+		{
+		cout << "Reading \"" << blockName << "\" block..." << endl;
+		outf << "Reading \"" << blockName << "\" block..." << endl;
+
+		// Returning true means it is ok to delete any data associated with
+		// blocks of this type read in previously
+		//
+		return true;
+		}
+
+	void SkippingBlock(NxsString blockName)
+		{
+		cout << "Skipping unknown block (" << blockName << ")..." << endl;
+		outf << "Skipping unknown block (" << blockName << ")..." << endl;
+		}
+
+	void SkippingDisabledBlock(NxsString )
+		{
+		}
+
+	void OutputComment(const NxsString &msg)
+		{
+		outf << msg;
+		}
+
+	void NexusError(NxsString msg, file_pos pos, long line, long col)
+		{
+		cerr << endl;
+		cerr << "Error found at line " << line;
+		cerr << ", column " << col;
+		cerr << " (file position " << pos << "):" << endl;
+		cerr << msg << endl;
+
+		outf << endl;
+		outf << "Error found at line " << line;
+		outf << ", column " << col;
+		outf << " (file position " << pos << "):" << endl;
+		outf << msg << endl;
+
+		exit(0);
+		}
+	};
+
+class MyToken : public NxsToken
+	{
+	public:
+
+		MyToken(istream &is, ostream &os)
+			:NxsToken(is),
+			out(os)
+			{
+			}
+
+		void OutputComment(const NxsString &msg)
+			{
+			cout << msg << endl;
+			out << msg << endl;
+			}
+
+	private:
+		ostream &out;
+	};
+
+int main(int , char *argv[])
+	{
+	taxa = new NxsTaxaBlock();
+	trees = new NxsTreesBlock(taxa);
+
+	MyReader nexus(argv[1], argv[2]);
+	nexus.Add(taxa);
+	nexus.Add(trees);
+
+	MyToken token(nexus.inf, nexus.outf);
+	nexus.Execute(token);
+
+	taxa->Report(nexus.outf);
+	trees->Report(nexus.outf);
+
+	return 0;
+	}
+
diff --git a/example/ncltest/Makefile.am b/example/ncltest/Makefile.am
new file mode 100644
index 0000000..c2430b6
--- /dev/null
+++ b/example/ncltest/Makefile.am
@@ -0,0 +1,7 @@
+LDADD       = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = ncltest
+ncltest_SOURCES = ncltest.cpp ncltest.h
+check-local: ncltest
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(top_builddir)/example/ncltest/ncltest $(top_srcdir)/test/OldValidIn $(top_srcdir)/test/OldValidOut
+
diff --git a/example/ncltest/Makefile.in b/example/ncltest/Makefile.in
new file mode 100644
index 0000000..7a8d69e
--- /dev/null
+++ b/example/ncltest/Makefile.in
@@ -0,0 +1,497 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = ncltest$(EXEEXT)
+subdir = example/ncltest
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_ncltest_OBJECTS = ncltest.$(OBJEXT)
+ncltest_OBJECTS = $(am_ncltest_OBJECTS)
+ncltest_LDADD = $(LDADD)
+ncltest_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(ncltest_SOURCES)
+DIST_SOURCES = $(ncltest_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+ncltest_SOURCES = ncltest.cpp ncltest.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/ncltest/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/ncltest/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+ncltest$(EXEEXT): $(ncltest_OBJECTS) $(ncltest_DEPENDENCIES) 
+	@rm -f ncltest$(EXEEXT)
+	$(CXXLINK) $(ncltest_OBJECTS) $(ncltest_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncltest.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+check-local: ncltest
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(top_builddir)/example/ncltest/ncltest $(top_srcdir)/test/OldValidIn $(top_srcdir)/test/OldValidOut
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/ncltest/ncltest.cpp b/example/ncltest/ncltest.cpp
new file mode 100644
index 0000000..e7a17f2
--- /dev/null
+++ b/example/ncltest/ncltest.cpp
@@ -0,0 +1,359 @@
+//	Copyright (C) 1999-2002 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#include "ncl/ncl.h"
+#include "ncltest.h"
+#include <cassert>
+using namespace std;
+/*******************************************************************************
+ * 	This file uses the version 2.0 API for querying characters blocks to write
+ * 		out a NEXUS version of the input file.
+ *
+ *	It is intended to be a mechanism for regression testing to protect that API
+ *
+ *	The normalizer program is intended to provide more robust round-trip
+ */
+long gStrictLevel = 2;
+
+
+class NormalizingReader : public NxsReader
+	{
+	public:
+		ostream * outf;
+		NormalizingReader(ostream * outStream)
+			:NxsReader(),
+			outf(outStream),
+			storingBlocks(false),
+			supportingSharedImpliedBlocks(false)
+			{
+			}
+
+		~NormalizingReader();
+	void Clear();
+	void ExecuteStarting() {}
+	void ExecuteStopping() {}
+
+	bool EnteringBlock(NxsString )
+		{
+		// Returning true means it is ok to delete any data associated with previous blocks of this type
+		return true;
+		}
+
+	void SkippingBlock(NxsString blockName)
+		{
+		if (outf != 0L)
+			{
+			*outf << "[!Skipping unknown block (" << blockName << ")...]\n";
+			outf->flush();
+			}
+		}
+
+	void SkippingDisabledBlock(NxsString blockName)
+		{
+		if (outf != 0L)
+			{
+			*outf << "[!Skipping disabled block (" << blockName << ")...]\n";
+			outf->flush();
+			}
+		}
+
+	void PostBlockReadingHook(NxsBlock & block);
+	void NexusError(NxsString msg, file_pos pos, long line, long col)
+		{
+		cerr << "\nError found at line " << line << ", column " << col ;
+		cerr << " (file position " << pos << "):\n" << msg << endl;
+
+		if (outf != 0L)
+			{
+			*outf << "\nError found at line " << line << ", column " << col ;
+			*outf << " (file position " << pos << "):\n" << msg;
+			outf->flush();
+			}
+		exit(2);
+		}
+	private:
+
+		NxsBlockMapper 		blockMapper;
+		VecBlockPtr			blocksToDelete;
+		std::set<BlockUniqueID> writtenBlocks;
+		/*  need to make this true for a full normalizer that can rearrange block order.
+			The storingBlocks=true branch of the code is only half-written.
+			Do NOT change the default in the ctor and expect it to work!!!
+		*/
+		bool				storingBlocks;
+		/*	The code has only been tested with supportingSharedImpliedBlocks=false */
+		bool				supportingSharedImpliedBlocks;
+	};
+
+class NormalizingToken : public NxsToken
+	{
+	public:
+		NormalizingToken(istream &is, ostream * os)
+			:NxsToken(is),
+			out(os)
+			{
+			}
+		void OutputComment(const NxsString & msg)
+			{
+			if (out == NULL)
+				return;
+			*out << "[!" << msg << "]\n";
+			out->flush();
+			}
+	private:
+		ostream * out;
+	};
+
+NormalizingReader::~NormalizingReader()
+	{
+	Clear();
+	}
+
+void NormalizingReader::Clear()
+	{
+	writtenBlocks.clear();
+	blockMapper.clear();
+	for (VecBlockPtr::iterator it = blocksToDelete.begin(); it != blocksToDelete.end(); ++it)
+		delete *it;
+	}
+
+void WriteCharactersBlock(ostream & out, NxsCharactersBlock *ncb)
+	{
+	const unsigned nt = ncb->GetNTax();
+	const unsigned nc = ncb->GetNChar();
+	int status;
+	NxsTaxaBlockAPI* tb = ncb->GetTaxaBlockPtr(&status);
+	assert(tb);
+	out << "BEGIN DATA;\n";
+	out << "    DIMENSIONS NTax="<< ncb->GetNTaxWithData() << " NChar=" << ncb->GetNumActiveChar() << ";\n";
+	out << "    FORMAT Datatype = "<< ncb->GetDatatypeName() << " missing=" << ncb->GetMissingSymbol();
+	const char gap = ncb->GetGapSymbol();
+	if (gap != '\0')
+		out << " gap=" << gap;
+	out << ";\nMatrix\n";
+	for (unsigned i = 0; i < nt; ++i)
+		{
+		if (ncb->TaxonIndHasData(i))
+			{
+			out << NxsToken::EscapeString(tb->GetTaxonLabel(i)) << ' ';
+			for (unsigned j = 0; j < nc; ++j)
+				{
+				const unsigned ns = ncb->GetNumStates(i, j);
+				if (ns > 1)
+					{
+					out << '{';
+					for (unsigned k = 0; k < ns; ++k)
+						out << ncb->GetState(i, j, k);
+					out << '}';
+					}
+				else
+					out << ncb->GetState(i, j, 0);
+				}
+			out << '\n';
+			}
+		}
+	out << ";\nEND;\n";
+	}
+
+
+void processNexusBlock(ostream & out, NxsBlock *nb)
+	{
+	NxsString identifier = nb->GetID();
+	if (NxsString::case_insensitive_equals(identifier.c_str(), "DATA")
+		|| NxsString::case_insensitive_equals(identifier.c_str(), "CHARACTERS"))
+		{
+		NxsCharactersBlock * ncb = static_cast<NxsCharactersBlock *>(nb);
+		WriteCharactersBlock(out, ncb);
+		}
+	else if (NxsString::case_insensitive_equals(identifier.c_str(), "SETS")
+		|| NxsString::case_insensitive_equals(identifier.c_str(), "ASSUMPTIONS"))
+		{}
+	else
+		nb->WriteAsNexus(out);
+	}
+void NormalizingReader::PostBlockReadingHook(NxsBlock & block)
+	{
+	//cerr << "PostBlockReadingHook for " << GetBlockIDTitleString(block) << endl;
+
+	NxsBlock * toStore;
+	if (this->storingBlocks)
+		{
+		try {
+			toStore = block.CloneBlock(blockMapper);
+			}
+		catch (...)
+			{
+			cerr << "CloneBlock of " << GetBlockIDTitleString(block) << " failed with an exception.  Only Clonable blocks can be normalized." << endl;
+			throw;
+			}
+		blocksToDelete.push_back(toStore);
+		blockMapper[block.GetInstanceIdentifier()] = toStore;
+		}
+	else
+		toStore = █
+	/*
+	VecBlockPtr impliedBlocks = toStore->GetImpliedBlocks();
+	for (VecBlockPtr::const_iterator ibIt = impliedBlocks.begin(); ibIt != impliedBlocks.end(); ++ibIt)
+		{
+		const BlockUniqueID currBlockID = (*ibIt)->GetInstanceIdentifier();
+		if ((!this->supportingSharedImpliedBlocks) || writtenBlocks.find(currBlockID) == writtenBlocks.end())
+			{
+			if (this->storingBlocks)
+				blocksToDelete.push_back(*ibIt);
+			try {
+				if (outf != 0L)
+					processNexusBlock(*outf, *ibIt);
+				}
+			catch (...)
+				{
+				cerr << block.GetInstanceName() << "raised an exception when writing as NEXUS." << endl;
+				throw;
+				}
+			if (this->supportingSharedImpliedBlocks)
+				writtenBlocks.insert(currBlockID);
+			}
+		}
+	*/
+	const BlockUniqueID toStoreBlockID = toStore->GetInstanceIdentifier();
+	try {
+		if (outf != 0L)
+			processNexusBlock(*outf, toStore);
+		}
+	catch (...)
+		{
+		cerr << GetBlockIDTitleString(block) << " raised an exception when writing as NEXUS." << endl;
+		throw;
+		}
+	writtenBlocks.insert(toStoreBlockID);
+	}
+
+void filepathToNormalizedNEXUS(const char * filename, ostream *os)
+	{
+	ifstream inf(filename, ios::binary);
+	toNormalizedNEXUS(inf, os);
+	}
+
+
+void readFilesListedIsFile(const char *masterFilepath, ostream *out)
+{
+	ifstream masterStream(masterFilepath);
+	if (masterStream.bad())
+	{
+		cerr << "Could not open " << masterFilepath << "." << endl;
+		exit(3);
+	}
+	char filename[1024];
+	while ((!masterStream.eof())  && masterStream.good())
+	{
+		masterStream.getline(filename, 1024);
+		if (strlen(filename) > 0 && filename[0] != '#')
+			filepathToNormalizedNEXUS(filename, out);
+	}
+}
+
+void toNormalizedNEXUS(ifstream & inf, ostream *os)
+	{
+	NxsTaxaBlock taxa;
+	NxsTreesBlock trees(&taxa);
+	NxsAssumptionsBlock assumptions(&taxa);
+	NxsCharactersBlock character(&taxa, &assumptions);
+	NxsDataBlock data(&taxa, &assumptions);
+	NxsDistancesBlock distances(&taxa);
+	NxsUnalignedBlock unaligned(&taxa);
+
+	NormalizingReader nexus(os);
+	nexus.Add(&taxa);
+	nexus.Add(&trees);
+	nexus.Add(&assumptions);
+	nexus.Add(&character);
+	nexus.Add(&data);
+	nexus.Add(&distances);
+	nexus.Add(&unaligned);
+
+	if (os)
+		{
+		*os << "#NEXUS\n";
+		}
+	NormalizingToken token(inf, os);
+
+	nexus.Execute(token);
+	}
+
+void printHelp(ostream & out)
+	{
+	out << "NCLtest NEXUS normalizer takes reads a NEXUS file and rewrites the file to standard out with consistent indentation and syntax.\n";
+	out << "\nThe most common usage is simply:\n    NEXUSnormalizer <path to NEXUS file>\n";
+	out << "\nCommand-line flags:\n\n";
+	out << "    -h on the command line shows this help message\n\n";
+	out << "    -l<path> reads a file and treats each line of the file as a path to NEXUS file\n\n";
+	out << "    -s<non-negative integer> controls the NEXUS strictness level.\n";
+	out << "        the default level is equivalent to -s2 invoking the program with \n";
+	out << "        -s3 or a higher number will convert some warnings into fatal errors.\n";
+	out << "        Running with -s1 will cause the parser to accept dangerous constructs,\n";
+	out << "        and running with -s0 will cause the parser make every attempt to finish\n";
+	out << "        parsing the file (warning about very serious errors).\n\n";
+	out << "        Note that when -s0 strictness level is used, and the parser fails to\n";
+	out << "        finish, it will often be the result of an earlier error than the \n";
+	out << "        error that is reported in the last message.\n";
+	}
+
+int main(int argc, char *argv[])
+	{
+	if (argc < 2)
+		{
+		cerr << "Expecting the path to NEXUS file as the only command line argument" << endl;
+		return 1;
+		}
+	for (int i = 1; i < argc; ++i)
+		{
+		char * filename = argv[1];
+		cerr << "[Reading " << filename << "     ]" << endl;
+		try {
+#			if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+				ostream * outStream = 0L;
+#			else
+				ostream * outStream = &cout;
+#			endif
+
+			const char * filepath = argv[i];
+			if (strlen(filepath) > 1 && filepath[0] == '-' && filepath[1] == 'h')
+				printHelp(cout);
+			else if (strlen(filepath) > 2 && filepath[0] == '-' && filepath[1] == 's')
+				{
+				if (!NxsString::to_long(filepath + 2, &gStrictLevel))
+					{
+					cerr << "Expecting an integer after -s\n" << endl;
+					printHelp(cerr);
+					return 2;
+					}
+				}
+			else if (strlen(filepath) > 2 && filepath[0] == '-' && filepath[1] == 'l')
+					readFilesListedIsFile(filepath + 2, outStream);
+			else
+				filepathToNormalizedNEXUS(argv[i], outStream);
+			}
+		catch (...)
+			{
+			cerr << "Normalizing of " << filename << " failed (with an exception)" << endl;
+			exit(1);
+			}
+		}
+	return 0;
+	}
+
diff --git a/example/ncltest/ncltest.h b/example/ncltest/ncltest.h
new file mode 100644
index 0000000..434730f
--- /dev/null
+++ b/example/ncltest/ncltest.h
@@ -0,0 +1,23 @@
+//	Copyright (C) 1999-2002 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <iostream>
+
+void toNormalizedNEXUS(std::ifstream & inf, std::ostream * os);
+void filepathToNormalizedNEXUS(const char * filename, std::ostream * os);
+
diff --git a/example/normalizer/Makefile.am b/example/normalizer/Makefile.am
new file mode 100644
index 0000000..a9c8db3
--- /dev/null
+++ b/example/normalizer/Makefile.am
@@ -0,0 +1,33 @@
+LDADD       = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+bin_PROGRAMS = NEXUSnormalizer NEXUSvalidator NCLconverter
+noinst_PROGRAMS = NEXUSinspector NEX_us2ml NEXUSunion
+
+EXTERNAL_FLAG=-e
+
+check-local: NEXUSnormalizer
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/data/characters.nex $(top_srcdir)/test/data
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/data/sample.tre $(top_srcdir)/test/data
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(top_builddir)/example/normalizer//NEXUSnormalizer $(top_srcdir)/test/NTSValidIn $(top_srcdir)/test/NTSValidOut
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py -x $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/test/funkyValidIn $(top_srcdir)/test/funkyValidOut
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(EXTERNAL_FLAG) $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/test/ExternalValidIn $(top_srcdir)/test/ExternalValidOut
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py -i -e $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/test/ExternalInvalidIn
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py -a $(top_builddir)/example/normalizer/NEXUSnormalizer
+	
+
+NEXUSnormalizer_SOURCES = normalizer.cpp normalizer.h
+
+NEXUSvalidator_SOURCES = normalizer.cpp normalizer.h
+NEXUSvalidator_CPPFLAGS = $(AM_CPPFLAGS) -DJUST_VALIDATE_NEXUS
+
+NEXUSinspector_SOURCES = normalizer.cpp normalizer.h
+NEXUSinspector_CPPFLAGS = $(AM_CPPFLAGS) -DJUST_REPORT_NEXUS
+
+NEX_us2ml_SOURCES = normalizer.cpp normalizer.h us2ml.cpp
+NEX_us2ml_CPPFLAGS = $(AM_CPPFLAGS) -DTO_NEXML_CONVERTER
+
+NEXUSunion_SOURCES = normalizer.cpp normalizer.h
+NEXUSunion_CPPFLAGS = $(AM_CPPFLAGS) -DMULTIFILE_NEXUS_READER
+
+NCLconverter_SOURCES = normalizer.cpp normalizer.h us2ml.cpp converter.cpp
+NCLconverter_CPPFLAGS = $(AM_CPPFLAGS) -DNCL_CONVERTER_APP
diff --git a/example/normalizer/Makefile.in b/example/normalizer/Makefile.in
new file mode 100644
index 0000000..25b3dda
--- /dev/null
+++ b/example/normalizer/Makefile.in
@@ -0,0 +1,727 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = NEXUSnormalizer$(EXEEXT) NEXUSvalidator$(EXEEXT) \
+	NCLconverter$(EXEEXT)
+noinst_PROGRAMS = NEXUSinspector$(EXEEXT) NEX_us2ml$(EXEEXT) \
+	NEXUSunion$(EXEEXT)
+subdir = example/normalizer
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
+am_NCLconverter_OBJECTS = NCLconverter-normalizer.$(OBJEXT) \
+	NCLconverter-us2ml.$(OBJEXT) NCLconverter-converter.$(OBJEXT)
+NCLconverter_OBJECTS = $(am_NCLconverter_OBJECTS)
+NCLconverter_LDADD = $(LDADD)
+NCLconverter_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+am_NEXUSinspector_OBJECTS = NEXUSinspector-normalizer.$(OBJEXT)
+NEXUSinspector_OBJECTS = $(am_NEXUSinspector_OBJECTS)
+NEXUSinspector_LDADD = $(LDADD)
+NEXUSinspector_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+am_NEXUSnormalizer_OBJECTS = normalizer.$(OBJEXT)
+NEXUSnormalizer_OBJECTS = $(am_NEXUSnormalizer_OBJECTS)
+NEXUSnormalizer_LDADD = $(LDADD)
+NEXUSnormalizer_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+am_NEXUSunion_OBJECTS = NEXUSunion-normalizer.$(OBJEXT)
+NEXUSunion_OBJECTS = $(am_NEXUSunion_OBJECTS)
+NEXUSunion_LDADD = $(LDADD)
+NEXUSunion_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+am_NEXUSvalidator_OBJECTS = NEXUSvalidator-normalizer.$(OBJEXT)
+NEXUSvalidator_OBJECTS = $(am_NEXUSvalidator_OBJECTS)
+NEXUSvalidator_LDADD = $(LDADD)
+NEXUSvalidator_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+am_NEX_us2ml_OBJECTS = NEX_us2ml-normalizer.$(OBJEXT) \
+	NEX_us2ml-us2ml.$(OBJEXT)
+NEX_us2ml_OBJECTS = $(am_NEX_us2ml_OBJECTS)
+NEX_us2ml_LDADD = $(LDADD)
+NEX_us2ml_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(NCLconverter_SOURCES) $(NEXUSinspector_SOURCES) \
+	$(NEXUSnormalizer_SOURCES) $(NEXUSunion_SOURCES) \
+	$(NEXUSvalidator_SOURCES) $(NEX_us2ml_SOURCES)
+DIST_SOURCES = $(NCLconverter_SOURCES) $(NEXUSinspector_SOURCES) \
+	$(NEXUSnormalizer_SOURCES) $(NEXUSunion_SOURCES) \
+	$(NEXUSvalidator_SOURCES) $(NEX_us2ml_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+EXTERNAL_FLAG = -e
+NEXUSnormalizer_SOURCES = normalizer.cpp normalizer.h
+NEXUSvalidator_SOURCES = normalizer.cpp normalizer.h
+NEXUSvalidator_CPPFLAGS = $(AM_CPPFLAGS) -DJUST_VALIDATE_NEXUS
+NEXUSinspector_SOURCES = normalizer.cpp normalizer.h
+NEXUSinspector_CPPFLAGS = $(AM_CPPFLAGS) -DJUST_REPORT_NEXUS
+NEX_us2ml_SOURCES = normalizer.cpp normalizer.h us2ml.cpp
+NEX_us2ml_CPPFLAGS = $(AM_CPPFLAGS) -DTO_NEXML_CONVERTER
+NEXUSunion_SOURCES = normalizer.cpp normalizer.h
+NEXUSunion_CPPFLAGS = $(AM_CPPFLAGS) -DMULTIFILE_NEXUS_READER
+NCLconverter_SOURCES = normalizer.cpp normalizer.h us2ml.cpp converter.cpp
+NCLconverter_CPPFLAGS = $(AM_CPPFLAGS) -DNCL_CONVERTER_APP
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/normalizer/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/normalizer/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p || test -f $$p1; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+NCLconverter$(EXEEXT): $(NCLconverter_OBJECTS) $(NCLconverter_DEPENDENCIES) 
+	@rm -f NCLconverter$(EXEEXT)
+	$(CXXLINK) $(NCLconverter_OBJECTS) $(NCLconverter_LDADD) $(LIBS)
+NEXUSinspector$(EXEEXT): $(NEXUSinspector_OBJECTS) $(NEXUSinspector_DEPENDENCIES) 
+	@rm -f NEXUSinspector$(EXEEXT)
+	$(CXXLINK) $(NEXUSinspector_OBJECTS) $(NEXUSinspector_LDADD) $(LIBS)
+NEXUSnormalizer$(EXEEXT): $(NEXUSnormalizer_OBJECTS) $(NEXUSnormalizer_DEPENDENCIES) 
+	@rm -f NEXUSnormalizer$(EXEEXT)
+	$(CXXLINK) $(NEXUSnormalizer_OBJECTS) $(NEXUSnormalizer_LDADD) $(LIBS)
+NEXUSunion$(EXEEXT): $(NEXUSunion_OBJECTS) $(NEXUSunion_DEPENDENCIES) 
+	@rm -f NEXUSunion$(EXEEXT)
+	$(CXXLINK) $(NEXUSunion_OBJECTS) $(NEXUSunion_LDADD) $(LIBS)
+NEXUSvalidator$(EXEEXT): $(NEXUSvalidator_OBJECTS) $(NEXUSvalidator_DEPENDENCIES) 
+	@rm -f NEXUSvalidator$(EXEEXT)
+	$(CXXLINK) $(NEXUSvalidator_OBJECTS) $(NEXUSvalidator_LDADD) $(LIBS)
+NEX_us2ml$(EXEEXT): $(NEX_us2ml_OBJECTS) $(NEX_us2ml_DEPENDENCIES) 
+	@rm -f NEX_us2ml$(EXEEXT)
+	$(CXXLINK) $(NEX_us2ml_OBJECTS) $(NEX_us2ml_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NCLconverter-converter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NCLconverter-normalizer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NCLconverter-us2ml.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUSinspector-normalizer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUSunion-normalizer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUSvalidator-normalizer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEX_us2ml-normalizer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEX_us2ml-us2ml.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/normalizer.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+NCLconverter-normalizer.o: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NCLconverter-normalizer.o -MD -MP -MF $(DEPDIR)/NCLconverter-normalizer.Tpo -c -o NCLconverter-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NCLconverter-normalizer.Tpo $(DEPDIR)/NCLconverter-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NCLconverter-normalizer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NCLconverter-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+
+NCLconverter-normalizer.obj: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NCLconverter-normalizer.obj -MD -MP -MF $(DEPDIR)/NCLconverter-normalizer.Tpo -c -o NCLconverter-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NCLconverter-normalizer.Tpo $(DEPDIR)/NCLconverter-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NCLconverter-normalizer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NCLconverter-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+
+NCLconverter-us2ml.o: us2ml.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NCLconverter-us2ml.o -MD -MP -MF $(DEPDIR)/NCLconverter-us2ml.Tpo -c -o NCLconverter-us2ml.o `test -f 'us2ml.cpp' || echo '$(srcdir)/'`us2ml.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NCLconverter-us2ml.Tpo $(DEPDIR)/NCLconverter-us2ml.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='us2ml.cpp' object='NCLconverter-us2ml.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NCLconverter-us2ml.o `test -f 'us2ml.cpp' || echo '$(srcdir)/'`us2ml.cpp
+
+NCLconverter-us2ml.obj: us2ml.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NCLconverter-us2ml.obj -MD -MP -MF $(DEPDIR)/NCLconverter-us2ml.Tpo -c -o NCLconverter-us2ml.obj `if test -f 'us2ml.cpp'; then $(CYGPATH_W) 'us2ml.cpp'; else $(CYGPATH_W) '$(srcdir)/us2ml.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NCLconverter-us2ml.Tpo $(DEPDIR)/NCLconverter-us2ml.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='us2ml.cpp' object='NCLconverter-us2ml.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NCLconverter-us2ml.obj `if test -f 'us2ml.cpp'; then $(CYGPATH_W) 'us2ml.cpp'; else $(CYGPATH_W) '$(srcdir)/us2ml.cpp'; fi`
+
+NCLconverter-converter.o: converter.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NCLconverter-converter.o -MD -MP -MF $(DEPDIR)/NCLconverter-converter.Tpo -c -o NCLconverter-converter.o `test -f 'converter.cpp' || echo '$(srcdir)/'`converter.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NCLconverter-converter.Tpo $(DEPDIR)/NCLconverter-converter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='converter.cpp' object='NCLconverter-converter.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NCLconverter-converter.o `test -f 'converter.cpp' || echo '$(srcdir)/'`converter.cpp
+
+NCLconverter-converter.obj: converter.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NCLconverter-converter.obj -MD -MP -MF $(DEPDIR)/NCLconverter-converter.Tpo -c -o NCLconverter-converter.obj `if test -f 'converter.cpp'; then $(CYGPATH_W) 'converter.cpp'; else $(CYGPATH_W) '$(srcdir)/converter.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NCLconverter-converter.Tpo $(DEPDIR)/NCLconverter-converter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='converter.cpp' object='NCLconverter-converter.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NCLconverter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NCLconverter-converter.obj `if test -f 'converter.cpp'; then $(CYGPATH_W) 'converter.cpp'; else $(CYGPATH_W) '$(srcdir)/converter.cpp'; fi`
+
+NEXUSinspector-normalizer.o: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSinspector_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSinspector-normalizer.o -MD -MP -MF $(DEPDIR)/NEXUSinspector-normalizer.Tpo -c -o NEXUSinspector-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSinspector-normalizer.Tpo $(DEPDIR)/NEXUSinspector-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NEXUSinspector-normalizer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSinspector_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSinspector-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+
+NEXUSinspector-normalizer.obj: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSinspector_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSinspector-normalizer.obj -MD -MP -MF $(DEPDIR)/NEXUSinspector-normalizer.Tpo -c -o NEXUSinspector-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSinspector-normalizer.Tpo $(DEPDIR)/NEXUSinspector-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NEXUSinspector-normalizer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSinspector_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSinspector-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+
+NEXUSunion-normalizer.o: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSunion_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSunion-normalizer.o -MD -MP -MF $(DEPDIR)/NEXUSunion-normalizer.Tpo -c -o NEXUSunion-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSunion-normalizer.Tpo $(DEPDIR)/NEXUSunion-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NEXUSunion-normalizer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSunion_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSunion-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+
+NEXUSunion-normalizer.obj: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSunion_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSunion-normalizer.obj -MD -MP -MF $(DEPDIR)/NEXUSunion-normalizer.Tpo -c -o NEXUSunion-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSunion-normalizer.Tpo $(DEPDIR)/NEXUSunion-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NEXUSunion-normalizer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSunion_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSunion-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+
+NEXUSvalidator-normalizer.o: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSvalidator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSvalidator-normalizer.o -MD -MP -MF $(DEPDIR)/NEXUSvalidator-normalizer.Tpo -c -o NEXUSvalidator-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSvalidator-normalizer.Tpo $(DEPDIR)/NEXUSvalidator-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NEXUSvalidator-normalizer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSvalidator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSvalidator-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+
+NEXUSvalidator-normalizer.obj: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSvalidator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSvalidator-normalizer.obj -MD -MP -MF $(DEPDIR)/NEXUSvalidator-normalizer.Tpo -c -o NEXUSvalidator-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSvalidator-normalizer.Tpo $(DEPDIR)/NEXUSvalidator-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NEXUSvalidator-normalizer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSvalidator_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSvalidator-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+
+NEX_us2ml-normalizer.o: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEX_us2ml_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEX_us2ml-normalizer.o -MD -MP -MF $(DEPDIR)/NEX_us2ml-normalizer.Tpo -c -o NEX_us2ml-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEX_us2ml-normalizer.Tpo $(DEPDIR)/NEX_us2ml-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NEX_us2ml-normalizer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEX_us2ml_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEX_us2ml-normalizer.o `test -f 'normalizer.cpp' || echo '$(srcdir)/'`normalizer.cpp
+
+NEX_us2ml-normalizer.obj: normalizer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEX_us2ml_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEX_us2ml-normalizer.obj -MD -MP -MF $(DEPDIR)/NEX_us2ml-normalizer.Tpo -c -o NEX_us2ml-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEX_us2ml-normalizer.Tpo $(DEPDIR)/NEX_us2ml-normalizer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='normalizer.cpp' object='NEX_us2ml-normalizer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEX_us2ml_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEX_us2ml-normalizer.obj `if test -f 'normalizer.cpp'; then $(CYGPATH_W) 'normalizer.cpp'; else $(CYGPATH_W) '$(srcdir)/normalizer.cpp'; fi`
+
+NEX_us2ml-us2ml.o: us2ml.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEX_us2ml_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEX_us2ml-us2ml.o -MD -MP -MF $(DEPDIR)/NEX_us2ml-us2ml.Tpo -c -o NEX_us2ml-us2ml.o `test -f 'us2ml.cpp' || echo '$(srcdir)/'`us2ml.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEX_us2ml-us2ml.Tpo $(DEPDIR)/NEX_us2ml-us2ml.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='us2ml.cpp' object='NEX_us2ml-us2ml.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEX_us2ml_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEX_us2ml-us2ml.o `test -f 'us2ml.cpp' || echo '$(srcdir)/'`us2ml.cpp
+
+NEX_us2ml-us2ml.obj: us2ml.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEX_us2ml_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEX_us2ml-us2ml.obj -MD -MP -MF $(DEPDIR)/NEX_us2ml-us2ml.Tpo -c -o NEX_us2ml-us2ml.obj `if test -f 'us2ml.cpp'; then $(CYGPATH_W) 'us2ml.cpp'; else $(CYGPATH_W) '$(srcdir)/us2ml.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEX_us2ml-us2ml.Tpo $(DEPDIR)/NEX_us2ml-us2ml.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='us2ml.cpp' object='NEX_us2ml-us2ml.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEX_us2ml_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEX_us2ml-us2ml.obj `if test -f 'us2ml.cpp'; then $(CYGPATH_W) 'us2ml.cpp'; else $(CYGPATH_W) '$(srcdir)/us2ml.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+	clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
+	clean-binPROGRAMS clean-generic clean-libtool \
+	clean-noinstPROGRAMS ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+check-local: NEXUSnormalizer
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/data/characters.nex $(top_srcdir)/test/data
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/data/sample.tre $(top_srcdir)/test/data
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(top_builddir)/example/normalizer//NEXUSnormalizer $(top_srcdir)/test/NTSValidIn $(top_srcdir)/test/NTSValidOut
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py -x $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/test/funkyValidIn $(top_srcdir)/test/funkyValidOut
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py $(EXTERNAL_FLAG) $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/test/ExternalValidIn $(top_srcdir)/test/ExternalValidOut
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py -i -e $(top_builddir)/example/normalizer/NEXUSnormalizer $(top_srcdir)/test/ExternalInvalidIn
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py -a $(top_builddir)/example/normalizer/NEXUSnormalizer
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/normalizer/converter.cpp b/example/normalizer/converter.cpp
new file mode 100644
index 0000000..f4456fd
--- /dev/null
+++ b/example/normalizer/converter.cpp
@@ -0,0 +1,909 @@
+//	Copyright (C) 2007-2008 Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+/*******************************************************************************
+ * This file contains code for 4 executables:
+ *		NEXUSnormalizer, NEXUSvalidator, NEXUSinspector, and NEX_us2ml
+ *	with conditional compilation used to determine the behavior.
+ *
+ *		* NEXUSnormalizer - writes a NEXUS version of the file with consistent
+ *			ordering of blocks and commands. Ideally 2 equivalent files will
+ *			produce the same normalized output. This version of tthe program is
+ *			less ambitious. The goal is to be able to run (for any valid NEXUS
+ *			in.nex file):
+ *				$ NEXUSnormalizer in.nex > outOrig.nex
+ *				$ NEXUSnormalizer outOrig.nex > outSecond.nex
+ *				$ diff outOrig.nex outSecond.nex
+ *			and find no differences.
+ *		* NEXUSvalidator - reports errors and warnings to stderr. Invalid files
+ *			cause exit with a non-zero return code
+ *		* NEXUSinspector - writes a brief report of every block parsed
+ *		* NEXUS_us2ml - writes a nexml version of the input (partially
+ *			implemented, note that the code to write nexml is in us2ml.cpp).
+ * See the processFilepath() function for an example of how to deal with NCL
+ *	to read a file using the new MultiFormatReader class. When the file
+ *	is correctly read, the processContent() function is called.
+ *
+ * All other code has to do with reading command line arguments and other
+ * 	user-interface concerns.
+ */
+
+#include <cassert>
+#include "ncl/ncl.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxspublicblocks.h"
+#include "ncl/nxsmultiformat.h"
+using namespace std;
+
+void writeAsNexml(PublicNexusReader & nexusReader, ostream & os);
+void writeAsNexus(PublicNexusReader & nexusReader, ostream & os);
+extern bool gQuietMode;
+
+
+
+void exportData(PublicNexusReader & nexusReader, MultiFormatReader::DataFormatType f, long interleaveLen, std::string prefix, std::ostream * fp);
+void exportCharacters(PublicNexusReader & nexusReader, MultiFormatReader::DataFormatType f, long interleaveLen, std::string prefix, std::ostream * fp);
+void exportTrees(PublicNexusReader & nexusReader, MultiFormatReader::DataFormatType f, std::string prefix, std::ostream * fp);
+const char * getFileExtension( MultiFormatReader::DataFormatType f);
+std::vector<NxsNameToNameTrans> nameTranslationDict(const std::vector<std::string> & origTaxa, MultiFormatReader::DataFormatType f);
+std::string getLegalTaxonName(const std::string & origName, const std::set<std::string> & used,  MultiFormatReader::DataFormatType f);
+std::string getLegalPhylipTaxonName(const std::string & origName, const std::set<std::string> & used);
+std::string getLegalRelaxedPhylipTaxonName(const std::string & origName, const std::set<std::string> & used);
+bool formLegalPhylipName(const std::string & origName, const NxsString & numericExtension, const std::set<std::string> & used, std::string & toReturn);
+bool formLegalRelaxedPhylipName(const std::string & origName, const NxsString & numericExtension, const std::set<std::string> & used, std::string & toReturn);
+
+std::string purgeIllegalCharactersFromPhylipName(const std::string &origName);
+std::string purgeIllegalCharactersFromRelaxedPhylipName(const std::string &origName);
+
+
+void reverseTranslateNames(PublicNexusReader &/*reader*/,
+                           std::string /*filepath*/) {
+}
+
+
+std::string assignUniqueName(const std::string & prefix, unsigned maxLen, const std::set<std::string> & safeLabelSet)
+    {
+    NxsString s;
+    s << prefix;
+    std::set<std::string>::const_iterator sIt = safeLabelSet.find(s);
+    if (sIt == safeLabelSet.end())
+        return s;
+    unsigned i = 1;
+    for (;;)
+        {
+        NxsString numAsStr;
+        numAsStr << i++;
+        s.clear(); 
+        unsigned concatLen = numAsStr.length() + prefix.length();
+        if (concatLen > maxLen) 
+            s << prefix.substr(0, 2*maxLen - 1 - concatLen);
+        else
+            s << prefix;
+        s << numAsStr;
+        sIt = safeLabelSet.find(s);
+        if (sIt == safeLabelSet.end())
+            return s;
+        }
+    }
+bool constructSafeLabels(const NxsTaxaBlock & tb, std::vector<std::string> * vs, std::set<std::string> & safeLabelSet)
+    {
+    if (vs == 0L)
+        return false;
+    const unsigned numTaxa = tb.GetNTaxTotal();
+    bool changed = false;
+    for (unsigned i = 0; i < numTaxa; ++i) 
+        {
+        NxsString oldName = tb.GetTaxonLabel(i);
+        unsigned oldOffset = 0;
+        unsigned newOffset = 0;
+        std::string prefix;
+        for (; newOffset < 10 && oldOffset < oldName.length(); ++oldOffset)
+            {
+            char c = oldName[oldOffset];
+            if ((isgraph(c)) && (strchr("!@#$%^&*.?|()[]{}/\\,;:=*\'\"`-+<>", c) == NULL))
+                {
+                if (newOffset == 0 && isdigit(c))
+                    {
+                    prefix.append(1, 't');
+                    newOffset += 1;
+                    }
+                prefix.append(1, toupper(c));
+                newOffset += 1;
+                }
+            }
+        std::string newLabel = assignUniqueName(prefix, 10, safeLabelSet);
+        safeLabelSet.insert(newLabel);
+        vs->push_back(newLabel);
+        if (newLabel != oldName)
+            changed = true;
+        
+        }
+    return changed;
+    }
+
+bool substituteSafeTaxaLabels(PublicNexusReader &nexusReader, std::string filepath, bool evenTrivial)
+    {
+    std::ostream * outStrPtr = 0L;
+    std::ofstream outStream;
+	const unsigned nTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+	bool someChanged = false;
+	std::set<std::string> safeNameSet;
+	try
+	    {
+	    for (unsigned t = 0; t < nTaxaBlocks; ++t)
+            {
+            NxsTaxaBlock * tb = nexusReader.GetTaxaBlock(t);
+            std::vector<std::string> safeLabelsVec;
+    
+            bool changed = constructSafeLabels(*tb, &safeLabelsVec, safeNameSet);
+            someChanged = someChanged | changed;  
+            if (changed || evenTrivial)
+                {
+                if (outStrPtr == 0L) 
+                    {
+                    outStream.open(filepath.c_str());
+                    if (!outStream.good())
+                        {
+                        NxsString eMessage;
+                        eMessage << "Could not open the file \"" << filepath << "\"";
+                        throw NxsException(eMessage);
+                        }
+                    outStrPtr = &outStream;
+                    outStream << "#NEXUS\n";
+                    }
+                tb->WriteAsNexus(*outStrPtr);
+                std::vector<NxsString> oldNameVec;
+                const unsigned numTaxa = tb->GetNTaxTotal();
+                for (unsigned i = 0; i < numTaxa; ++i) 
+                    {
+                    NxsString oldName = tb->GetTaxonLabel(i);
+                    oldNameVec.push_back(oldName);
+                    NxsString newName;
+                    newName << safeLabelsVec[i];
+                    tb->ChangeTaxonLabel(i, newName);
+                    }
+                NxsString title;
+                title << tb->GetTitle();
+                NxsString nt;
+                nt << "Renamed " << title;
+                tb->SetTitle(nt, false);
+                tb->WriteAsNexus(*outStrPtr);
+                
+                // We can't just create a TaxaAssociationBlock instance here,
+                //  and call WriteAsNexus because it first and second taxa block pointers
+                //  would refer to the same instance...
+                NxsString taTitle;
+                taTitle << "Renaming " << title;
+                *outStrPtr << "BEGIN TaxaAssociation;\n  Title " << NxsString::GetEscaped(taTitle) << " ;\n";
+                *outStrPtr << "  Taxa " << NxsString::GetEscaped(title) << " , " << NxsString::GetEscaped(nt) << " ;\n";
+                *outStrPtr << "  Associates ";
+                for (unsigned i = 0; i < numTaxa; ++i)
+                    {
+                    if (i > 0) 
+                        *outStrPtr << " ,\n    ";
+                    *outStrPtr <<  NxsString::GetEscaped(oldNameVec[i]) << " / " << NxsString::GetEscaped(safeLabelsVec[i]);
+                    }
+                *outStrPtr << " ;\nEND;\n" ;
+                }
+            }
+        }
+    catch (...) 
+        {
+        if (outStrPtr != 0L)
+            outStream.close();
+        throw;
+        }
+        
+    if (outStrPtr != 0L)
+        outStream.close();
+    return someChanged;
+    }
+        
+
+const char * getFileExtension( MultiFormatReader::DataFormatType f) {
+	if (f == MultiFormatReader::NEXUS_FORMAT)
+		return ".nex";
+	else if (f == MultiFormatReader::FASTA_DNA_FORMAT
+			|| f == MultiFormatReader::FASTA_AA_FORMAT
+			|| f == MultiFormatReader::FASTA_RNA_FORMAT)
+		return ".fasta";
+	else if (f == MultiFormatReader::PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::PHYLIP_DISC_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DISC_FORMAT
+			|| f == MultiFormatReader::RELAXED_PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::RELAXED_PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::RELAXED_PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::RELAXED_PHYLIP_DISC_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT)
+		return ".phy";
+	else if (f == MultiFormatReader::PHYLIP_TREE_FORMAT
+			|| f == MultiFormatReader::RELAXED_PHYLIP_TREE_FORMAT)
+		return ".tre";
+	else if (f == MultiFormatReader::NEXML_FORMAT)
+		return ".xml";
+	else {
+		throw NxsException("export requested for unsupported format");
+	}
+}
+
+std::string purgeIllegalCharactersFromPhylipName(const std::string &origName)
+{
+	std::string cleanedName;
+	cleanedName.reserve(origName.length());
+	for (std::string::const_iterator it = origName.begin(); it != origName.end(); ++it)
+		{
+		if (strchr("()[];,:\n", *it) == NULL)
+			cleanedName.append(1, *it);
+		}
+	return cleanedName;
+}
+
+std::string purgeIllegalCharactersFromRelaxedPhylipName(const std::string &origName)
+{
+	std::string cleanedName;
+	cleanedName.reserve(origName.length());
+	for (std::string::const_iterator it = origName.begin(); it != origName.end(); ++it)
+		{
+		if (strchr(" \n\t", *it) != NULL)
+			cleanedName.append(1, '_');
+		else if (strchr("()[];,:.", *it) == NULL) // RAxML (at least in the past) has not been happy with .'s in names -- since it is one of the targetted "relaxed phylip" programs, we will suppress .'s
+			cleanedName.append(1, *it);
+		}
+	return cleanedName;
+}
+
+bool formLegalPhylipName(const std::string & origName, const NxsString & numericExtension, const std::set<std::string> & used, std::string & toReturn)
+{
+	const unsigned MAX_PHYLIP_NAME_LENGTH = 10;
+	unsigned postLen = numericExtension.length();
+	if (postLen > MAX_PHYLIP_NAME_LENGTH)
+		throw NxsException("Number of duplicate names exceed the capacity of our poorly thought out mechanism for avoiding name clashes");
+	const unsigned unPaddedLen = postLen + origName.length();
+	if (unPaddedLen <= MAX_PHYLIP_NAME_LENGTH)
+		toReturn = origName;
+	else if (postLen == MAX_PHYLIP_NAME_LENGTH)
+		toReturn.clear();
+	else
+		toReturn.assign(origName.c_str(), MAX_PHYLIP_NAME_LENGTH - postLen);
+	toReturn.append(numericExtension.c_str());
+	if (unPaddedLen < MAX_PHYLIP_NAME_LENGTH)
+		toReturn.append(MAX_PHYLIP_NAME_LENGTH - unPaddedLen, ' ');
+	const std::string cap = NxsString::get_upper(toReturn);
+	return (used.find(cap) == used.end());
+}
+
+bool formLegalRelaxedPhylipName(const std::string & origName, const NxsString & numericExtension, const std::set<std::string> & used, std::string & toReturn)
+{
+	toReturn = origName;
+	toReturn.append(numericExtension.c_str());
+	const std::string cap = NxsString::get_upper(toReturn);
+	return (used.find(cap) == used.end());
+}
+
+std::string getLegalPhylipTaxonName(const std::string & origName, const std::set<std::string> & used)
+{
+	NxsString numericExtension;
+	std::string toReturn;
+	const std::string cleanedName(purgeIllegalCharactersFromPhylipName(origName));
+
+	for (unsigned i = 1;; ++i)
+		{
+		if (formLegalPhylipName(cleanedName, numericExtension, used, toReturn))
+			return toReturn;
+		numericExtension.clear();
+		numericExtension << i;
+		}
+}
+
+std::string getLegalRelaxedPhylipTaxonName(const std::string & origName, const std::set<std::string> & used)
+{
+	NxsString numericExtension;
+	std::string toReturn;
+	const std::string cleanedName(purgeIllegalCharactersFromRelaxedPhylipName(origName));
+
+	for (unsigned i = 1;; ++i)
+		{
+		if (formLegalRelaxedPhylipName(cleanedName, numericExtension, used, toReturn))
+			return toReturn;
+		numericExtension.clear();
+		numericExtension << i;
+		}
+}
+
+std::string getLegalTaxonName(const std::string & origName, const std::set<std::string> & used,  MultiFormatReader::DataFormatType f)
+{
+	if (f == MultiFormatReader::NEXUS_FORMAT
+		|| f == MultiFormatReader::FASTA_DNA_FORMAT
+		|| f == MultiFormatReader::FASTA_AA_FORMAT
+		|| f == MultiFormatReader::FASTA_RNA_FORMAT
+		|| f == MultiFormatReader::NEXML_FORMAT)
+		return origName;
+	if (f == MultiFormatReader::PHYLIP_DNA_FORMAT
+		|| f == MultiFormatReader::PHYLIP_RNA_FORMAT
+		|| f == MultiFormatReader::PHYLIP_AA_FORMAT
+		|| f == MultiFormatReader::PHYLIP_DISC_FORMAT
+		|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DNA_FORMAT
+		|| f == MultiFormatReader::INTERLEAVED_PHYLIP_RNA_FORMAT
+		|| f == MultiFormatReader::INTERLEAVED_PHYLIP_AA_FORMAT
+		|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DISC_FORMAT
+		|| f == MultiFormatReader::PHYLIP_TREE_FORMAT) {
+		return getLegalPhylipTaxonName(origName, used);
+	}
+	if (f == MultiFormatReader::RELAXED_PHYLIP_DNA_FORMAT
+		|| f == MultiFormatReader::RELAXED_PHYLIP_RNA_FORMAT
+		|| f == MultiFormatReader::RELAXED_PHYLIP_AA_FORMAT
+		|| f == MultiFormatReader::RELAXED_PHYLIP_DISC_FORMAT
+		|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT
+		|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT
+		|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT
+		|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT
+		|| f == MultiFormatReader::RELAXED_PHYLIP_TREE_FORMAT) {
+		return getLegalRelaxedPhylipTaxonName(origName, used);
+	}
+	throw NxsException("export requested for unsupported format");
+}
+
+/// returns an empty vector if no translation of names is needed or a vector
+///	 of the internal name to the getLegaldName
+std::vector<NxsNameToNameTrans> nameTranslationDict(const std::vector<std::string> & origTaxa, MultiFormatReader::DataFormatType f)
+{
+	bool transNeeded = false;
+	std::vector<NxsNameToNameTrans> translationTable;
+	std::set<std::string> usedNames;
+	for (std::vector<std::string>::const_iterator origIt = origTaxa.begin(); origIt != origTaxa.end(); ++origIt) {
+		std::string e = getLegalTaxonName(*origIt, usedNames, f);
+		if (e != *origIt)
+			transNeeded = true;
+		translationTable.push_back(NxsNameToNameTrans(*origIt, e));
+		NxsString::to_upper(e);
+		usedNames.insert(e);
+	}
+	if (transNeeded)
+		return translationTable;
+	return std::vector<NxsNameToNameTrans>();
+}
+
+bool IsPhylipType(MultiFormatReader::DataFormatType f)
+{
+	return (f == MultiFormatReader::PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::PHYLIP_DISC_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DISC_FORMAT);
+}
+
+bool IsRelaxedPhylipType(MultiFormatReader::DataFormatType f)
+{
+	return (f == MultiFormatReader::RELAXED_PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::RELAXED_PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::RELAXED_PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::RELAXED_PHYLIP_DISC_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT);
+}
+
+bool IsInterleaveType(MultiFormatReader::DataFormatType f)
+{
+	return (f == MultiFormatReader::INTERLEAVED_PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DISC_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT
+			|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT);
+}
+
+bool IsFastaType(MultiFormatReader::DataFormatType f)
+{
+	return (f == MultiFormatReader::FASTA_DNA_FORMAT
+			|| f == MultiFormatReader::FASTA_RNA_FORMAT
+			|| f == MultiFormatReader::FASTA_AA_FORMAT);
+}
+
+
+
+void writeUnalignedBlockToStream(
+  const NxsUnalignedBlock & cb,
+  ostream & outf,
+  const std::vector<std::string> & taxaNames,
+  MultiFormatReader::DataFormatType f,
+  long interleaveLen)
+{
+	const unsigned nt = taxaNames.size();
+    if (IsFastaType(f))
+		{
+		if (interleaveLen < 1)
+			interleaveLen = 60; // default FASTA line length
+		for (unsigned i = 0; i < nt; ++i)
+			{
+			const std::string & name = taxaNames[i];
+			std::string seq = cb.GetMatrixRowAsStr(i);
+			outf << '>' << name << '\n';
+			const unsigned nc = seq.length();
+			for (unsigned currIndex = 0; currIndex < nc; currIndex += (unsigned)interleaveLen)
+				{
+				unsigned nCharsToWrite = ((nc - currIndex) > (unsigned)interleaveLen ? (unsigned)interleaveLen : (nc - currIndex));
+				outf << seq.substr(currIndex, nCharsToWrite) << '\n';
+				}
+			}
+		}
+	else
+		{
+		throw NxsException("writeCharactersBlockToStream requested for unsupported format");
+		}
+}
+
+void writeCharactersBlockToStream(
+  const NxsCharactersBlock & cb,
+  ostream & outf,
+  const std::vector<std::string> & taxaNames,
+  MultiFormatReader::DataFormatType f,
+  long interleaveLen)
+{
+	const unsigned nt = taxaNames.size();
+	const unsigned nc = cb.GetNChar();
+	unsigned nCharsToWrite;
+	unsigned seqStartColumn = 0;
+
+	if (IsRelaxedPhylipType(f))
+		{
+		for (unsigned i = 0; i < nt; ++i)
+			{
+			const std::string & name = taxaNames[i];
+			if (name.length() > seqStartColumn)
+				seqStartColumn = name.length();
+			}
+		seqStartColumn += 1;
+		}
+
+
+	if (IsPhylipType(f) || IsRelaxedPhylipType(f))
+		{
+		std::string sep;
+
+		outf << nt << ' ' << nc << '\n';
+
+		if (IsInterleaveType(f) && interleaveLen > 0)
+			{
+			std::vector<std::string> storedSeqs;
+			storedSeqs.reserve(nt);
+			std::string *sp;
+			nCharsToWrite = (nc > (unsigned) interleaveLen ? (unsigned)interleaveLen : nc);
+			for (unsigned i = 0; i < nt; ++i)
+				{
+				const std::string & name = taxaNames[i];
+				storedSeqs.push_back(cb.GetMatrixRowAsStr(i));
+				sp = &(storedSeqs[i]);
+				if (IsRelaxedPhylipType(f))
+					{
+					sep.clear();
+					sep.append(seqStartColumn - name.length(), ' ');
+					}
+				outf << name << sep << sp->substr(0, nCharsToWrite) << '\n';
+				}
+
+			for (unsigned currIndex = (unsigned)interleaveLen; currIndex < nc; currIndex += (unsigned)interleaveLen)
+				{
+				outf << '\n';
+				nCharsToWrite = ((nc - currIndex) > (unsigned)interleaveLen ? (unsigned)interleaveLen : (nc - currIndex));
+				for (unsigned i = 0; i < nt; ++i)
+					{
+					sp = &(storedSeqs[i]);
+					outf << sp->substr(currIndex, nCharsToWrite) << '\n';
+					}
+				}
+			}
+		else
+			{
+			if (interleaveLen > 0)
+				{
+				// not interleaved, but wrapping at interleaveLen
+				for (unsigned i = 0; i < nt; ++i)
+					{
+					nCharsToWrite = (nc > (unsigned)interleaveLen ? (unsigned)interleaveLen : nc);
+					const std::string & name = taxaNames[i];
+					std::string seq = cb.GetMatrixRowAsStr(i);
+					if (IsRelaxedPhylipType(f))
+						{
+						sep.clear();
+						sep.append(seqStartColumn - name.length(), ' ');
+						}
+					outf << name << sep << seq.substr(0, nCharsToWrite) << '\n';
+					for (unsigned currIndex = (unsigned)interleaveLen; currIndex < nc; currIndex += (unsigned)interleaveLen)
+						{
+						nCharsToWrite = ((nc - currIndex) > (unsigned)interleaveLen ? (unsigned)interleaveLen : (nc - currIndex));
+						outf << seq.substr(currIndex, nCharsToWrite) << '\n';
+						}
+					}
+				}
+			else
+				{
+				// not interleaved, and not wrapping
+				for (unsigned i = 0; i < nt; ++i)
+					{
+					const std::string & name = taxaNames[i];
+					std::string seq = cb.GetMatrixRowAsStr(i);
+					if (IsRelaxedPhylipType(f))
+						{
+						sep.clear();
+						sep.append(seqStartColumn - name.length(), ' ');
+						}
+					outf << name << sep << seq << '\n';
+					}
+				}
+			}
+		}
+	else if (IsFastaType(f))
+		{
+		if (interleaveLen < 1)
+			interleaveLen = 60; // default FASTA line length
+		for (unsigned i = 0; i < nt; ++i)
+			{
+			nCharsToWrite = (nc > (unsigned)interleaveLen ? (unsigned)interleaveLen : nc);
+			const std::string & name = taxaNames[i];
+			std::string seq = cb.GetMatrixRowAsStr(i);
+			outf << '>' << name << '\n' << seq.substr(0, nCharsToWrite) << '\n';
+			for (unsigned currIndex = (unsigned)interleaveLen; currIndex < nc; currIndex += (unsigned)interleaveLen)
+				{
+				nCharsToWrite = ((nc - currIndex) > (unsigned)interleaveLen ? (unsigned)interleaveLen : (nc - currIndex));
+				outf << seq.substr(currIndex, nCharsToWrite) << '\n';
+				}
+			}
+		}
+	else
+		{
+		throw NxsException("writeCharactersBlockToStream requested for unsupported format");
+		}
+}
+
+
+
+void openOrThrow(std::ofstream & outf, const std::string &fn)
+    {
+    outf.open(fn.c_str());
+    if (!outf.good())
+        {
+        NxsString msg;
+        msg << "Could not open the file " << fn;
+        throw NxsException(msg);
+        }
+    if (!gQuietMode)
+        std::cerr << "Writing " << fn << '\n';
+    }
+    
+void exportUnalignedBlocks(
+  PublicNexusReader & nexusReader,
+  MultiFormatReader::DataFormatType f,
+  long interleaveLen,
+  std::string prefix, 
+  std::ostream * fp)
+{
+    std::ostream * fpToUse = fp;
+	const unsigned nTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+	for (unsigned t = 0; t < nTaxaBlocks; ++t)
+		{
+		const NxsTaxaBlock * tb = nexusReader.GetTaxaBlock(t);
+		const unsigned nUnalignedBlocks = nexusReader.GetNumUnalignedBlocks(tb);
+		if (nUnalignedBlocks == 0)
+			continue;
+
+		NxsString tbSpecificPrefix;
+		if (t > 0)
+			tbSpecificPrefix << (1 + t);
+		tbSpecificPrefix << prefix << "-unaligned";
+
+		typedef std::pair<const NxsUnalignedBlock *, std::string> PairUBAndString;
+		typedef std::vector< PairUBAndString > VecPairUBAndString;
+		VecPairUBAndString ubToWrite;
+		for (unsigned i = 0; i < nUnalignedBlocks; ++i)
+			{
+			NxsString fn = tbSpecificPrefix;
+			if (i > 0)
+				fn << (1 + i);
+			fn << getFileExtension(f);
+
+			const NxsUnalignedBlock * ub = nexusReader.GetUnalignedBlock(tb, i);
+
+			NxsCharactersBlock::DataTypesEnum dt = ub->GetDataType();
+			bool writeBlock = false;
+            if ((dt == NxsCharactersBlock::dna || dt == NxsCharactersBlock::nucleotide) && (f == MultiFormatReader::FASTA_DNA_FORMAT))
+				writeBlock = true;
+			else if ((dt == NxsCharactersBlock::rna) && (f == MultiFormatReader::FASTA_RNA_FORMAT))
+				writeBlock = true;
+			else if ((dt == NxsCharactersBlock::protein) && (f == MultiFormatReader::FASTA_AA_FORMAT))
+				writeBlock = true;
+
+			if (writeBlock)
+				ubToWrite.push_back(std::pair<const NxsUnalignedBlock *, std::string>(ub, fn));
+			}
+		if (!ubToWrite.empty())
+			{
+			std::vector<std::string> namesToPrint(tb->GetAllLabels());
+			std::vector<NxsNameToNameTrans> nameTrans = nameTranslationDict(namesToPrint, f);
+			if (!nameTrans.empty())
+				{
+				namesToPrint.clear();
+				for (std::vector<NxsNameToNameTrans>::const_iterator nIt = nameTrans.begin(); nIt != nameTrans.end(); ++nIt)
+					namesToPrint.push_back(nIt->second);
+				if (nexusReader.conversionOutputRecord.writeNameTranslationFile)
+				    nexusReader.conversionOutputRecord.writeNameTranslation(nameTrans, tb);
+				}
+
+			for (VecPairUBAndString::const_iterator vIt = ubToWrite.begin(); vIt != ubToWrite.end(); ++vIt)
+				{
+				const NxsUnalignedBlock * ubP = vIt->first;
+				std::string fn = vIt->second;
+				ofstream outf;
+				if (fp == 0L)
+				    {
+				    openOrThrow(outf, fn);
+				    fpToUse = &outf;
+                    }
+                
+				writeUnalignedBlockToStream(*ubP, *fpToUse, namesToPrint, f, interleaveLen);
+				}
+			}
+		}
+}
+
+void exportCharacters(
+  PublicNexusReader & nexusReader,
+  MultiFormatReader::DataFormatType f,
+  long interleaveLen,
+  std::string prefix, 
+  std::ostream * fp)
+{
+    std::ostream * fpToUse = fp;
+	const unsigned nTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+	for (unsigned t = 0; t < nTaxaBlocks; ++t)
+		{
+		const NxsTaxaBlock * tb = nexusReader.GetTaxaBlock(t);
+		const unsigned nCharBlocks = nexusReader.GetNumCharactersBlocks(tb);
+		if (nCharBlocks == 0)
+			continue;
+
+		NxsString tbSpecificPrefix;
+		if (t > 0)
+			tbSpecificPrefix << (1 + t);
+		tbSpecificPrefix << prefix;
+
+		typedef std::pair<const NxsCharactersBlock *, std::string> PairCBAndString;
+		typedef std::vector< PairCBAndString > VecPairCBAndString;
+		VecPairCBAndString cbToWrite;
+		for (unsigned i = 0; i < nCharBlocks; ++i)
+			{
+			NxsString fn = tbSpecificPrefix;
+			if (i > 0)
+				fn << (1 + i);
+			fn << getFileExtension(f);
+
+			const NxsCharactersBlock * cb = nexusReader.GetCharactersBlock(tb, i);
+
+			NxsCharactersBlock::DataTypesEnum dt = cb->GetDataType();
+			bool writeBlock = false;
+			if ((dt == NxsCharactersBlock::standard)
+				&& (f == MultiFormatReader::PHYLIP_DISC_FORMAT
+					|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DISC_FORMAT
+					|| f == MultiFormatReader::RELAXED_PHYLIP_DISC_FORMAT
+					|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT))
+				writeBlock = true;
+			else if ((dt == NxsCharactersBlock::dna || dt == NxsCharactersBlock::nucleotide)
+				&& (f == MultiFormatReader::PHYLIP_DNA_FORMAT
+					|| f == MultiFormatReader::INTERLEAVED_PHYLIP_DNA_FORMAT
+					|| f == MultiFormatReader::FASTA_DNA_FORMAT
+					|| f == MultiFormatReader::RELAXED_PHYLIP_DNA_FORMAT
+					|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT))
+				writeBlock = true;
+			else if ((dt == NxsCharactersBlock::rna)
+				&& (f == MultiFormatReader::PHYLIP_RNA_FORMAT
+					|| f == MultiFormatReader::INTERLEAVED_PHYLIP_RNA_FORMAT
+					|| f == MultiFormatReader::FASTA_RNA_FORMAT
+					|| f == MultiFormatReader::RELAXED_PHYLIP_RNA_FORMAT
+					|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT))
+				writeBlock = true;
+			else if ((dt == NxsCharactersBlock::protein)
+				&& (f == MultiFormatReader::PHYLIP_AA_FORMAT
+					|| f == MultiFormatReader::INTERLEAVED_PHYLIP_AA_FORMAT
+					|| f == MultiFormatReader::FASTA_AA_FORMAT
+					|| f == MultiFormatReader::RELAXED_PHYLIP_AA_FORMAT
+					|| f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT))
+				writeBlock = true;
+
+			if (writeBlock)
+				cbToWrite.push_back(std::pair<const NxsCharactersBlock *, std::string>(cb, fn));
+			}
+		if (!cbToWrite.empty())
+			{
+			std::vector<std::string> namesToPrint(tb->GetAllLabels());
+			std::vector<NxsNameToNameTrans> nameTrans = nameTranslationDict(namesToPrint, f);
+			if (!nameTrans.empty())
+				{
+				namesToPrint.clear();
+				for (std::vector<NxsNameToNameTrans>::const_iterator nIt = nameTrans.begin(); nIt != nameTrans.end(); ++nIt)
+					namesToPrint.push_back(nIt->second);
+				if (nexusReader.conversionOutputRecord.writeNameTranslationFile)
+                    nexusReader.conversionOutputRecord.writeNameTranslation(nameTrans, tb);
+				}
+
+			for (VecPairCBAndString::const_iterator vIt = cbToWrite.begin(); vIt != cbToWrite.end(); ++vIt)
+				{
+				const NxsCharactersBlock * cbP = vIt->first;
+				std::string fn = vIt->second;
+				ofstream outf;
+				if (fp == 0L)
+				    {
+				    openOrThrow(outf, fn);
+                    fpToUse = &outf;
+                    }
+                
+				writeCharactersBlockToStream(*cbP, *fpToUse, namesToPrint, f, interleaveLen);
+				}
+			}
+		}
+}
+
+void exportTrees(
+  PublicNexusReader & nexusReader,
+  MultiFormatReader::DataFormatType f,
+  std::string prefix,
+  std::ostream * fp)
+{
+    std::ostream * fpToUse = fp;
+	const unsigned nTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+	for (unsigned t = 0; t < nTaxaBlocks; ++t)
+		{
+		const NxsTaxaBlock * tb = nexusReader.GetTaxaBlock(t);
+		const unsigned nTreesBlocks = nexusReader.GetNumTreesBlocks(tb);
+		if (nTreesBlocks == 0)
+			continue;
+
+		NxsString tbSpecificPrefix;
+		if (t > 0)
+			tbSpecificPrefix << (1 + t);
+		tbSpecificPrefix << prefix;
+		std::vector<std::string> namesToPrint(tb->GetAllLabels());
+		std::vector<NxsNameToNameTrans> nameTrans = nameTranslationDict(namesToPrint, f);
+		if (!nameTrans.empty())
+			{
+			namesToPrint.clear();
+			for (std::vector<NxsNameToNameTrans>::const_iterator nIt = nameTrans.begin(); nIt != nameTrans.end(); ++nIt)
+				namesToPrint.push_back(nIt->second);
+			if (nexusReader.conversionOutputRecord.writeNameTranslationFile)
+                nexusReader.conversionOutputRecord.writeNameTranslation(nameTrans, tb);
+			}
+
+		for (unsigned i = 0; i < nTreesBlocks; ++i)
+			{
+			NxsString fn = tbSpecificPrefix;
+			if (i > 0)
+				fn << (1 + i);
+			fn << getFileExtension(f);
+
+			const NxsTreesBlock * trb = nexusReader.GetTreesBlock(tb, i);
+
+			ofstream outf;
+			if (fp == 0L)
+			    {
+			    openOrThrow(outf, fn);
+                fpToUse = &outf;
+                }
+            
+			trb->ProcessAllTrees();
+			for (unsigned j = 0; j < trb->GetNumTrees(); ++j)
+				{
+				const NxsFullTreeDescription & ftd = trb->GetFullTreeDescription(j);
+				NxsSimpleTree tree(ftd, -1, -1.0);
+				std::vector<NxsSimpleNode *> & leaves = tree.GetLeavesRef();
+				for (std::vector<NxsSimpleNode *>::const_iterator leafIt = leaves.begin(); leafIt != leaves.end(); ++leafIt)
+					{
+					NxsSimpleNode * leaf = *leafIt;
+					assert(leaf);
+					const std::string name = namesToPrint[leaf->GetTaxonIndex()];
+					if (!gQuietMode)
+                        std::cerr << "Setting name=" << name << '\n';
+					leaf->SetName(name);
+					}
+				tree.WriteAsNewick(*fpToUse, true, true, false, tb);
+				*fpToUse << ";\n";
+				}
+			}
+		}
+}
+
+void exportData(
+  PublicNexusReader & nexusReader,
+  MultiFormatReader::DataFormatType f,
+  long interleaveLen,
+  std::string prefix,
+  std::ostream * fp)
+{
+    std::ostream * fpToUse = fp;
+	std::string fullName = prefix;
+	if (f == MultiFormatReader::NEXUS_FORMAT) {
+		// hack-alert: we don't need to pass in the interleaveLen because it is set as a global in the calling code
+		fullName.append(".nex");
+		std::ofstream nexOut;
+		if (fp == 0L)
+		    {
+		    nexOut.open(fullName.c_str());
+            if (!gQuietMode)
+                std::cerr << "Writing " << fullName << '\n';
+    		fpToUse = &nexOut;
+    		}
+		writeAsNexus(nexusReader, *fpToUse);
+		if (fp == 0L)
+    		nexOut.close();
+	}
+	else if (f == MultiFormatReader::FASTA_DNA_FORMAT
+			 || f == MultiFormatReader::FASTA_AA_FORMAT
+			 || f == MultiFormatReader::FASTA_RNA_FORMAT
+			 || f == MultiFormatReader::PHYLIP_DNA_FORMAT
+			 || f == MultiFormatReader::PHYLIP_RNA_FORMAT
+			 || f == MultiFormatReader::PHYLIP_AA_FORMAT
+//			 || f == MultiFormatReader::PHYLIP_DISC_FORMAT
+			 || f == MultiFormatReader::INTERLEAVED_PHYLIP_DNA_FORMAT
+			 || f == MultiFormatReader::INTERLEAVED_PHYLIP_RNA_FORMAT
+			 || f == MultiFormatReader::INTERLEAVED_PHYLIP_AA_FORMAT
+//			 || f == MultiFormatReader::INTERLEAVED_PHYLIP_DISC_FORMAT
+			 || f == MultiFormatReader::RELAXED_PHYLIP_DNA_FORMAT
+			 || f == MultiFormatReader::RELAXED_PHYLIP_RNA_FORMAT
+			 || f == MultiFormatReader::RELAXED_PHYLIP_AA_FORMAT
+//			 || f == MultiFormatReader::RELAXED_PHYLIP_DISC_FORMAT
+			 || f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT
+			 || f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT
+//			 || f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT
+			 || f == MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT)
+	    {
+		exportCharacters(nexusReader, f, interleaveLen, prefix, fp);
+		if (f == MultiFormatReader::FASTA_DNA_FORMAT
+			 || f == MultiFormatReader::FASTA_AA_FORMAT
+			 || f == MultiFormatReader::FASTA_RNA_FORMAT)
+			 {
+			 exportUnalignedBlocks(nexusReader, f, interleaveLen, prefix, fp);
+			 }
+		}
+	else if (f == MultiFormatReader::PHYLIP_TREE_FORMAT
+			 || f == MultiFormatReader::RELAXED_PHYLIP_TREE_FORMAT)
+		exportTrees(nexusReader, f, prefix, fp);
+	else if (f == MultiFormatReader::NEXML_FORMAT) {
+		fullName.append(".xml");
+		std::ofstream nexOut(fullName.c_str());
+		if (!gQuietMode)
+		    std::cerr << "Writing " << fullName << '\n';
+		writeAsNexml(nexusReader, nexOut);
+		nexOut.close();
+	}
+	else {
+		throw NxsException("export requested for unsupported format");
+	}
+}
diff --git a/example/normalizer/normalizer.cpp b/example/normalizer/normalizer.cpp
new file mode 100644
index 0000000..b57588d
--- /dev/null
+++ b/example/normalizer/normalizer.cpp
@@ -0,0 +1,858 @@
+//	Copyright (C) 2007-2008 Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+/*******************************************************************************
+ * This file contains code for 4 executables:
+ *		NEXUSnormalizer, NEXUSvalidator, NEXUSinspector, and NEX_us2ml
+ *	with conditional compilation used to determine the behavior.
+ *
+ *		* NEXUSnormalizer - writes a NEXUS version of the file with consistent
+ *			ordering of blocks and commands. Ideally 2 equivalent files will
+ *			produce the same normalized output. This version of tthe program is
+ *			less ambitious. The goal is to be able to run (for any valid NEXUS
+ *			in.nex file):
+ *				$ NEXUSnormalizer in.nex > outOrig.nex
+ *				$ NEXUSnormalizer outOrig.nex > outSecond.nex
+ *				$ diff outOrig.nex outSecond.nex
+ *			and find no differences.
+ *		* NEXUSvalidator - reports errors and warnings to stderr. Invalid files
+ *			cause exit with a non-zero return code
+ *		* NEXUSinspector - writes a brief report of every block parsed
+ *		* NEXUS_us2ml - writes a nexml version of the input (partially
+ *			implemented, note that the code to write nexml is in us2ml.cpp).
+ * See the processFilepath() function for an example of how to deal with NCL
+ *	to read a file using the new MultiFormatReader class. When the file
+ *	is correctly read, the processContent() function is called.
+ *
+ * All other code has to do with reading command line arguments and other
+ * 	user-interface concerns.
+ */
+#include "ncl/ncl.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxspublicblocks.h"
+#include "ncl/nxsmultiformat.h"
+#include <cassert>
+using namespace std;
+//#include "ncl/nxscxxdiscretematrix.h"
+
+#if defined(TO_NEXML_CONVERTER) && TO_NEXML_CONVERTER
+	void	writeAsNexml(PublicNexusReader & nexusReader, ostream & os);
+#endif
+
+bool gQuietMode = false;
+std::ofstream gCommonFileStream;
+std::ostream * gCommonOstream = 0L;
+#if defined(NCL_CONVERTER_APP) && NCL_CONVERTER_APP
+	enum ExportFormatEnum
+		{
+		NEXUS_EXPORT_FORMAT,
+		PHYLIP_EXPORT_FORMAT,
+		RELAXED_PHYLIP_EXPORT_FORMAT,
+		FASTA_EXPORT_FORMAT,
+		NEXML_EXPORT_FORMAT,
+		UNSUPPORTED_EXPORT_FORMAT
+		};
+	ExportFormatEnum gExportFormat = NEXML_EXPORT_FORMAT;
+	std::string gExportPrefix("out");
+	ExportFormatEnum readExportFormatName(const std::string &);
+	void exportData(PublicNexusReader & nexusReader, MultiFormatReader::DataFormatType f, long interleavLen, std::string prefix, std::ostream *);
+
+
+	ExportFormatEnum readExportFormatName(const std::string & s)
+	{
+		const char * gExportFormatNames[] = {   "nexus",
+												"phylip",
+												"relaxedphylip",
+												"fasta",
+												"nexml"
+												};
+		const unsigned gNumExportFormats = 5;
+	
+		NxsString l(s.c_str());
+		NxsString::to_lower(l);
+		int ind = NxsString::index_in_array(l, gExportFormatNames, gNumExportFormats);
+		if (ind < 0)
+			return UNSUPPORTED_EXPORT_FORMAT;
+		return ExportFormatEnum(ind);
+	}
+	std::string gNEXUSSafeNamesToWrite;
+	std::string gNEXUSSafeNamesToRead;
+	bool gProduceEvenTrivalTranslation = false;
+	
+	void reverseTranslateNames(PublicNexusReader & reader, std::string filepath);
+	void substituteSafeTaxaLabels(PublicNexusReader & reader, std::string filepath, bool evenTrivial);
+
+	
+#endif  // if defined(NCL_CONVERTER_APP) && NCL_CONVERTER_APP
+
+bool gAltNexus = false;
+
+void writeAsNexus(PublicNexusReader & nexusReader, ostream & os);
+
+long gStrictLevel = 2;
+bool gUnderscoresToSpaces = false;
+bool gValidateInternals = true;
+bool gTreesViaInMemoryStruct = true;
+long gInterleaveLen = -1;
+bool blocksReadInValidation = false;
+bool gSuppressingNameTranslationFile = false;
+bool gAllowNumericInterpretationOfTaxLabels = true;
+enum ProcessActionsEnum
+	{
+	REPORT_BLOCKS,
+	OUTPUT_NORMALIZED_NEXUS,
+	OUTPUT_ANY_FORMAT,
+	OUTPUT_NEXML,
+	VALIDATE_ONLY
+	};
+
+
+void processContent(PublicNexusReader & nexusReader, ostream *os, ProcessActionsEnum currentAction);
+MultiFormatReader * instantiateReader();
+
+#	if defined(MULTIFILE_NEXUS_READER) && MULTIFILE_NEXUS_READER
+	MultiFormatReader * gNexusReader = NULL;
+#	endif
+
+
+void reportNexusStats(const PublicNexusReader & nexusReader, ostream *os)
+{
+	if (!os)
+		return;
+
+	const unsigned nTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+	*os <<  nTaxaBlocks << " taxa block(s) read.\n";
+	for (unsigned t = 0; t < nTaxaBlocks; ++t)
+		{
+		NxsTaxaBlock * tb = nexusReader.GetTaxaBlock(t);
+		*os << "Taxa block #" << t + 1 << ".\n";
+		tb->Report(*os);
+		const unsigned nCharBlocks = nexusReader.GetNumCharactersBlocks(tb);
+		*os <<  nCharBlocks << " Characters/Data block(s) read that link to this Taxa block.\n";
+		for (unsigned i = 0; i < nCharBlocks; ++i)
+			{
+			NxsCharactersBlock * cb = nexusReader.GetCharactersBlock(tb, i);
+
+			//NxsCXXDiscreteMatrix mat(*cb, true);
+
+			*os << "Character block #" << i + 1 << " for this Taxa block.\n";
+			cb->Report(*os);
+			const unsigned nAssumpBlocks = nexusReader.GetNumAssumptionsBlocks(cb);
+			*os <<  nAssumpBlocks << " Assumptions block(s) read that link to this Characters block.\n";
+			for (unsigned j= 0; j < nAssumpBlocks; ++j)
+				{
+				NxsAssumptionsBlock * ab = nexusReader.GetAssumptionsBlock(cb, j);
+				*os << "Assumptions block #" << j + 1 << " for this Characters block.\n";
+				ab->Report(*os);
+				}
+			}
+		const unsigned nTreesBlocks = nexusReader.GetNumTreesBlocks(tb);
+		*os <<  nTreesBlocks << " Trees/Data block(s) read that link to this Taxa block.\n";
+		for (unsigned i = 0; i < nTreesBlocks; ++i)
+			{
+			NxsTreesBlock * cb = nexusReader.GetTreesBlock(tb, i);
+			*os << "Trees block #" << i + 1 << " for this Taxa block.\n";
+			cb->Report(*os);
+			const unsigned nAssumpBlocks = nexusReader.GetNumAssumptionsBlocks(cb);
+			*os <<  nAssumpBlocks << " Assumptions block(s) read that link to this Trees block.\n";
+			for (unsigned j= 0; j < nAssumpBlocks; ++j)
+				{
+				NxsAssumptionsBlock * ab = nexusReader.GetAssumptionsBlock(cb, j);
+				*os << "Assumptions block #" << j + 1 << " for this Trees block.\n";
+				ab->Report(*os);
+				}
+			}
+		const unsigned nAssumpBlocks = nexusReader.GetNumAssumptionsBlocks(tb);
+		*os <<  nAssumpBlocks << " Assumptions block(s) read that link to this Taxa block.\n";
+		for (unsigned j= 0; j < nAssumpBlocks; ++j)
+			{
+			NxsAssumptionsBlock * ab = nexusReader.GetAssumptionsBlock(tb, j);
+			*os << "Assumptions block #" << j + 1 << " for this Taxa block.\n";
+			ab->Report(*os);
+			}
+		const unsigned nDistancesBlocks = nexusReader.GetNumDistancesBlocks(tb);
+		*os <<  nDistancesBlocks << " Distances block(s) read that link to this Taxa block.\n";
+		for (unsigned j= 0; j < nDistancesBlocks; ++j)
+			{
+			NxsDistancesBlock * ab = nexusReader.GetDistancesBlock(tb, j);
+			*os << "Distances block #" << j + 1 << " for this Taxa block.\n";
+			ab->Report(*os);
+			}
+		const unsigned nUnalignedBlocks = nexusReader.GetNumUnalignedBlocks(tb);
+		*os <<  nUnalignedBlocks << " Unaligned block(s) read that link to this Taxa block.\n";
+		for (unsigned j= 0; j < nUnalignedBlocks; ++j)
+			{
+			NxsUnalignedBlock * ab = nexusReader.GetUnalignedBlock(tb, j);
+			*os << "Unaligned block #" << j + 1 << " for this Taxa block.\n";
+			ab->Report(*os);
+			}
+		*os << "\n\n";
+		}
+	const unsigned nUnknown = nexusReader.GetNumUnknownBlocks();
+	*os <<  nUnknown << " private block(s) read.\n";
+	for (unsigned t = 0; t < nUnknown; ++t)
+		{
+		NxsStoreTokensBlockReader * ub = nexusReader.GetUnknownBlock(t);
+		*os << "Private block #" << t + 1 << " is a " << ub->GetID() << " block.\n";
+		}
+}
+
+
+void writeAsNexus(PublicNexusReader & nexusReader, ostream & os)
+{
+	BlockReaderList blocks = nexusReader.GetUsedBlocksInOrder();
+	os << "#NEXUS\n";
+	for (BlockReaderList::const_iterator bIt = blocks.begin(); bIt != blocks.end(); ++bIt)
+		{
+		NxsBlock * b = *bIt;
+		if (b)
+			b->WriteAsNexus(os);
+		}
+}
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Takes NxsReader that has successfully read a file, and processes the
+//	information stored in the reader.
+//
+// The caller is responsibel for calling DeleteBlocksFromFactories() to clean
+//	up (if the reader uses the factory API).
+////////////////////////////////////////////////////////////////////////////////
+void processContent(PublicNexusReader & nexusReader, ostream *os, ProcessActionsEnum currentAction)
+	{
+	BlockReaderList blocks = nexusReader.GetUsedBlocksInOrder();
+
+	if (currentAction == REPORT_BLOCKS)
+		reportNexusStats(nexusReader, os);
+	else if (OUTPUT_NORMALIZED_NEXUS == currentAction && os)
+		{
+		writeAsNexus(nexusReader, *os);
+		}
+	else if (OUTPUT_NEXML == currentAction && os)
+		{
+#		if defined(TO_NEXML_CONVERTER) && TO_NEXML_CONVERTER
+			writeAsNexml(nexusReader, *os);
+#		else
+			cerr << "Error nexml conversion not implemented\n";
+			exit(1);
+#		endif
+		}
+	else if (OUTPUT_ANY_FORMAT == currentAction && os)
+		{
+#		if defined(NCL_CONVERTER_APP) && NCL_CONVERTER_APP
+			if (!gNEXUSSafeNamesToRead.empty()) {
+				reverseTranslateNames(nexusReader, gNEXUSSafeNamesToRead);
+			}
+			else if (!gNEXUSSafeNamesToWrite.empty()) {
+				substituteSafeTaxaLabels(nexusReader, gNEXUSSafeNamesToWrite, gProduceEvenTrivalTranslation);
+			}
+
+
+			std::string fullExportPrefix;
+			MultiFormatReader::DataFormatType f = MultiFormatReader::NEXUS_FORMAT;
+			if (gExportFormat == NEXUS_EXPORT_FORMAT)
+				exportData(nexusReader, MultiFormatReader::NEXUS_FORMAT, gInterleaveLen, gExportPrefix, gCommonOstream);
+			else if (gExportFormat == NEXML_EXPORT_FORMAT)
+				exportData(nexusReader, MultiFormatReader::NEXML_FORMAT, gInterleaveLen, gExportPrefix, gCommonOstream);
+			else if (gExportFormat == PHYLIP_EXPORT_FORMAT) {
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".dna");
+				f = (gInterleaveLen < 0 ? MultiFormatReader::PHYLIP_DNA_FORMAT : MultiFormatReader::INTERLEAVED_PHYLIP_DNA_FORMAT);
+				exportData(nexusReader, f, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".rna");
+				f = (gInterleaveLen < 0 ? MultiFormatReader::PHYLIP_RNA_FORMAT : MultiFormatReader::INTERLEAVED_PHYLIP_RNA_FORMAT);
+				exportData(nexusReader, f, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".aa");
+				f = (gInterleaveLen < 0 ? MultiFormatReader::PHYLIP_AA_FORMAT : MultiFormatReader::INTERLEAVED_PHYLIP_AA_FORMAT);
+				exportData(nexusReader, f, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				//fullExportPrefix = gExportPrefix;
+				//fullExportPrefix.append(".discrete");
+				//f = (gInterleaveLen < 0 ? MultiFormatReader::PHYLIP_DISC_FORMAT : MultiFormatReader::INTERLEAVED_PHYLIP_DISC_FORMAT);
+				//exportData(nexusReader, f, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				exportData(nexusReader, MultiFormatReader::PHYLIP_TREE_FORMAT, gInterleaveLen, fullExportPrefix, gCommonOstream);
+			}
+			else if (gExportFormat == RELAXED_PHYLIP_EXPORT_FORMAT) {
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".dna");
+				f = (gInterleaveLen < 0 ? MultiFormatReader::RELAXED_PHYLIP_DNA_FORMAT : MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT);
+				exportData(nexusReader, f, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".rna");
+				f = (gInterleaveLen < 0 ? MultiFormatReader::RELAXED_PHYLIP_RNA_FORMAT : MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT);
+				exportData(nexusReader, f, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".aa");
+				f = (gInterleaveLen < 0 ? MultiFormatReader::RELAXED_PHYLIP_AA_FORMAT : MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT);
+				exportData(nexusReader, f, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				//fullExportPrefix = gExportPrefix;
+				//fullExportPrefix.append(".discrete");
+				//f = (gInterleaveLen < 0 ? MultiFormatReader::RELAXED_PHYLIP_DISC_FORMAT : MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT);
+				//exportData(nexusReader, f, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				exportData(nexusReader, MultiFormatReader::RELAXED_PHYLIP_TREE_FORMAT, gInterleaveLen, fullExportPrefix, gCommonOstream);
+			}
+			else if (gExportFormat == FASTA_EXPORT_FORMAT) {
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".dna");
+				exportData(nexusReader,  MultiFormatReader::FASTA_DNA_FORMAT, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".rna");
+				exportData(nexusReader,  MultiFormatReader::FASTA_RNA_FORMAT, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				fullExportPrefix.append(".aa");
+				exportData(nexusReader,  MultiFormatReader::FASTA_AA_FORMAT, gInterleaveLen, fullExportPrefix, gCommonOstream);
+
+				fullExportPrefix = gExportPrefix;
+				exportData(nexusReader, MultiFormatReader::RELAXED_PHYLIP_TREE_FORMAT, gInterleaveLen, fullExportPrefix, gCommonOstream);
+			}
+			else {
+				cerr << "Unsupported export format requested.\n";
+				exit(1);
+			}
+#		else
+			cerr << "Exporting to any format is implemented by this executable.\n";
+			exit(1);
+#		endif
+		}
+	else if (VALIDATE_ONLY == currentAction)
+		{
+		if (!blocks.empty())
+			blocksReadInValidation = true;
+		}
+	}
+
+
+MultiFormatReader * instantiateReader()
+{
+	MultiFormatReader * nexusReader = new MultiFormatReader(-1, NxsReader::WARNINGS_TO_STDERR);
+	if (gQuietMode)
+		nexusReader->SetWarningOutputLevel(NxsReader::SKIPPING_CONTENT_WARNING);
+	if (gStrictLevel != 2)
+		nexusReader->SetWarningToErrorThreshold((int)NxsReader::FATAL_WARNING + 1 - (int) gStrictLevel);
+	if (gUnderscoresToSpaces) 
+		nexusReader->SetCoerceUnderscoresToSpaces(true);
+	NxsCharactersBlock * charsB = nexusReader->GetCharactersBlockTemplate();
+	NxsDataBlock * dataB = nexusReader->GetDataBlockTemplate();
+	charsB->SetAllowAugmentingOfSequenceSymbols(true);
+	dataB->SetAllowAugmentingOfSequenceSymbols(true);
+	if (gInterleaveLen > 0)
+		{
+		assert(charsB);
+		charsB->SetWriteInterleaveLen(gInterleaveLen);
+		dataB->SetWriteInterleaveLen(gInterleaveLen);
+		}
+
+	NxsTreesBlock * treesB = nexusReader->GetTreesBlockTemplate();
+	assert(treesB);
+	if (gStrictLevel < 2)
+		treesB->SetAllowImplicitNames(true);
+	treesB->SetWriteFromNodeEdgeDataStructure(gTreesViaInMemoryStruct);
+	treesB->setValidateInternalNodeLabels(gValidateInternals);
+	treesB->setAllowNumericInterpretationOfTaxLabels(gAllowNumericInterpretationOfTaxLabels);
+	if (gAltNexus)
+		treesB->setWriteTranslateTable(false);
+	if (gStrictLevel < 2)
+		{
+		NxsStoreTokensBlockReader *storerB =  nexusReader->GetUnknownBlockTemplate();
+		assert(storerB);
+		storerB->SetTolerateEOFInBlock(true);
+		}
+	nexusReader->conversionOutputRecord.addNumbersToDisambiguateNames = true;
+	
+	if (gSuppressingNameTranslationFile)
+		nexusReader->conversionOutputRecord.writeNameTranslationFile = false;
+	return nexusReader;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Creates a NxsReader, and tries to read the file `filename`.  If the
+//	read succeeds, then processContent will be called.
+//	\returns 0 on success
+////////////////////////////////////////////////////////////////////////////////
+#if !defined(MULTIFILE_NEXUS_READER) ||  !MULTIFILE_NEXUS_READER
+	int processFilepath(
+		const char * filename, // name of the file to be read
+		ostream * os, // output stream to use (NULL for no output). Not that cerr is used to report errors.
+		MultiFormatReader::DataFormatType fmt, // enum indicating the file format to expect.
+		ProcessActionsEnum currentAction) // enum that is passed on to processContent to indicate what should be done with the content of the file.
+#else
+	int processFilepath(
+		const char * filename, // name of the file to be read
+		ostream * , // output stream to use (NULL for no output). Not that cerr is used to report errors.
+		MultiFormatReader::DataFormatType fmt, // enum indicating the file format to expect.
+		ProcessActionsEnum ) // enum that is passed on to processContent to indicate what should be done with the content of the file.
+#endif 
+	{
+	assert(filename);
+	try
+		{
+		MultiFormatReader * nexusReader;
+#		if defined(MULTIFILE_NEXUS_READER) && MULTIFILE_NEXUS_READER
+			nexusReader = gNexusReader;
+#		else
+			nexusReader = instantiateReader();
+#		endif
+
+		if (!gQuietMode)
+			cerr << "Executing" << endl;
+		try {
+			nexusReader->DemoteBlocks();
+			nexusReader->ReadFilepath(filename, fmt);
+#			if !defined(MULTIFILE_NEXUS_READER) ||  !MULTIFILE_NEXUS_READER
+				processContent(*nexusReader, os, currentAction);
+#			endif
+			}
+		catch(...)
+			{
+			nexusReader->DeleteBlocksFromFactories();
+#			if ! defined(MULTIFILE_NEXUS_READER) || !MULTIFILE_NEXUS_READER
+				delete nexusReader;
+#			endif
+			throw;
+			}
+#		if !defined(MULTIFILE_NEXUS_READER) ||  !MULTIFILE_NEXUS_READER
+			nexusReader->DeleteBlocksFromFactories();
+			delete nexusReader;
+#		endif
+		return 0;
+		}
+	catch (const NxsException &x)
+		{
+		cerr << "Error:\n " << x.msg << endl;
+		if (x.line > 0 || x.pos > 0)
+			cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << endl;
+		return 2;
+		}
+	}
+
+/*! \returns 0 on success*/
+int readFilepathAsNEXUS(const char *filename, MultiFormatReader::DataFormatType fmt, ProcessActionsEnum currentAction)
+	{
+	if (!gQuietMode)
+		cerr << "[Reading " << filename << "	 ]" << endl;
+	try {
+		ostream * outStream = 0L;
+		if (currentAction != VALIDATE_ONLY)
+			outStream = &cout;
+		return processFilepath(filename, outStream, fmt, currentAction);
+
+		}
+	catch (...)
+		{
+		cerr << "Normalizing of " << filename << " failed (with an exception)" << endl;
+		return 1;
+		}
+	}
+
+/*! \returns 0 on success*/
+int readFilesListedIsFile(const char *masterFilepath, MultiFormatReader::DataFormatType fmt, ProcessActionsEnum currentAction)
+	{
+	ifstream masterStream(masterFilepath, ios::binary);
+	if (masterStream.bad())
+		{
+		cerr << "Could not open " << masterFilepath << "." << endl;
+		exit(3);
+		}
+	char filename[1024];
+	while ((!masterStream.eof())  && masterStream.good())
+		{
+		masterStream.getline(filename, 1024);
+		if (strlen(filename) > 0 && filename[0] != '#')
+			{
+			int rc = readFilepathAsNEXUS(filename, fmt, currentAction);
+			if (rc != 0)
+				return rc;
+			}
+		}
+	return 0;
+	}
+
+#if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+	const char * gExeName = "NEXUSvalidator";
+#elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+	const char * gExeName = "NEXUSinspector";
+#elif defined(NCL_CONVERTER_APP) && NCL_CONVERTER_APP
+	const char * gExeName = "NCLconverter";
+#else
+#	if defined(MULTIFILE_NEXUS_READER) && MULTIFILE_NEXUS_READER
+		const char * gExeName = "NEXUSunion";
+#	else
+		const char * gExeName = "NEXUSnormalizer";
+#	endif
+# endif
+	
+void printHelp(ostream & out)
+	{
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		out << "NEXUSvalidator takes reads a file and exits with a success (return code 0) if the file is valid.\n";
+#	elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+		out << "NEXUSinspector takes reads a file and writes a report of the content to standard out.\n";
+#	elif defined(NCL_CONVERTER_APP) && NCL_CONVERTER_APP
+		out << "NCLconverter takes reads a file and writes a report of the content to a file prefix (specified with the -o flag) in the chosen output format (specified with the -e flag).\n";
+#	else
+#		if defined(MULTIFILE_NEXUS_READER) && MULTIFILE_NEXUS_READER
+			out << "NEXUSunion reads a series of NEXUS file and writes the union of all of their content to standard out (using the NEXUSnormalizer conventions of indentation and syntax).\n";
+#		else
+			out << "NEXUSnormalizer takes reads a file and rewrites the file to standard out with consistent indentation and syntax.\n";
+#		endif
+# 	endif
+	out << "\nThe most common usage is simply:\n    " << gExeName << " <path to NEXUS file>\n";
+	out << "\nCommand-line flags:\n\n";
+	out << "    -h on the command line shows this help message\n\n";
+	out << "    -q suppress NCL status messages while reading files\n\n";
+	out << "    -l<path> reads a file and treats each line of the file as a path to NEXUS file\n\n";
+	out << "    -a output AltNexus (no translation table in trees)\n\n";
+	out << "    -x do NOT validate internal labels in trees as taxa labels\n\n";
+	out << "    -X do NOT treat numbers in trees as taxon numbers, treat them as arbitrary\n        labels (should not be used with NEXUS files).\n\n";
+	out << "    -s<non-negative integer> controls the NEXUS strictness level.\n";
+	out << "        the default level is equivalent to -s2 invoking the program with \n";
+	out << "        -s3 or a higher number will convert some warnings into fatal errors.\n";
+	out << "        Running with -s1 will cause the parser to accept dangerous constructs,\n";
+	out << "        and running with -s0 will cause the parser make every attempt to finish\n";
+	out << "        parsing the file (warning about very serious errors).\n\n";
+	out << "        Note that when -s0 strictness level is used, and the parser fails to\n";
+	out << "        finish, it will often be the result of an earlier error than the \n";
+	out << "        error that is reported in the last message.\n";
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		//pass
+#	elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+		//pass
+#	elif defined(TO_NEXML_CONVERTER) && TO_NEXML_CONVERTER
+		//pass
+#	else
+		out << "    -i<number> specifies the length of the interleaved pages to create\n";
+#	endif
+	out << "    -f<format> specifies the input file format expected:\n";
+	out << "            -fnexus     NEXUS (this is also the default)\n";
+	out << "            -faafasta   Amino acid data in fasta\n";
+	out << "            -fdnafasta  DNA data in fasta\n";
+	out << "            -frnafasta  RNA data in fasta\n";
+	out << "        The complete list of format names that can follow the -f flag is:\n";
+	std::vector<std::string> fmtNames =  MultiFormatReader::getFormatNames();
+	for (std::vector<std::string>::const_iterator n = fmtNames.begin(); n != fmtNames.end(); ++n)
+		{
+		out << "            "<< *n << "\n";
+		}
+#	if defined(NCL_CONVERTER_APP) && NCL_CONVERTER_APP
+		out << "    -e<format> specifies the output file format expected:\n";
+		out << "            -enexus  \"normalized\" NEXUS output\n";
+		out << "            -efasta  Character data in fasta (could result in multiple output files)\n";
+		out << "            -ephylip  Trees and character data in phylip (could result in multiple output files)\n";
+		out << "            -erelaxedphylip  Trees and character data in relaxed phylip (could result in multiple output files)\n";
+		out << "            -enexml  nexml output (this is also the default)\n";
+		out << "    -o<fn> specifies the output prefix.  An appropriate suffix and extension are added\n";
+		out << "    -d<fn> specifies the single output destination. Or you can use -d- to indicate that\n";
+		out << "             output should be directed to standard output.Warning use of this option may result\n";
+		out << "             in an invalid output due to concatenation of separate \"blocks\" of information\n";
+		out << "             into a single file!  \n";
+		out << "    -u     converts underscores to spaces in formats other than NEXUS.\n";
+		out << "    -y<filename> translate to \"safe\" taxon names and store the new names as a NEXUS.\n";
+		out << "             file called <filename> with a TaxaAssociation block. The first taxa block\n";
+		out << "             in the association block will hold the original names, and the second will\n";
+		out << "             hold the \"safe\" names\n";
+		out << "    -Y<filename> behaves like -y, except with -Y a translation file will be produced even";
+		out << "             if the original names were already \"safe\"\n";
+		out << "    -z<filename> use the NEXUS-formatted file called <filename> with a TaxaAssociation block\n";
+		out << "             to restore original names.  Assumes that the first taxa block in the TaxaAssociation\n";
+		out << "             block holds the original name and the second is the current name. This function\n";
+		out << "             is useful for \"undoing\" the effects of the -y option.\n";
+		out << "    -j     Suppress the creation of a NameTranslationFile\n";
+#	endif
+	}
+
+int do_main(int argc, char *argv[])
+	{
+	NxsReader::setNCLCatchesSignals(true);
+	MultiFormatReader::DataFormatType f(MultiFormatReader::NEXUS_FORMAT);
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		ProcessActionsEnum currentAction = VALIDATE_ONLY;
+#	elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+		ProcessActionsEnum currentAction = REPORT_BLOCKS;
+#	elif defined(NCL_CONVERTER_APP) && NCL_CONVERTER_APP
+		ProcessActionsEnum currentAction = OUTPUT_ANY_FORMAT;
+#	elif defined(TO_NEXML_CONVERTER) && TO_NEXML_CONVERTER
+		ProcessActionsEnum currentAction = OUTPUT_NEXML;
+#	else
+		ProcessActionsEnum currentAction = OUTPUT_NORMALIZED_NEXUS;
+# 	endif
+
+	for (int i = 1; i < argc; ++i)
+		{
+		const char * filepath = argv[i];
+		const unsigned slen = strlen(filepath);
+		if (slen < 2 || filepath[0] != '-')
+			continue;
+		if (filepath[1] == 'h')
+			{
+			printHelp(cout);
+			return 1;
+			}
+		else if (filepath[1] == 'q')
+			gQuietMode = true;
+		else if (filepath[1] == 'x')
+			gValidateInternals = false;
+		else if (filepath[1] == 'X')
+			gAllowNumericInterpretationOfTaxLabels = false;
+		else if (filepath[1] == 'u')
+			gUnderscoresToSpaces = true;
+		else if (filepath[1] == 'j')
+			gSuppressingNameTranslationFile = true;
+		else if (filepath[1] == 's')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gStrictLevel)))
+				{
+				cerr << "Expecting an integer after -s\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		//pass
+#	elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+		//pass
+#	elif defined(TO_NEXML_CONVERTER) && TO_NEXML_CONVERTER
+		//pass
+#	else
+		else if (filepath[1] == 'i')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gInterleaveLen)) || gInterleaveLen < 1)
+				{
+				cerr << "Expecting a positive integer after -i\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+		else if (filepath[1] == 'a')
+			{
+			if ((slen != 2))
+				{
+				cerr << "Not expecting a value after -a\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			gAltNexus = true;
+			}
+#	endif
+#	if defined(NCL_CONVERTER_APP) && NCL_CONVERTER_APP
+		else if (filepath[1] == 'e') {
+			if (slen > 2)
+				{
+				std::string efmtName(filepath + 2, slen - 2);
+				gExportFormat = readExportFormatName(efmtName);
+				}
+			if (f == MultiFormatReader::UNSUPPORTED_FORMAT)
+				{
+				cerr << "Expecting a format after -e\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+		}
+		else if (filepath[1] == 'o') {
+			if (slen > 2)
+				{
+				std::string oname(filepath + 2, slen - 2);
+				gExportPrefix = oname;
+				}
+			if (gExportPrefix.empty())
+				{
+				cerr << "Expecting an output file prefix after -o\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+		}
+		else if (filepath[1] == 'd') {
+			if (slen > 2)
+				{
+				if (gCommonOstream != 0)
+					{
+					cerr << "Expecting only one -d flag per invocation.\n" << endl;
+					return 2;
+					}
+				std::string dname(filepath + 2, slen - 2);
+				if (dname == "-")
+					gCommonOstream = &std::cout;
+				else
+					{
+					gCommonFileStream.open(dname.c_str());
+					if (!gCommonFileStream.good())
+						{
+						cerr << "Error opening " << dname << ".\n" << flush;
+						return 2;
+						}
+					if (!gQuietMode) {
+						cerr << "Directing all output to " << dname << ".\n" << flush;
+					}
+					gCommonOstream = & gCommonFileStream;
+					}
+				}
+			if (f == MultiFormatReader::UNSUPPORTED_FORMAT)
+				{
+				cerr << "Expecting an output file prefix after -o\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+		}
+		else if (filepath[1] == 'y' || filepath[1] == 'Y') {
+			if (slen > 2)
+				{
+				std::string oname(filepath + 2, slen - 2);
+				if (!gNEXUSSafeNamesToRead.empty()) 
+					{
+					cerr << "The -y and -z options cannot both be specified!\n" << endl;
+					printHelp(cerr);
+					return 2;
+					}
+				if (!gNEXUSSafeNamesToWrite.empty()) 
+					{
+					cerr << "The -y only be specified once per invocation!\n" << endl;
+					printHelp(cerr);
+					return 2;
+					}
+				gNEXUSSafeNamesToWrite = oname;
+				if (gNEXUSSafeNamesToWrite.empty())
+					{
+					cerr << "Expecting an output file prefix after -o\n" << endl;
+					printHelp(cerr);
+					return 2;
+					}
+				}
+				if (filepath[1] == 'Y')
+					gProduceEvenTrivalTranslation = true;
+		}
+		else if (filepath[1] == 'z') {
+			if (slen > 2)
+				{
+				std::string oname(filepath + 2, slen - 2);
+				if (!gNEXUSSafeNamesToWrite.empty()) 
+					{
+					cerr << "The -y and -z options cannot both be specified!\n" << endl;
+					printHelp(cerr);
+					return 2;
+					}
+				if (!gNEXUSSafeNamesToRead.empty()) 
+					{
+					cerr << "The -z only be specified once per invocation!\n" << endl;
+					printHelp(cerr);
+					return 2;
+					}
+				gNEXUSSafeNamesToRead = oname;
+				if (gNEXUSSafeNamesToRead.empty())
+					{
+					cerr << "Expecting an output file prefix after -o\n" << endl;
+					printHelp(cerr);
+					return 2;
+					}
+				}
+		}
+#	endif
+		else if (filepath[1] == 'f')
+			{
+			f = MultiFormatReader::UNSUPPORTED_FORMAT;
+			if (slen > 2)
+				{
+				std::string fmtName(filepath + 2, slen - 2);
+				f =  MultiFormatReader::formatNameToCode(fmtName);
+				if (f == MultiFormatReader::UNSUPPORTED_FORMAT)
+					{
+					cerr << "Unknown format \"" << fmtName << "\" after -f\n" << endl;
+					printHelp(cerr);
+					return 3;
+					}
+				}
+			if (f == MultiFormatReader::UNSUPPORTED_FORMAT)
+				{
+				cerr << "Expecting a format after -f\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+		}
+
+#	if defined(MULTIFILE_NEXUS_READER) && MULTIFILE_NEXUS_READER
+		gNexusReader = instantiateReader();
+		gNexusReader->cullIdenticalTaxaBlocks(true);
+#	endif
+	bool readfile = false;
+	for (int i = 1; i < argc; ++i)
+		{
+		const char * filepath = argv[i];
+		const unsigned slen = strlen(filepath);
+		if (slen < 1)
+			continue;
+		if (strlen(filepath) > 2 && filepath[0] == '-' && filepath[1] == 'l')
+			{
+			readfile = true;
+			int rc = readFilesListedIsFile(filepath+2, f, currentAction);
+			if (rc != 0)
+				return rc;
+			}
+		else if (filepath[0] != '-')
+			{
+			readfile = true;
+			int rc = readFilepathAsNEXUS(filepath, f, currentAction);
+			if (rc != 0)
+				return rc;
+			}
+		}
+#	if defined(MULTIFILE_NEXUS_READER) && MULTIFILE_NEXUS_READER
+		if (gNexusReader)
+			{
+			processContent(*gNexusReader, &std::cout, OUTPUT_NORMALIZED_NEXUS);
+			gNexusReader->DeleteBlocksFromFactories();
+			delete gNexusReader;
+			}
+#	endif
+
+	if (!readfile)
+		{
+		cerr << "Expecting the path to NEXUS file as the only command line argument!\n" << endl;
+		printHelp(cerr);
+		return 1;
+		}
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		if (blocksReadInValidation)
+			return  0;
+		std::cerr << "No blocks read\n";
+		return 1;
+#	else
+		return 0;
+#	endif
+	}
+
+int main(int argc, char *argv[])
+	{
+	int rc = do_main(argc, argv);
+	if (gCommonOstream != 0L && gCommonOstream == &gCommonFileStream)
+		gCommonFileStream.close();
+	return rc;
+	}
diff --git a/example/normalizer/normalizer.h b/example/normalizer/normalizer.h
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/example/normalizer/normalizer.h
@@ -0,0 +1 @@
+
diff --git a/example/normalizer/us2ml.cpp b/example/normalizer/us2ml.cpp
new file mode 100644
index 0000000..6a67f2b
--- /dev/null
+++ b/example/normalizer/us2ml.cpp
@@ -0,0 +1,866 @@
+//	Copyright (C) 2007-2008 Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#include <cstdio>
+#include <cassert>
+#include "ncl/ncl.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxspublicblocks.h"
+#if defined HAVE_CONFIG
+#	include "config.h"
+#endif
+#if ! defined(NCL_NAME_AND_VERSION)
+#	define NCL_NAME_AND_VERSION "NCL unknown version"
+#endif
+using namespace std;
+
+void writeAsNexml(PublicNexusReader & nexusReader, ostream & os);
+
+
+class NexmlIDStrorer;
+
+typedef std::pair<const NxsDiscreteDatatypeMapper *, std::vector<std::string> > MapperStateLabelVec;
+template <typename T>
+std::string getOrGenId(std::pair<T, unsigned> & p, std::map<T, std::string> & toId, std::map<std::string, T> & toObj, const std::string & pref);
+
+typedef std::pair<const NxsTaxaBlock *, unsigned> TaxaBlockPtrIndPair;
+typedef std::pair<const NxsCharactersBlock *, unsigned> CharBlockPtrIndPair;
+typedef std::pair<const NxsTreesBlock *, unsigned> TreesBlockPtrIndPair;
+typedef std::pair<MapperStateLabelVec, unsigned> MapperStateLabelVecIndPair;
+
+void writeOTUS(ostream & os, const NxsTaxaBlock *, const std::vector<const NxsAssumptionsBlock *> & assumps, NexmlIDStrorer &, unsigned );
+void writeCharacters(ostream & os, const NxsCharactersBlock *, const std::vector<const NxsAssumptionsBlock *> & assumps, NexmlIDStrorer &, unsigned);
+void writeTrees(ostream & os, const NxsTreesBlock *, const std::vector<const NxsAssumptionsBlock *> & assumps, NexmlIDStrorer &, unsigned);
+
+typedef std::pair<std::string, std::string> AttributeData;
+typedef std::vector<AttributeData> AttributeDataVec;
+
+void writeAttribute(std::ostream & out, const AttributeData & aIt);
+
+
+
+
+std::string generateID(std::string prefix, unsigned n)
+	{
+	char tmp[81];
+	sprintf(tmp, "%u", n);
+	prefix.append(tmp);
+	return prefix;
+	}
+
+
+template <typename T>
+std::string getOrGenId(std::pair<T, unsigned> & p, std::map<T, std::string> & toId, std::map<std::string, T> & toObj, const std::string & pref)
+{
+	typedef typename std::map<T, std::string>::const_iterator ToIDIterator;
+	T & t = p.first;
+	ToIDIterator f = toId.find(t);
+	if (f == toId.end())
+		{
+		unsigned index = p.second;
+		if (index == UINT_MAX)
+			{
+			cerr << "could not find ID for NEXUS object";
+			exit(3);
+			}
+		std::string identifier;
+		do
+			{
+			identifier = generateID(pref, index++);
+			}
+		while (toObj.find(identifier) != toObj.end());
+		toId[t] = identifier;
+		toObj[identifier] = t;
+		return identifier;
+		}
+	return f->second;
+}
+
+
+class NexmlIDStrorer
+	{
+	public:
+
+		std::string getID(TaxaBlockPtrIndPair taxa)
+			{
+			const std::string pref("t");
+			return getOrGenId<const NxsTaxaBlock *>(taxa, taxaBToID, idToTaxaB, pref);
+			}
+		std::string getID(CharBlockPtrIndPair chars)
+			{
+			const std::string pref("c");
+			return getOrGenId<const NxsCharactersBlock *>(chars, charsBToID, idToCharsB, pref);
+			}
+		std::string getID(TreesBlockPtrIndPair trees)
+			{
+			const std::string pref("g");
+			return getOrGenId<const NxsTreesBlock *>(trees, treesBToID, idToTreesB, pref);
+			}
+		std::string getID(TaxaBlockPtrIndPair taxa, unsigned taxonInd)
+			{
+			const std::string pref("t");
+			std::string p =  getOrGenId<const NxsTaxaBlock *>(taxa, taxaBToID, idToTaxaB, pref);
+			p.append(1, 'n');
+			return generateID(p, taxonInd);
+			}
+		std::string getCharID(CharBlockPtrIndPair chars, unsigned charInd)
+			{
+			const std::string pref("c");
+			std::string p =  getOrGenId<const NxsCharactersBlock *>(chars, charsBToID, idToCharsB, pref);
+			p.append(1, 'n');
+			return generateID(p, charInd);
+			}
+		std::string getID(CharBlockPtrIndPair chars, unsigned charInd)
+			{
+			const std::string pref("r");
+			std::string p =  getOrGenId<const NxsCharactersBlock *>(chars, charsBToID, idToCharsB, pref);
+			p.append(1, 'n');
+			return generateID(p, charInd);
+			}
+		std::string getID(TreesBlockPtrIndPair trees, unsigned treeInd)
+			{
+			const std::string pref("g");
+			std::string p =  getOrGenId<const NxsTreesBlock *>(trees, treesBToID, idToTreesB, pref);
+			p.append(1, 'n');
+			return generateID(p, treeInd);
+			}
+		std::string getID(MapperStateLabelVecIndPair m, unsigned sIndex)
+			{
+			const std::string pref("s");
+			std::string p =  getOrGenId<MapperStateLabelVec>(m, mapperToID, idToMapper, pref);
+			p.append(1, 'n');
+			return generateID(p, sIndex);
+			}
+
+
+	protected:
+		std::map<const NxsTaxaBlock *, std::string> taxaBToID;
+		std::map<std::string, const NxsTaxaBlock *> idToTaxaB;
+		std::map<const NxsCharactersBlock *, std::string> charsBToID;
+		std::map<std::string, const NxsCharactersBlock *> idToCharsB;
+		std::map<const NxsTreesBlock *, std::string> treesBToID;
+		std::map<std::string, const NxsTreesBlock *> idToTreesB;
+		std::map<MapperStateLabelVec, std::string> mapperToID;
+		std::map<std::string, MapperStateLabelVec> idToMapper;
+	};
+
+
+
+
+
+inline void writeAttribute(ostream & out, const AttributeData & aIt)
+	{
+	out << ' ' << aIt.first << '=';
+	writeAttributeValue(out, aIt.second);
+	}
+
+
+class XMLElement
+{
+	public:
+
+	XMLElement(const char *name, ostream &outstream, bool hasSubElements, const char *indentStr, const AttributeDataVec *ovec=NULL)
+		:out(outstream),
+		elementName(name)
+		,containsElements(hasSubElements)
+		,indentation(indentStr)
+		{
+		if (ovec)
+			this->open(*ovec);
+		}
+
+	void open()
+		{
+		const std::vector<AttributeData> atts;
+		this->open(atts);
+		}
+
+	void open(const std::vector<AttributeData> &atts)
+		{
+		out << indentation << "<" << this->elementName;
+		std::vector<AttributeData>::const_iterator aIt = atts.begin();
+		for (; aIt != atts.end(); ++aIt)
+			{
+			writeAttribute(out, *aIt);
+			}
+		if (containsElements)
+			out << ">\n";
+		else
+			out << "/>\n";
+
+		}
+	virtual ~XMLElement()
+		{
+		if (containsElements)
+			out << indentation << "</" << this->elementName << ">\n";
+		}
+	protected:
+		ostream & out;
+		const std::string elementName;
+		bool containsElements;
+		const char *indentation;
+};
+
+const char * getNexmlCharPref(NxsCharactersBlock::DataTypesEnum dt)
+{
+	if (dt == NxsCharactersBlock::standard)
+		return "nex:Standard";
+	if (dt == NxsCharactersBlock::dna)
+		return "nex:Dna";
+	if (dt == NxsCharactersBlock::rna)
+		return "nex:Rna";
+	if (dt == NxsCharactersBlock::protein)
+		return "nex:Protein";
+	if (dt == NxsCharactersBlock::continuous)
+		return "nex:Continuous";
+	cerr << "Mixed and Nucleotide data (int " << int(dt) <<") type not supported for nexml output\n";
+	exit(2);
+}
+
+std::string getNexmlCharSeqType(NxsCharactersBlock::DataTypesEnum dt)
+{
+	std::string p(getNexmlCharPref(dt));
+	p.append("Seqs");
+	return p;
+}
+
+std::string getNexmlCharCellsType(NxsCharactersBlock::DataTypesEnum dt)
+{
+	std::string p(getNexmlCharPref(dt));
+	p.append("Cells");
+	return p;
+}
+
+class IDLabelledElement: public XMLElement
+{
+	public:
+		IDLabelledElement(const char *elN, std::string identifier, std::string titleStr, ostream &outstream, bool contains, const char *indent, const AttributeDataVec *ovec=NULL)
+			:XMLElement(elN, outstream, contains, indent)
+			{
+			AttributeDataVec v;
+			v.push_back(AttributeData("id", identifier));
+			if (!titleStr.empty())
+				v.push_back(AttributeData("label", titleStr));
+			if (ovec)
+				v.insert(v.end(), ovec->begin(), ovec->end());
+			XMLElement::open(v);
+			}
+};
+
+class OtusElement: public IDLabelledElement
+{
+	public:
+		OtusElement(std::string identifier, std::string titleStr, ostream &outstream, const AttributeDataVec *ovec=NULL)
+			:IDLabelledElement("otus", identifier, titleStr, outstream, true, "  ", ovec)
+			{}
+};
+
+class OtuElement: public IDLabelledElement
+{
+	public:
+		OtuElement(std::string identifier, std::string titleStr, ostream &outstream, const AttributeDataVec *ovec=NULL)
+			:IDLabelledElement("otu", identifier, titleStr, outstream, false, "    ", ovec)
+			{}
+};
+
+class OtherObjLinkedElement : public XMLElement
+{
+	public:
+		OtherObjLinkedElement(const char  * elN, std::string identifier, std::string titleStr, const char *otherAttN, std::string otherID, ostream &outstream, bool contains, const char * indent, const AttributeDataVec * att)
+			:XMLElement(elN, outstream, contains, indent)
+			{
+			AttributeDataVec v;
+			v.push_back(AttributeData("id", identifier));
+			v.push_back(AttributeData(otherAttN, otherID));
+			if (!titleStr.empty())
+				v.push_back(AttributeData("label", titleStr));
+			if (att)
+				v.insert(v.end(), att->begin(), att->end());
+			XMLElement::open(v);
+			}
+};
+
+class OTULinkedElement: public OtherObjLinkedElement
+{
+	public:
+		OTULinkedElement(const char  * elN, std::string identifier, std::string titleStr, std::string taxaBlockID, ostream &outstream, bool contains, const char * indent, const AttributeDataVec * att)
+			:OtherObjLinkedElement(elN, identifier, titleStr, "otu", taxaBlockID, outstream, contains, indent, att)
+			{}
+};
+
+class OTUSLinkedElement: public OtherObjLinkedElement
+{
+	public:
+		OTUSLinkedElement(const char  * elN, std::string identifier, std::string titleStr, std::string taxaBlockID, ostream &outstream, bool contains, const char * indent, const AttributeDataVec * att)
+			:OtherObjLinkedElement(elN, identifier, titleStr, "otus", taxaBlockID, outstream, contains, indent, att)
+			{}
+};
+class CharactersElement: public OTUSLinkedElement
+{
+	public:
+		CharactersElement(std::string identifier, std::string titleStr, std::string taxaBlockID, ostream &outstream, const AttributeDataVec * att)
+			:OTUSLinkedElement("characters", identifier, titleStr, taxaBlockID, outstream, true, "  ", att)
+			{}
+};
+
+
+void writeAsNexml(PublicNexusReader & nexusReader, ostream & os)
+{
+	std::string version("0.9");
+	os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+	os << "<nex:nexml  version=\"" << version << "\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.nexml.org/2009\" xmlns:nex=\"http://www.nexml.org/2009\" xmlns=\"http://www.nexml.org/2009 generator=\"NEX_us2ml " << NCL_NAME_AND_VERSION << "\">\n";
+
+	const unsigned nTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+	NexmlIDStrorer memo;
+	unsigned nCharBlocksRead = 0;
+	unsigned nTreeBlocksRead = 0;
+
+	for (unsigned t = 0; t < nTaxaBlocks; ++t)
+		{
+		const NxsTaxaBlock * tb = nexusReader.GetTaxaBlock(t);
+
+		std::vector<const NxsAssumptionsBlock *> assumps;
+		for (unsigned j= 0; j < nexusReader.GetNumAssumptionsBlocks(tb); ++j)
+			assumps.push_back(nexusReader.GetAssumptionsBlock(tb, j));
+
+		writeOTUS(os, tb, assumps, memo, t);
+
+		const unsigned nCharBlocks = nexusReader.GetNumCharactersBlocks(tb);
+		for (unsigned i = 0; i < nCharBlocks; ++i)
+			{
+			NxsCharactersBlock * cb = nexusReader.GetCharactersBlock(tb, i);
+
+			assumps.clear();
+			for (unsigned j= 0; j < nexusReader.GetNumAssumptionsBlocks(cb); ++j)
+				assumps.push_back(nexusReader.GetAssumptionsBlock(cb, j));
+
+			writeCharacters(os, cb, assumps, memo, nCharBlocksRead++);
+			}
+
+		const unsigned nTreesBlocks = nexusReader.GetNumTreesBlocks(tb);
+		for (unsigned i = 0; i < nTreesBlocks; ++i)
+			{
+			NxsTreesBlock * cb = nexusReader.GetTreesBlock(tb, i);
+
+			assumps.clear();
+			for (unsigned j= 0; j < nexusReader.GetNumAssumptionsBlocks(cb); ++j)
+				assumps.push_back(nexusReader.GetAssumptionsBlock(cb, j));
+
+			writeTrees(os, cb, assumps, memo, nTreeBlocksRead++);
+			}
+		}
+
+	os << "</nex:nexml>\n";
+}
+
+
+void writeOTUS(ostream & os, const NxsTaxaBlock *taxa, const std::vector<const NxsAssumptionsBlock *> & , NexmlIDStrorer &memo, unsigned index)
+{
+	if (taxa == NULL)
+		return;
+	TaxaBlockPtrIndPair tbp(taxa, index);
+	std::string taxaBlockID = memo.getID(tbp);
+	std::string title = taxa->GetTitle();
+	OtusElement otus(taxaBlockID, title, os);
+
+	const std::vector<std::string> labels = taxa->GetAllLabels();
+	std::vector<std::string>::const_iterator labelIt = labels.begin();
+	unsigned n = 0;
+	for (; labelIt != labels.end(); ++labelIt, ++n)
+		{
+		std::string taxonId = memo.getID(tbp, n);
+		OtuElement o(taxonId, *labelIt, os);
+		}
+}
+
+
+void writeCharLabels(ostream & os, const NxsCharactersBlock *cb, NexmlIDStrorer &memo, unsigned index, std::vector<std::string> * indToStatesID)
+{
+	const std::string emptyString;
+	CharBlockPtrIndPair cbp(cb, index);
+	const unsigned nchars = cb->GetNumChar();
+	for (unsigned i = 0; i < nchars; ++i)
+		{
+		std::string label = cb->GetCharLabel(i);
+		if (true ) // <char  elements required now!
+			{
+			std::string charId = memo.getCharID(cbp, i);
+			if (indToStatesID)
+				{
+				std::string labelToShow;
+				if (label != " ")
+					labelToShow = label;
+				std::string statesID = (*indToStatesID)[i];
+				AttributeDataVec v(1, AttributeData("states", statesID));
+				IDLabelledElement c("char", charId, labelToShow, os, false, "      ", &v);
+				}
+			else if (label != " ")
+				IDLabelledElement c2("char", charId, label, os, false, "      ");
+			else
+				IDLabelledElement c3("char", charId, emptyString, os, false, "      ");
+			}
+		}
+}
+
+std::vector<std::string> getStateLabesVec(const NxsCharactersBlock *cb, unsigned charIndex, const NxsDiscreteDatatypeMapper *mapper)
+{
+	const unsigned nst = mapper->GetNumStates();
+	unsigned i = 0;
+	std::vector<std::string> v;
+	const std::string emptyString;
+	for (unsigned n = 0; n < nst; ++n)
+		{
+		std::string l = cb->GetStateLabel(charIndex, n);
+		if (l != " ")
+			{
+			if (i > 0)
+				{
+				for (unsigned j = 0; j < i; ++j)
+					v.push_back(emptyString);
+				i = 0;
+				}
+			v.push_back(l);
+			}
+		else
+			i++;
+		}
+	return v;
+}
+
+
+const char * gDigits = "0123456789";
+const char * gLetters = "abcdefghijklmnopqrstuvwxyz";
+
+////////////////////////////////////////////////////////////////////////////////
+// Creates a new states element and returns its ID.
+// 	the identifier's of the each state within the states element will be the states
+//	element's ID + 's' + the state index.
+//	except that that:
+//		the missing state's identifier will have the last state code's index
+//			(mapper->GetNumStateCodes() - 1).
+//		the gap state's identifier will have the next-to-last state code's index
+//			(mapper->GetNumStateCodes() - 2).
+////////////////////////////////////////////////////////////////////////////////
+std::string writeStatesElement(const MapperStateLabelVec & mslp, ostream &os, NexmlIDStrorer &memo, unsigned charIndex, unsigned statesIndex, bool useNexusSymbols)
+{
+	MapperStateLabelVecIndPair m(mslp, charIndex);
+	const std::string emptyString;
+	const std::string identifier = memo.getID(m, statesIndex);
+	IDLabelledElement statesElement("states", identifier, emptyString, os, true, "        ", NULL);
+	const NxsDiscreteDatatypeMapper * mapper = mslp.first;
+	std::vector<std::string> symbols;
+
+	// figure out what symbols to use (in almost all cases this will be the NEXUS symbols
+	//	but it is possible that (if the matrix was entered in TOKENS mode) there
+	//	will not be NEXUS symbols for all states -- in this case we'll just numbre states.
+
+	const NxsDiscreteStateCell nsc = (NxsDiscreteStateCell) mapper->GetNumStateCodes();
+	const bool hasGap = (mapper->GetNumStatesIncludingGap() > mapper->GetNumStates());
+	const NxsDiscreteStateCell endNum = (hasGap ? nsc - 2: nsc - 1); // minus one for the missing state and one more for the gap state (if used)
+
+
+	int unnumberedCutoff = 10;
+	if (useNexusSymbols)
+		{
+		for (NxsDiscreteStateCell i = 0; useNexusSymbols && i < endNum; ++i)
+			{
+			//cerr << i << '\n';
+			std::string s = mapper->StateCodeToNexusString(i, false);
+			if (s.length() != 1)
+				useNexusSymbols = false;
+			else
+				symbols.push_back(string(1, s[0]));
+			}
+		if (useNexusSymbols)
+			symbols.push_back(string(1, mapper->GetGapSymbol()));
+		if (useNexusSymbols)
+			symbols.push_back(string(1, mapper->GetMissingSymbol()));
+		unnumberedCutoff = 36;
+		}
+	if (!useNexusSymbols)
+		{
+		unnumberedCutoff = 10;
+		symbols.clear();
+		if (nsc <= (NxsDiscreteStateCell) unnumberedCutoff)
+			{
+			for (int i = 0; i < 10 && (int) symbols.size() < endNum; ++i)
+				symbols.push_back(std::string(1, gDigits[i]));
+			for (int i = 0; i < 26 && (int) symbols.size() < endNum; ++i)
+				symbols.push_back(std::string(1, gLetters[i]));
+			}
+		else
+			{
+			for (NxsDiscreteStateCell i = 0; i < endNum; ++i)
+				symbols.push_back(generateID(emptyString, i));
+			}
+		/*
+		if (hasGap)
+			symbols.push_back("-");
+		symbols.push_back("?");
+		*/
+		if (hasGap)
+			symbols.push_back(generateID(emptyString, symbols.size()));
+		symbols.push_back(generateID(emptyString, symbols.size()));
+		}
+	/// now we write the "fundamental" states
+	const unsigned nst = mapper->GetNumStates();
+	const std::vector<std::string> & sl = mslp.second;
+	std::string stateIDpref = identifier;
+	stateIDpref.append(1, 's');
+	//std::string symStr(symbols.begin(), symbols.end());
+	//std::cerr << "symbols = " << symStr << '\n';
+	for (unsigned i = 0; i < nst; ++i)
+		{
+		const std::string stateID = generateID(stateIDpref, i);
+		const std::string label = (i < sl.size() ? sl[i] : emptyString);
+		AttributeDataVec v(1, AttributeData("symbol", symbols.at(i)));
+		IDLabelledElement c("state", stateID, label, os, false, "          ", &v);
+		}
+	/// now we write the state sets:
+	std::string gapStateID;
+	if (hasGap)
+		gapStateID = generateID(stateIDpref, nsc - 2);
+	std::string missingStateID = generateID(stateIDpref, nsc - 1);
+	/// now we deal with the gap "state"
+	if (hasGap)
+		{
+		const std::string label("Gap");
+		AttributeDataVec v(1, AttributeData("symbol", symbols[nsc - 2]));
+		IDLabelledElement c("state", gapStateID, label, os, false, "          ", &v);
+		}
+	/// now we deal with the gap "state"
+	if (hasGap)
+		{
+		const std::string label("Missing");
+		AttributeDataVec v(1, AttributeData("symbol", symbols[nsc - 1]));
+		IDLabelledElement c("state", missingStateID, label, os, false, "          ", &v);
+		}
+	for (int polyuncertain = 0; polyuncertain < 2; ++polyuncertain)
+		{
+		for (NxsDiscreteStateCell i = nst; i < endNum; ++i)
+			{
+			const bool isPoly = mapper->IsPolymorphic(i);
+			if ((isPoly && (polyuncertain == 0)) || ((!isPoly) && (polyuncertain == 1)))
+				{
+				const char * elName = (isPoly ? "polymorphic_state_set" : "uncertain_state_set");
+				const std::string stateID = generateID(stateIDpref, i);
+				AttributeDataVec v(1, AttributeData("symbol", symbols[i]));
+				IDLabelledElement stateSetElement(elName, stateID, emptyString, os, true, "          ", &v);
+				const std::set<NxsDiscreteStateCell>	 & ss = mapper->GetStateSetForCode(i);
+				for (std::set<NxsDiscreteStateCell>::const_iterator subStateIt = ss.begin(); subStateIt != ss.end(); ++subStateIt)
+					{
+					const NxsDiscreteStateCell subStateCode = *subStateIt;
+					string subStateID;
+					if (subStateCode < 0)
+						{
+						if (subStateCode == NXS_GAP_STATE_CODE)
+							subStateID = gapStateID;
+						else
+							{
+							cerr << "unexpected negative state code\n";
+							exit(4);
+							}
+						}
+					else
+						subStateID = generateID(stateIDpref, (unsigned) subStateCode);
+					AttributeDataVec v2(1, AttributeData("state", subStateID));
+					XMLElement ss2("member", os, false, "            ", &v2);
+					}
+				}
+			}
+		}
+	return identifier;
+}
+
+
+void writeAllStatesElements(
+	ostream & os,
+	const NxsCharactersBlock *cb,
+	NexmlIDStrorer &memo,
+	unsigned index,
+	std::vector<std::string> & statesIDVec,
+	const bool useNexusSymbols)
+{
+	const unsigned nchars = cb->GetNumChar();
+	typedef std::map<MapperStateLabelVec, std::string> MSLToId;
+	MSLToId mappersUsed;
+	for (unsigned i = 0; i < nchars; ++i)
+		{
+		const NxsDiscreteDatatypeMapper * mapper = cb->GetDatatypeMapperForChar(i);
+		std::vector<std::string> lv = getStateLabesVec(cb, i, mapper);
+		MapperStateLabelVec mslPair(mapper, lv);
+		MSLToId::const_iterator prev = mappersUsed.find(mslPair);
+		const bool wse = (prev == mappersUsed.end());
+		std::string sid;
+		if (wse)
+			{
+			sid = writeStatesElement(mslPair, os, memo, index, mappersUsed.size(), useNexusSymbols);
+			mappersUsed[mslPair] = sid;
+			}
+		else
+			sid = prev->second;
+		statesIDVec.push_back(sid);
+		}
+}
+void writeCharacters(ostream & os, const NxsCharactersBlock *cb , const std::vector<const NxsAssumptionsBlock *> & , NexmlIDStrorer &memo, unsigned index)
+{
+	if (!cb)
+		return;
+	NxsTaxaBlock * taxa  = dynamic_cast<NxsTaxaBlock *>(cb->GetTaxaBlockPtr(NULL));
+	if (!taxa)
+		return;
+	TaxaBlockPtrIndPair tbp(taxa, UINT_MAX);
+	std::string taxaBlockID = memo.getID(tbp);
+	CharBlockPtrIndPair cbp(cb, index);
+	std::string charBlockID = memo.getID(cbp);
+	std::string title = cb->GetTitle();
+
+	NxsCharactersBlock::DataTypesEnum dt = cb->GetDataType();
+	const unsigned nchars = cb->GetNumChar();
+
+	if (dt == NxsCharactersBlock::standard || cb->GetNumUserEquates() > 0)
+		{
+		if (dt != NxsCharactersBlock::standard)
+			{
+			cerr << "Warning: user defined equates causing the coercion of " << getNexmlCharCellsType(dt) << " type to nex:StandardCells.\n";
+			dt = NxsCharactersBlock::standard;
+			}
+
+		std::string dtStr = getNexmlCharCellsType(dt);
+		AttributeDataVec atts(1, AttributeData("xsi:type", dtStr));
+		CharactersElement charEl(charBlockID, title, taxaBlockID, os, &atts);
+		std::vector<std::string> statesIDVec;
+		if (true)
+			{
+			XMLElement format("format", os, true, "    ");
+			format.open();
+			writeAllStatesElements(os, cb, memo, index, statesIDVec, false);
+			writeCharLabels(os, cb, memo, index, &statesIDVec);
+			}
+		if (true)
+			{
+			XMLElement mat("matrix", os, true, "    ");
+			mat.open();
+
+			const std::vector<std::string> labels = taxa->GetAllLabels();
+			std::vector<std::string>::const_iterator labelIt = labels.begin();
+			unsigned n = 0;
+			const std::string emptyString;
+			for (; labelIt != labels.end(); ++labelIt, ++n)
+				{
+				if (cb->TaxonIndHasData(n))
+					{
+					std::string rowId = memo.getID(cbp, n);
+					std::string otuId = memo.getID(tbp, n);
+					OTULinkedElement row("row", rowId,  emptyString, otuId, os, true, "      ", NULL);
+					AttributeDataVec csAtts;
+					csAtts.push_back(AttributeData("char",emptyString));
+					csAtts.push_back(AttributeData("state",emptyString));
+					AttributeData & charAttribute = csAtts[0];
+					AttributeData & stateAttribute = csAtts[1];
+					const NxsDiscreteStateRow & dataRow =  cb->GetDiscreteMatrixRow(n);
+					for (unsigned k = 0; k < nchars; ++k)
+						{
+						charAttribute.second = memo.getCharID(cbp, k);
+						const NxsDiscreteStateCell sc = dataRow[k];
+						unsigned nexmlStatesIndex = 0;
+						if (sc >= 0)
+							nexmlStatesIndex = (unsigned) sc;
+						else
+							{
+							const NxsDiscreteDatatypeMapper * mapper = cb->GetDatatypeMapperForChar(k);
+							const unsigned nsc = mapper->GetNumStateCodes();
+							if (sc == NXS_GAP_STATE_CODE)
+								nexmlStatesIndex = nsc - 2;
+							else if (sc == NXS_MISSING_CODE)
+								nexmlStatesIndex = nsc - 1;
+							else
+								{
+								cerr << "Unknown state code " << sc << '\n';
+								exit(5);
+								}
+							}
+						std::string stateIDpref = statesIDVec[k];
+						stateIDpref.append(1, 's');
+						stateAttribute.second = generateID(stateIDpref, nexmlStatesIndex);
+						XMLElement("cell", os, false, "        ", &csAtts);
+						}
+					}
+				}
+			}
+		}
+	else
+		{
+		std::string dtStr = getNexmlCharSeqType(dt);
+		AttributeDataVec atts(1, AttributeData("xsi:type", dtStr));
+		CharactersElement charEl(charBlockID, title, taxaBlockID, os, &atts);
+		if (true) // cb->HasCharLabels()) // new xsd requires format
+			{
+			XMLElement format("format", os, true, "    ");
+			format.open();
+			std::vector<std::string> statesIDVec;
+			writeAllStatesElements(os, cb, memo, index, statesIDVec, true);
+			writeCharLabels(os, cb, memo, index, &statesIDVec);
+			}
+		if (true)
+			{
+			XMLElement mat("matrix", os, true, "    ");
+			mat.open();
+
+			const std::vector<std::string> labels = taxa->GetAllLabels();
+			std::vector<std::string>::const_iterator labelIt = labels.begin();
+			unsigned n = 0;
+			const std::string emptyString;
+			for (; labelIt != labels.end(); ++labelIt, ++n)
+				{
+				if (cb->TaxonIndHasData(n))
+					{
+					std::string rowId = memo.getID(cbp, n);
+					std::string otuId = memo.getID(tbp, n);
+					OTULinkedElement row("row", rowId,  emptyString, otuId, os, true, "      ", NULL);
+					if (true)
+						{
+						os << "        <seq>";
+						cb->WriteStatesForTaxonAsNexus(os, n, 0, nchars);
+						os << "</seq>\n";
+						}
+					}
+				}
+			}
+		}
+}
+
+std::string writeSimpleNode(ostream & os, const NxsSimpleNode &nd, const TaxaBlockPtrIndPair & taxa, unsigned nodeIndex, NexmlIDStrorer &memo, AttributeDataVec*oatts)
+{
+	AttributeDataVec v;
+	std::string prefix("n");
+	unsigned otuInd = nd.GetTaxonIndex();
+	std::string otuID;
+	std::string label;
+	std::string identifier = generateID(prefix, nodeIndex);
+	if (otuInd != UINT_MAX)
+		v.push_back(AttributeData("otu", memo.getID(taxa, otuInd)));
+	else
+		label = nd.GetName();
+	if (oatts)
+		v.insert(v.end(), oatts->begin(), oatts->end());
+	IDLabelledElement nodeEl ("node", identifier, label, os, false, "      ", &v);
+	return identifier;
+}
+
+std::string writeSimpleEdge(ostream & os, const NxsSimpleNode *nd, std::map<const NxsSimpleNode *, std::string>  & ndToIdMap, bool edgesAsIntegers)
+{
+	const NxsSimpleEdge edge = nd->GetEdgeToParent();
+	bool defEdgeLen = edge.EdgeLenIsDefaultValue();
+	assert(edge.GetChild() == nd);
+	std::string eid(1, 'e');
+	const std::string & nid = ndToIdMap[nd];
+	eid.append(nid);
+	NxsString lenstring;
+	AttributeDataVec v;
+	if (edgesAsIntegers)
+		lenstring << edge.GetIntEdgeLen();
+	else
+		lenstring << edge.GetDblEdgeLen();
+	if (!defEdgeLen)
+		v.push_back(AttributeData("length", lenstring));
+	v.push_back(AttributeData("target", nid));
+	const NxsSimpleNode * par = edge.GetParent();
+	assert(par);
+	assert(ndToIdMap.find(par) != ndToIdMap.end());
+	v.push_back(AttributeData("source", ndToIdMap[par]));
+	IDLabelledElement edgeEl("edge", eid, std::string(), os, false, "      ", &v);
+	return eid;
+}
+void writeTrees(ostream & os, const NxsTreesBlock *tb, const std::vector<const NxsAssumptionsBlock *> & , NexmlIDStrorer &memo, unsigned index)
+{
+	if (!tb)
+		return;
+	const NxsTaxaBlock * taxa  = dynamic_cast<const NxsTaxaBlock *>(tb->GetTaxaBlockPtr(NULL));
+	if (!taxa)
+		return;
+	TaxaBlockPtrIndPair tbp(taxa, UINT_MAX);
+	std::string taxaBlockID = memo.getID(tbp);
+	TreesBlockPtrIndPair treesbp(tb, index);
+	std::string treesBlockID = memo.getID(treesbp);
+	std::string title = tb->GetTitle();
+	const unsigned ntrees = tb->GetNumTrees();
+	if (ntrees == 0)
+		return;
+	OTUSLinkedElement treesEl("trees", treesBlockID, title, taxaBlockID, os, true, "  ", NULL);
+	tb->ProcessAllTrees();
+	for (unsigned treen = 0; treen < ntrees; ++treen)
+		{
+		const NxsFullTreeDescription &ftd = tb->GetFullTreeDescription(treen);
+		const bool edgesAsIntegers = ftd.EdgeLengthsAreAllIntegers();
+		const char * treeType = (edgesAsIntegers ?  "nex:IntTree": "nex:FloatTree" );
+		std::string identifier = memo.getID(treesbp, treen);
+		AttributeDataVec treeAtts(1, AttributeData("xsi:type", std::string(treeType)));
+		IDLabelledElement treeEl("tree", identifier, ftd.GetName(), os, true, "    ", &treeAtts);
+		NxsSimpleTree tree(ftd, INT_MAX, DBL_MAX);
+		std::vector<const NxsSimpleNode *> preorder = tree.GetPreorderTraversal();
+		std::vector<const NxsSimpleNode *>::const_iterator ndIt = preorder.begin();
+		std::map<const NxsSimpleNode *, std::string> nodeToIDMap;
+		unsigned nodeIndex = 0;
+		if (ndIt != preorder.end())
+			{
+			AttributeDataVec rootAtts;
+			string rv(ftd.IsRooted() ? "true" : "false");
+			rootAtts.push_back(AttributeData("root", rv));
+			const NxsSimpleNode * nd = *ndIt;
+			nodeToIDMap[nd] = writeSimpleNode(os, *nd, tbp, nodeIndex++, memo, &rootAtts);
+			++ndIt;
+			for (; ndIt != preorder.end(); ++ndIt)
+				{
+				nd = *ndIt;
+				nodeToIDMap[nd] = writeSimpleNode(os, *nd, tbp, nodeIndex++, memo, NULL);
+				}
+			}
+		ndIt = preorder.begin();
+		nodeIndex = 0;
+		if (ndIt != preorder.end())
+			{
+			const NxsSimpleNode * nd = *ndIt;
+			const NxsSimpleEdge edge = nd->GetEdgeToParent();
+			bool defEdgeLen = edge.EdgeLenIsDefaultValue();
+			if (!defEdgeLen)
+				{
+				std::string eid(1, 'e');
+				const std::string & nid = nodeToIDMap[nd];
+				eid.append(nid);
+				NxsString lenstring;
+				AttributeDataVec v;
+				if (edgesAsIntegers)
+					lenstring << edge.GetIntEdgeLen();
+				else
+					lenstring << edge.GetDblEdgeLen();
+				v.push_back(AttributeData("length", lenstring));
+				v.push_back(AttributeData("target", nid));
+				IDLabelledElement edgeEl("rootedge", eid, std::string(), os, false, "      ", &v);
+				}
+			++ndIt;
+			for (; ndIt != preorder.end(); ++ndIt)
+				{
+				nd = *ndIt;
+				writeSimpleEdge(os, nd, nodeToIDMap, edgesAsIntegers);
+				}
+			}
+		}
+
+}
diff --git a/example/patristic/Makefile.am b/example/patristic/Makefile.am
new file mode 100644
index 0000000..2b83753
--- /dev/null
+++ b/example/patristic/Makefile.am
@@ -0,0 +1,5 @@
+LDADD       = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = patristicmat
+patristicmat_SOURCES = patristic.cpp
+
diff --git a/example/patristic/Makefile.in b/example/patristic/Makefile.in
new file mode 100644
index 0000000..d64cfa2
--- /dev/null
+++ b/example/patristic/Makefile.in
@@ -0,0 +1,484 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = patristicmat$(EXEEXT)
+subdir = example/patristic
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_patristicmat_OBJECTS = patristic.$(OBJEXT)
+patristicmat_OBJECTS = $(am_patristicmat_OBJECTS)
+patristicmat_LDADD = $(LDADD)
+patristicmat_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(patristicmat_SOURCES)
+DIST_SOURCES = $(patristicmat_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+patristicmat_SOURCES = patristic.cpp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/patristic/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/patristic/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+patristicmat$(EXEEXT): $(patristicmat_OBJECTS) $(patristicmat_DEPENDENCIES) 
+	@rm -f patristicmat$(EXEEXT)
+	$(CXXLINK) $(patristicmat_OBJECTS) $(patristicmat_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/patristic.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/patristic/patristic.cpp b/example/patristic/patristic.cpp
new file mode 100644
index 0000000..f5f4ebf
--- /dev/null
+++ b/example/patristic/patristic.cpp
@@ -0,0 +1,304 @@
+//	Copyright (C) 1999-2002 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+/*******************************************************************************
+ *	This file contains code for an executable that takes path to a NEXUS file
+ *		as a command line argument and writes a "normalized" version of the
+ *		blocks.	 This is useful for testing.
+ *
+ *	Ideally 2 equivalent files will produce the same normalized output. This
+ *		version of tthe program is less ambitious. The goal is to be able to run
+ *		(for any valid NEXUS in.nex file):
+ *			$ normalizer in.nex > outOrig.nex
+ *			$ normalizer outOrig.nex > outSecond.nex
+ *			$ diff outOrig.nex outSecond.nex
+ *		and find no differences.
+ */
+#include "ncl/ncl.h"
+#include <iostream>
+#include <climits>
+#include <cassert>
+#include "ncl/nxsblock.h"
+#include "ncl/nxspublicblocks.h"
+using namespace std;
+
+static long gStrictLevel = 1;
+static long gTreeNum = -1;
+enum PATRISTIC_RUN_MODE
+	{
+		NO_OUTPUT             = 0,
+		ONLY_PATRISTIC        = 1,
+		ONLY_TO_MRCA          = 2,
+		PATRISTIC_AND_TO_MRCA = 3
+		};
+static long gMode = ONLY_PATRISTIC;
+
+void filepathToPatristic(const char * filename, std::ostream * os);
+bool printPatristic(const NxsFullTreeDescription &treeDesc, std::ostream * os, std::ostream * errStr, NxsTaxaBlockAPI &taxaB, const unsigned treeN);
+
+bool printPatristic(const NxsFullTreeDescription &treeDesc, std::ostream * os, std::ostream * errStr, NxsTaxaBlockAPI &taxaB, const unsigned treeN)
+{
+	const unsigned ntax = taxaB.GetNTax();
+	if (treeDesc.AllEdgesHaveLengths()) {
+		for (int flag = 1; flag < 3; ++flag) {
+			if (flag&gMode) {
+				const bool toMRCA = (flag == ONLY_TO_MRCA);
+				if (errStr)
+					{
+					if (toMRCA)
+						*errStr << "The to-MRCA matrix:" << std::endl;
+					else
+						*errStr << "The patristic distance matrix:" << std::endl;
+					}
+				NxsSimpleTree tree(treeDesc, 1, 1.0);
+				if (!treeDesc.EdgeLengthsAreAllIntegers()) {
+					NxsRealStepMatrix::DblMatrix dm = tree.GetDblPathDistances(toMRCA);
+					const unsigned n = (ntax < dm.size() ? ntax : dm.size());
+					if (n > 0 && os) {
+						for (unsigned i = 0; i < n; ++i)
+							*os << '\t' << NxsString::GetEscaped(taxaB.GetTaxonLabel(i));
+						for (unsigned i = 0; i < n; ++i) {
+							*os << '\n' << NxsString::GetEscaped(taxaB.GetTaxonLabel(i));
+							const std::vector<double> & row = dm[i];
+							for (unsigned j= 0; j < n; ++j) {
+								const double & d = row[j];
+								*os << '\t';
+								if (i == j)
+									*os << '-';
+								else if (d == DBL_MAX)
+									*os << 'i';
+								else
+									*os << d;
+							}
+						}
+						*os << '\n';
+					}
+				}
+				else {
+					NxsIntStepMatrix::IntMatrix im = tree.GetIntPathDistances(toMRCA);
+					const unsigned n = (ntax < im.size() ? ntax : im.size());
+					if (n > 0 && os) {
+						for (unsigned i = 0; i < n; ++i)
+							*os << '\t' << NxsString::GetEscaped(taxaB.GetTaxonLabel(i));
+						for (unsigned i = 0; i < n; ++i) {
+							*os << '\n' << NxsString::GetEscaped(taxaB.GetTaxonLabel(i));
+							const std::vector<int> & row = im[i];
+							for (unsigned j= 0; j < n; ++j) {
+								const int & d = row[j];
+								*os << '\t';
+								if (i == j)
+									*os << '-';
+								else if (d == INT_MAX)
+									*os << 'i';
+								else
+									*os << d;
+							}
+						}
+						*os << '\n';
+					}
+				}
+			}
+		}
+	}
+	else if (errStr) {
+		if (treeDesc.SomeEdgesHaveLengths())
+			*errStr << "Not all of the branches in tree " << treeN + 1 << " have edge lengths.\n";
+		else
+			*errStr << "Tree " << treeN + 1 << " does not have edge lengths.\n";
+	}
+	return false;
+}
+
+void filepathToPatristic(const char * filename, ostream *os)
+{
+	assert(filename);
+	BlockReaderList blocks;
+	try{
+		ExceptionRaisingNxsReader nexusReader(NxsReader::WARNINGS_TO_STDERR);
+		if (gStrictLevel != 2)
+			nexusReader.SetWarningToErrorThreshold((int)NxsReader::FATAL_WARNING + 1 - (int) gStrictLevel);
+		ifstream inf(filename, ios::binary);
+		if (!inf.good()) {
+			NxsString err;
+			err << "Could not parse the file \"" << filename <<"\"";
+			nexusReader.NexusError(err, 0, -1, -1);
+		}
+		cerr << "Creating token" <<endl;
+		NxsToken token(inf);
+		NxsCloneBlockFactory factory;
+
+		nexusReader.AddFactory(&factory);
+		NxsCharactersBlock charsB(NULL, NULL);
+		charsB.SetCreateImpliedBlock(true);
+		charsB.SetImplementsLinkAPI(true);
+		charsB.SetSupportMixedDatatype(true);
+
+		NxsDataBlock dataB(NULL, NULL);
+		dataB.SetCreateImpliedBlock(true);
+		dataB.SetImplementsLinkAPI(true);
+		dataB.SetSupportMixedDatatype(true);
+
+		NxsDistancesBlock distancesB(NULL);
+		distancesB.SetCreateImpliedBlock(true);
+		distancesB.SetImplementsLinkAPI(true);
+
+		NxsTaxaBlock taxaB;
+		taxaB.SetImplementsLinkAPI(false);
+
+		NxsTreesBlock treesB(NULL);
+		treesB.SetCreateImpliedBlock(true);
+		treesB.SetImplementsLinkAPI(true);
+		treesB.SetProcessAllTreesDuringParse(gTreeNum < 0);
+		if (gStrictLevel < 2)
+			treesB.SetAllowImplicitNames(true);
+		treesB.SetWriteFromNodeEdgeDataStructure(true);
+
+		NxsUnalignedBlock unalignedB(NULL);
+		unalignedB.SetCreateImpliedBlock(true);
+		unalignedB.SetImplementsLinkAPI(true);
+
+		factory.AddPrototype(&charsB, "CHARACTERS");
+		factory.AddPrototype(&dataB, "DATA");
+		factory.AddPrototype(&distancesB);
+		factory.AddPrototype(&taxaB);
+		factory.AddPrototype(&treesB);
+		factory.AddPrototype(&unalignedB);
+
+		try {
+			cerr << "Executing" <<endl;
+			nexusReader.Execute(token);
+		}
+		catch(...) {
+			nexusReader.RemoveFactory(&factory);
+			throw;
+		}
+		nexusReader.RemoveFactory(&factory);
+		blocks = nexusReader.GetUsedBlocksInOrder();
+		if (os) {
+			int prevTrees = 0;
+			for (BlockReaderList::const_iterator bIt = blocks.begin(); bIt != blocks.end(); ++bIt) {
+				NxsBlock * b = *bIt;
+				if (b && b->GetID() == "TREES") {
+					//*os << "TREES block found" << std::endl;
+
+					NxsTreesBlock * treesBPtr = (NxsTreesBlock *) b;
+					NxsTaxaBlockAPI * taxaBPtr =  treesBPtr->GetTaxaBlockPtr(NULL);
+					if (!taxaBPtr)
+						throw NxsException("Trees block is not connected to a taxa block -- I don\'t know how that happened");
+					const int nTreesThisBlock = (int) treesBPtr->GetNumTrees();
+					if (gTreeNum < 0) {
+						for (unsigned i = 0; i < (unsigned) nTreesThisBlock; ++i) {
+							const NxsFullTreeDescription & treeDesc = treesBPtr->GetFullTreeDescription(i);
+							printPatristic(treeDesc, os, &(std::cerr), *taxaBPtr, i + prevTrees);
+							*os << std::endl;
+						}
+					}
+					else if (prevTrees + nTreesThisBlock > gTreeNum) {
+						const NxsFullTreeDescription & treeDesc = treesBPtr->GetFullTreeDescription(gTreeNum - prevTrees);
+						printPatristic(treeDesc, os, &(std::cerr), *taxaBPtr, gTreeNum);
+						break;
+					}
+				}
+			}
+		}
+		for (BlockReaderList::const_iterator bIt = blocks.begin(); bIt != blocks.end(); ++bIt) {
+			NxsBlock * b = *bIt;
+			if (b)
+				delete b;
+		}
+	}
+	catch (const NxsException &x) {
+		cerr << "Error:\n " << x.msg << endl;
+		if (x.line >=0)
+			cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << endl;
+		exit(2);
+	}
+}
+
+void readFilepathAsNEXUS(const char *filename) {
+	cerr << "[Reading " << filename << "	 ]" << endl;
+	try {
+		ostream * outStream = &std::cout;
+		filepathToPatristic(filename, outStream);
+	}
+	catch (...) {
+		cerr << "Normalizing of " << filename << " failed (with an exception)" << endl;
+		exit(1);
+	}
+}
+
+void readFilesListedIsFile(const char *masterFilepath)
+{
+	ifstream masterStream(masterFilepath);
+	if (masterStream.bad()) {
+		cerr << "Could not open " << masterFilepath << "." << endl;
+		exit(3);
+	}
+	char filename[1024];
+	while ((!masterStream.eof())  && masterStream.good()) {
+		masterStream.getline(filename, 1024);
+		if (strlen(filename) > 0 && filename[0] != '#')
+			readFilepathAsNEXUS(filename);
+	}
+}
+
+void printHelp(ostream & out)
+{
+	out << "patristicmat reads a NEXUS file.\n\nFor every tree that it encounters with branch lengths, it prints a tab-separated table of patristic distances";
+	out << "\nThe most common usage is simply:\n    patristicmat <path to NEXUS file>\n";
+	out << "\nCommand-line flags:\n\n";
+	out << "    -h on the command line shows this help message\n\n";
+	out << "    -t<non-negative integer> specifies the tree to use (overrides the behavior of producing a matrix for every tree).\n";
+	out << "    -m enables display of the distance from leaf i to the mrca of i and j in row i and col j.\n";
+	out << "    -n disables the  display of the patristic distance matrix.\n";
+}
+
+int main(int argc, char *argv[])
+{
+	//sleep(10);
+	if (argc < 2) {
+		cerr << "Expecting the path to NEXUS file as the only command line argument!\n" << endl;
+		printHelp(cerr);
+		return 1;
+	}
+	for (int i = 1; i < argc; ++i) {
+		const char * filepath = argv[i];
+
+		if (strlen(filepath) > 1 && filepath[0] == '-' && filepath[1] == 'h')
+			printHelp(cout);
+		else if (strlen(filepath) > 2 && filepath[0] == '-' && filepath[1] == 't') {
+			if (!NxsString::to_long(filepath + 2, &gTreeNum) || gTreeNum < 1) {
+				cerr << "Expecting a positive integer after -t\n" << endl;
+				printHelp(cerr);
+				return 2;
+			}
+			--gTreeNum;
+		}
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'm')
+			gMode |= ONLY_TO_MRCA;
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'n')
+			gMode ^= ONLY_PATRISTIC;
+		else if (strlen(filepath) > 2 && filepath[0] == '-' && filepath[1] == 'l')
+			readFilesListedIsFile(filepath+2);
+		else
+			readFilepathAsNEXUS(filepath);
+	}
+	return 0;
+}
+
diff --git a/example/phylobaseinterface/Makefile.am b/example/phylobaseinterface/Makefile.am
new file mode 100644
index 0000000..70f675d
--- /dev/null
+++ b/example/phylobaseinterface/Makefile.am
@@ -0,0 +1,6 @@
+LDADD       = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = PhylobaseNCLInterfaceExample
+
+
+PhylobaseNCLInterfaceExample_SOURCES = NCLInterface.cpp NCLInterface.h
diff --git a/example/phylobaseinterface/Makefile.in b/example/phylobaseinterface/Makefile.in
new file mode 100644
index 0000000..a11c1a8
--- /dev/null
+++ b/example/phylobaseinterface/Makefile.in
@@ -0,0 +1,495 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = PhylobaseNCLInterfaceExample$(EXEEXT)
+subdir = example/phylobaseinterface
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_PhylobaseNCLInterfaceExample_OBJECTS = NCLInterface.$(OBJEXT)
+PhylobaseNCLInterfaceExample_OBJECTS =  \
+	$(am_PhylobaseNCLInterfaceExample_OBJECTS)
+PhylobaseNCLInterfaceExample_LDADD = $(LDADD)
+PhylobaseNCLInterfaceExample_DEPENDENCIES =  \
+	@top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(PhylobaseNCLInterfaceExample_SOURCES)
+DIST_SOURCES = $(PhylobaseNCLInterfaceExample_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+PhylobaseNCLInterfaceExample_SOURCES = NCLInterface.cpp NCLInterface.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/phylobaseinterface/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/phylobaseinterface/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+PhylobaseNCLInterfaceExample$(EXEEXT): $(PhylobaseNCLInterfaceExample_OBJECTS) $(PhylobaseNCLInterfaceExample_DEPENDENCIES) 
+	@rm -f PhylobaseNCLInterfaceExample$(EXEEXT)
+	$(CXXLINK) $(PhylobaseNCLInterfaceExample_OBJECTS) $(PhylobaseNCLInterfaceExample_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NCLInterface.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/phylobaseinterface/NCLInterface.cpp b/example/phylobaseinterface/NCLInterface.cpp
new file mode 100644
index 0000000..822295e
--- /dev/null
+++ b/example/phylobaseinterface/NCLInterface.cpp
@@ -0,0 +1,2236 @@
+//  Copyright (C) 2007-2008 Brian O'Meara & Derrick Zwickl
+//  A modification of the BasicCommandLine file of the NCL (see below)
+//  to use for loading trees and data from Nexus into R. Licensing as below.
+
+//	Copyright (C) 1999-2002 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#include <ncl/ncl.h>
+#include "NCLInterface.h"
+
+#include <iostream>
+#include <sstream>
+#include <cassert>
+
+
+
+
+std::string GetRStringLiteral(const std::string & inp)
+{
+	std::string withQuotes;
+	unsigned len = (unsigned)inp.length();
+	withQuotes.reserve(len + 4);
+	withQuotes.append(1,'\"');
+	for (std::string::const_iterator sIt = inp.begin(); sIt != inp.end(); sIt++)
+		{
+		if (strchr("\'\"\\\n\t", *sIt) == NULL)
+			withQuotes.append(1, *sIt);
+		else if (strchr("\'\"\\", *sIt) != NULL)
+			{
+			withQuotes.append(1,'\\');
+			withQuotes.append(1, *sIt);
+			}
+		else if (*sIt == '\t')
+			{
+			withQuotes.append(1,'\\');
+			withQuotes.append(1, 't');
+			}
+		else
+			{
+			withQuotes.append(1,'\\');
+			withQuotes.append(1, 'n');
+			}
+		}
+	withQuotes.append(1,'\"');
+	return withQuotes;
+}
+
+
+
+std::string BASICCMDLINE::TestRunning() {
+	string output="The NCL has been loaded";
+	return output;
+}
+
+#if defined(NEW_NCL_INTERFACE)
+
+MultiFormatReader * instantiateReader(int gStrictLevel);
+
+
+
+void BASICCMDLINE::AppendRContent(
+  NxsString & nexuscharacters,
+  NxsCharactersBlock &characters,
+  bool allchar,
+  bool polymorphictomissing,
+  bool levelsall) const
+{
+
+	int nchartoreturn = 0;
+	NxsTaxaBlockAPI * taxa = characters.GetTaxaBlockPtr();
+	if (!taxa)
+		return;
+	int ntax = taxa->GetNumTaxonLabels();
+
+	if (!characters.IsEmpty())
+		{
+		//characters.Report(cerr);
+		if (1==characters.GetDataType()) { //standard datatype
+		//if((characters.GetDatatypeName())=="standard") {
+			//nexuscharacters=characters.GetDatatypeName();
+			nexuscharacters+="data.frame(";
+
+			if (allchar) {
+				nchartoreturn=characters.GetNCharTotal();
+			}
+			else {
+				nchartoreturn=characters.GetNChar();
+			}
+			for (int character=0; character<nchartoreturn; character++) { //We only pass the non-eliminated chars
+				NxsString charlabel=characters.GetCharLabel(character);
+				if (character>0) {
+					nexuscharacters+=", ";
+				}
+				if (charlabel.length()>1) {
+					nexuscharacters+="'";
+					nexuscharacters+=charlabel;
+					nexuscharacters+="'";
+				}
+				else {
+					nexuscharacters+="standard_char_";
+					nexuscharacters+=character+1;
+				}
+				nexuscharacters+=" = ";
+
+				nexuscharacters+="factor(c(";
+				for (int taxon=0;taxon<ntax;taxon++) {
+					int statenumber=characters.GetInternalRepresentation(taxon,character,0);
+
+					if(characters.IsMissingState(taxon,character)) {
+						nexuscharacters+="NA";
+					}
+					else if (characters.GetNumStates(taxon,character)>1) {
+						if(polymorphictomissing) {
+							nexuscharacters+="NA";
+						}
+						else {
+							nexuscharacters+='{';
+							for (unsigned int k=0;k<characters.GetNumStates(taxon,character);k++) {
+								nexuscharacters+=characters.GetInternalRepresentation(taxon,character,0);
+								if (k+1<characters.GetNumStates(taxon,character)) {
+									nexuscharacters+=',';
+								}
+							}
+							nexuscharacters+='}';
+						}
+					}
+					else {
+						nexuscharacters+=statenumber;
+					}
+					if (taxon+1<ntax) {
+						nexuscharacters+=',';
+					}
+				}
+				nexuscharacters+=')';
+				if (levelsall) {
+					nexuscharacters+=", levels=c(";
+					for (unsigned int l=0;l<characters.GetMaxObsNumStates(); l++) {
+						nexuscharacters+=l;
+						if (l+1<characters.GetMaxObsNumStates()) {
+							nexuscharacters+=',';
+						}
+					}
+					nexuscharacters+=')';
+				}
+				else {
+
+					NxsString levels=", levels=c(";
+					NxsString labels=", labels=c(";
+					unsigned int totallabellength=0;
+					for (unsigned int l=0;l<characters.GetObsNumStates(character); l++) {
+						labels+='"';
+						labels+= characters.GetStateLabel(character,l);
+						totallabellength+=(characters.GetStateLabel(character,l)).length();
+						labels+='"';
+						levels+= l;
+						if (l+1<characters.GetObsNumStates(character)) {
+							labels+=',';
+							levels+=',';
+						}
+					}
+					levels+=')';
+					labels+=')';
+					//cout<<"labels.length="<<labels.length()<<endl<<"levels.length="<<levels.length()<<endl<<"total label length="<<totallabellength<<endl;
+					if (totallabellength>characters.GetObsNumStates(character)) {
+						nexuscharacters+=levels;
+						nexuscharacters+=labels;
+					}
+				}
+				nexuscharacters+=")\n";
+			}
+			nexuscharacters+=", row.names=c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+=GetRStringLiteral(characters.GetTaxonLabel(taxon));
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+			nexuscharacters+="))";
+		}
+		else if (2==characters.GetDataType() || 3==characters.GetDataType() || 4==characters.GetDataType()) { //dna, rna, nucleotide
+	//	if((characters.GetDatatypeName())=="dna") {
+
+			nexuscharacters+="data.frame(";
+			if (2==characters.GetDataType()) {
+				nexuscharacters+="dna_alignment_1=c(";
+			}
+			else if (3==characters.GetDataType()) {
+				nexuscharacters+="rna_alignment_1=c(";
+			}
+			else {
+				nexuscharacters+="nucleotide_alignment_1=c(";
+			}
+
+			if (allchar) {
+				nchartoreturn=characters.GetNCharTotal();
+			}
+			else {
+				nchartoreturn=characters.GetNChar();
+			}
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+='"';
+				for (int character=0; character<nchartoreturn; character++) {
+					int numstates=characters.GetNumStates(taxon,character);
+					if (characters.IsGapState(taxon,character)) {
+						nexuscharacters+="-";
+					}
+					else if (characters.IsMissingState(taxon,character)) {
+						nexuscharacters+="?";
+					}
+					else if ( numstates == 1) {
+						nexuscharacters+=characters.GetState(taxon,character,0);
+					}
+					else {
+						bool hasA=false;
+						bool hasT=false;
+						bool hasG=false;
+						bool hasC=false;
+						for (int i=0;i<numstates;i++) {
+							unsigned currentstate=characters.GetState(taxon,character,i);
+							if (currentstate=='A') {
+								hasA=true;
+							}
+							else if (currentstate=='T') {
+								hasT=true;
+							}
+							else if (currentstate=='G') {
+								hasG=true;
+							}
+							else if (currentstate=='C') {
+								hasC=true;
+							}
+							else {
+								cout<<"Error: currentstate "<<currentstate<<" does not match ATGC"<<endl;
+							}
+						}
+						if (hasA && hasG && !hasT && !hasC) {
+							nexuscharacters+="R";
+						}
+						else if (!hasA && !hasG && hasC && hasT) {
+							nexuscharacters+="Y";
+						}
+						else if (hasA && !hasG && hasC && !hasT) {
+							nexuscharacters+="M";
+						}
+						else if (!hasA && hasG && !hasC && hasT) {
+							nexuscharacters+="K";
+						}
+						else if (!hasA && hasG && hasC && !hasT) {
+							nexuscharacters+="S";
+						}
+						else if (hasA && !hasG && !hasC && hasT) {
+							nexuscharacters+="W";
+						}
+						else if (hasA && !hasG && hasC && hasT) {
+							nexuscharacters+="H";
+						}
+						else if (!hasA && hasG && hasC && hasT) {
+							nexuscharacters+="B";
+						}
+						else if (hasA && hasG && hasC && !hasT) {
+							nexuscharacters+="V";
+						}
+						else if (hasA && hasG && !hasC && hasT) {
+							nexuscharacters+="D";
+						}
+						else if (hasA && hasG && hasC && hasT) {
+							nexuscharacters+="N";
+						}
+						else {
+							nexuscharacters+="N";
+						}
+					}
+				}
+				nexuscharacters+='"';
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+
+			nexuscharacters+="), row.names=c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+=GetRStringLiteral(characters.GetTaxonLabel(taxon));
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+			nexuscharacters+="), stringsAsFactors=FALSE)";
+
+		}
+		else if (5==characters.GetDataType()) { //protein
+			nexuscharacters+="data.frame(";
+			nexuscharacters+="aa_alignment_1=c(";
+
+
+			if (allchar) {
+				nchartoreturn=characters.GetNCharTotal();
+			}
+			else {
+				nchartoreturn=characters.GetNChar();
+			}
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+='"';
+				for (int character=0; character<nchartoreturn; character++) {
+					int numstates=characters.GetNumStates(taxon,character);
+					if (characters.IsGapState(taxon,character)) {
+						nexuscharacters+="-";
+					}
+					else if (characters.IsMissingState(taxon,character)) {
+						nexuscharacters+="?";
+					}
+					else if ( numstates == 1) {
+						nexuscharacters+=characters.GetState(taxon,character,0);
+					}
+					else {
+						nexuscharacters+="X";
+					}
+				}
+				nexuscharacters+='"';
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+
+			nexuscharacters+="), row.names=c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+=GetRStringLiteral(characters.GetTaxonLabel(taxon));
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+			nexuscharacters+="), stringsAsFactors=FALSE)";
+		}
+		else if (6==characters.GetDataType()) { //continuousnexuscharacters+="data.frame(";
+			nexuscharacters+="data.frame(";
+
+			if (allchar) {
+				nchartoreturn=characters.GetNCharTotal();
+			}
+			else {
+				nchartoreturn=characters.GetNChar();
+			}
+			for (int character=0; character<nchartoreturn; character++) { //We only pass the non-eliminated chars
+				NxsString charlabel=characters.GetCharLabel(character);
+				if (character>0) {
+					nexuscharacters+=", ";
+				}
+				if (charlabel.length()>1) {
+					nexuscharacters+="'";
+					nexuscharacters+=charlabel;
+					nexuscharacters+="'";
+				}
+				else {
+					nexuscharacters+="continuous_char_";
+					nexuscharacters+=character+1;
+				}
+				nexuscharacters+=" = ";
+
+				nexuscharacters+="c(";
+				for (int taxon=0;taxon<ntax;taxon++) {
+					double state=characters.GetSimpleContinuousValue(taxon,character);
+					//cout<<"State at "<<taxon+1<<" char "<<character+1<<" = "<<state<<endl;
+					if (state==DBL_MAX) {
+							nexuscharacters+="NA";
+					}
+					else {
+						char buffer[100];
+						sprintf(buffer, "%.10f", state);
+						nexuscharacters+=buffer;
+					}
+
+					if (taxon+1<ntax) {
+						nexuscharacters+=',';
+					}
+				}
+				nexuscharacters+=")";
+			}
+			nexuscharacters+=", row.names=c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+=GetRStringLiteral(characters.GetTaxonLabel(taxon));
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+			nexuscharacters+="))";
+			//message="Warning: Continuous characters do not work";
+			//PrintMessage();
+		}
+		else {
+			std::string message="Error: character matrix loaded, but does not match any category (dna, standard, etc.)";
+			errorMessage(message);
+		}
+		//@MTH I'm not sure why this was here but it looks dangerous.  I'm commenting it out (May 18, 2010):
+		//nexuscharacters=RemoveUnderscoresAndSpaces(nexuscharacters); 
+	}
+
+}
+
+void BASICCMDLINE::AppendRContent(
+  NxsString & nexustrees,
+  NxsTreesBlock &treesB) const
+{
+	NxsTaxaBlockAPI * taxa = treesB.GetTaxaBlockPtr();
+	if (!taxa)
+		return;
+	if (!treesB.IsEmpty())
+	{
+
+		nexustrees+= "\nBEGIN TREES;\n";
+		for (unsigned k = 0; k < treesB.GetNumTrees(); k++)
+		{
+			NxsString s = treesB.GetTreeName(k);
+			s.BlanksToUnderscores();
+			nexustrees+="\tTREE ";
+			nexustrees+=s;
+			nexustrees+=" = ";
+			if (treesB.IsRootedTree(k))
+				nexustrees+="[&R]";
+			else
+				nexustrees+="[&U]";
+			nexustrees+=treesB.GetTreeDescription(k);
+			nexustrees+=";\n";
+		}
+		nexustrees+="END;\n";
+	}
+}
+
+void BASICCMDLINE::AppendRContent(
+  NxsString & nexusdistances,
+  NxsDistancesBlock &distancesB) const
+{
+	NxsTaxaBlockAPI * taxa = distancesB.GetTaxaBlockPtr();
+	if (!taxa)
+		return;
+	int ntax = taxa->GetNumTaxonLabels();
+
+	if (!distancesB.IsEmpty())
+	{ //fill cols first, first col has taxon 1, first row has taxon 2 (no diags)
+		nexusdistances+="\ndistances <- structure(c(";
+		vector<double> distancevector;
+		for (int col=0;col<ntax-1;col++) {
+			for (int row=col+1;row<ntax;row++) {
+				distancevector.push_back(distancesB.GetDistance(row,col));
+			}
+		}
+		for (unsigned int i=0;i<distancevector.size();i++) {
+			nexusdistances+=distancevector.at(i);
+			if (i+1<distancevector.size()) {
+				nexusdistances+=',';
+			}
+		}
+		nexusdistances+="), Size = ";
+		nexusdistances+=ntax;
+		nexusdistances+="L, Labels = c(";
+		for (int taxon=0; taxon<ntax;taxon++) {
+			nexusdistances+= GetRStringLiteral(taxa->GetTaxonLabel(taxon));
+			if (taxon+1<ntax) {
+				nexusdistances+=", ";
+			}
+		}
+		nexusdistances+="), Upper = FALSE, Diag = FALSE, class = \"dist\")\n";
+	}
+}
+
+
+void BASICCMDLINE::RReturnCharacters(NxsString & outputstring, bool allchar, bool polymorphictomissing, bool levelsall)
+{
+	if (!nexusReader)
+		return;
+	const unsigned nTaxaBlocks = nexusReader->GetNumTaxaBlocks();
+	for (unsigned t = 0; t < nTaxaBlocks; ++t) {
+		const NxsTaxaBlock * tb = nexusReader->GetTaxaBlock(t);
+		const unsigned nCharBlocks = nexusReader->GetNumCharactersBlocks(tb);
+		if (nCharBlocks == 0)
+			continue;
+		for (unsigned i = 0; i < nCharBlocks; ++i) {
+			NxsCharactersBlock * cb = nexusReader->GetCharactersBlock(tb, i);
+			if (cb) {
+				AppendRContent(outputstring, *cb, allchar, polymorphictomissing, levelsall);
+			}
+		}
+	}
+}
+
+
+void BASICCMDLINE::RReturnTrees(NxsString & outputstring)
+{
+	if (!nexusReader)
+		return;
+	const unsigned nTaxaBlocks = nexusReader->GetNumTaxaBlocks();
+	for (unsigned t = 0; t < nTaxaBlocks; ++t) {
+		const NxsTaxaBlock * tb = nexusReader->GetTaxaBlock(t);
+		const unsigned nTreesBlocks = nexusReader->GetNumTreesBlocks(tb);
+		if (nTreesBlocks == 0)
+			continue;
+		for (unsigned i = 0; i < nTreesBlocks; ++i) {
+			NxsTreesBlock * treesb = nexusReader->GetTreesBlock(tb, i);
+			if (treesb) {
+				AppendRContent(outputstring, *treesb);
+			}
+		}
+	}
+}
+
+void BASICCMDLINE::RReturnDistances(NxsString & outputstring)
+{
+	if (!nexusReader)
+		return;
+	const unsigned nTaxaBlocks = nexusReader->GetNumTaxaBlocks();
+	for (unsigned t = 0; t < nTaxaBlocks; ++t) {
+		const NxsTaxaBlock * tb = nexusReader->GetTaxaBlock(t);
+		const unsigned nDistancesBlocks = nexusReader->GetNumDistancesBlocks(tb);
+		if (nDistancesBlocks == 0)
+			continue;
+		for (unsigned i = 0; i < nDistancesBlocks; ++i) {
+			NxsDistancesBlock * distancesb = nexusReader->GetDistancesBlock(tb, i);
+			if (distancesb) {
+				AppendRContent(outputstring, *distancesb);
+			}
+		}
+	}
+}
+
+
+
+void BASICCMDLINE::writeMessage(MessageLevel level, const std::string & m)  const {
+	if (level >= int(this->verboseLevel)) {
+		std::cerr << m << std::endl;
+	}
+}
+
+
+MultiFormatReader * instantiateReader(int gStrictLevel)
+{
+	MultiFormatReader * nexusReader = new MultiFormatReader(-1, NxsReader::WARNINGS_TO_STDERR);
+
+
+	if (gStrictLevel != 2)
+		nexusReader->SetWarningToErrorThreshold((int)NxsReader::FATAL_WARNING + 1 - (int) gStrictLevel);
+	NxsCharactersBlock * charsB = nexusReader->GetCharactersBlockTemplate();
+	NxsDataBlock * dataB = nexusReader->GetDataBlockTemplate();
+	charsB->SetAllowAugmentingOfSequenceSymbols(true);
+	dataB->SetAllowAugmentingOfSequenceSymbols(true);
+
+	NxsTreesBlock * treesB = nexusReader->GetTreesBlockTemplate();
+	assert(treesB);
+	if (gStrictLevel < 2)
+		treesB->SetAllowImplicitNames(true);
+	if (gStrictLevel < 2)
+		{
+		NxsStoreTokensBlockReader *storerB =  nexusReader->GetUnknownBlockTemplate();
+		assert(storerB);
+		storerB->SetTolerateEOFInBlock(true);
+		}
+	nexusReader->conversionOutputRecord.addNumbersToDisambiguateNames = true;
+	return nexusReader;
+}
+
+
+void BASICCMDLINE::Clear()
+{
+	if (nexusReader) {
+		MultiFormatReader * nr = nexusReader;
+		nexusReader = 0L;
+		try {
+			nr->DeleteBlocksFromFactories();
+		}
+		catch (...) {
+			delete nr;
+			throw;
+		}
+		delete nr;
+	}
+
+}
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Creates a NxsReader, and tries to read the file `filename`.  If the
+//	read succeeds, then processContent will be called.
+////////////////////////////////////////////////////////////////////////////////
+void BASICCMDLINE::processFilepath(const char * filename) // enum indicating the file format to expect.
+{
+	if (! (this->nexusReader)) {
+		nexusReader = instantiateReader(this->gStrictLevel);
+	}
+
+	nexusReader->SetWarningOutputLevel(this->warningLevel);
+
+	std::string m("Reading ");
+	if (filename)
+		m.append(filename);
+	this->statusMessage(m);
+
+	nexusReader->ReadFilepath(filename, fmt);
+
+	m.assign("Finished reading ");
+	if (filename)
+		m.append(filename);
+	statusMessage(m);
+
+
+}
+
+
+
+
+
+
+
+#else // #if defined(NEW_NCL_INTERFACE)
+
+
+
+/*!
+ |	The constructor simply passes along `i' to the base class constructor. Nothing else needs to be done.
+ */
+MyNexusToken::MyNexusToken(
+						   istream &i)	/* the input file stream attached to the NEXUS file to be read */
+: NxsToken(i)
+{
+}
+
+/*!
+ |	Overrides the NxsToken::OutputComment virtual function (which does nothing) to display output comments [!comments
+ |	like this one beginning with an exclamation point]. The output comment contained in `msg' is simply sent to the
+ |	standard output stream cout.
+ */
+void MyNexusToken::OutputComment(
+								 const NxsString &msg)	/* the output comment to be displayed */
+{
+	cout << msg << endl;
+}
+
+/*!
+	Initializes the `NCL_BLOCKTYPE_ATTR_NAME' data member to "BASICCMDLINE" \ref BlockTypeIDDiscussion
+	calls the FactoryDefaults member function to perform the
+ |	remaining initializations. The data member `'' is set to NULL so that memory will be allocated for it in
+ |	FactoryDefaults.
+ */
+BASICCMDLINE::BASICCMDLINE()
+{
+	NCL_BLOCKTYPE_ATTR_NAME				= "BASICCMDLINE";
+
+	// Make sure all data members that are pointers are initialized to NULL!
+	// Failure to do this will result in problems because functions such as
+	// FactoryDefaults() will try to delete an object if it is non-NULL.
+	//
+	taxa			= NULL;
+	trees			= NULL;
+	assumptions		= NULL;
+	distances		= NULL;
+	characters		= NULL;
+	data			= NULL;
+	next_command	= NULL;
+
+	FactoryDefaults();
+
+	taxa			= new NxsTaxaBlock();
+	trees			= new NxsTreesBlock(taxa);
+	assumptions		= new NxsAssumptionsBlock(taxa);
+	characters		= new NxsCharactersBlock(taxa, assumptions);
+	distances		= new NxsDistancesBlock(taxa);
+	data			= new NxsDataBlock(taxa, assumptions);
+
+	Add(taxa);
+	Add(trees);
+	Add(assumptions);
+	Add(characters);
+	Add(distances);
+	Add(data);
+	Add(this);
+
+}
+
+/*!
+ |	Closes `logf' if it is open and deletes memory allocated to `next_command'.
+ */
+BASICCMDLINE::~BASICCMDLINE()
+{
+	assert(next_command != NULL);
+	delete [] next_command;
+
+	if (logf_open)
+		logf.close();
+}
+
+unsigned BASICCMDLINE::CharLabelToNumber(
+										 NxsString)	/* the character label to be translated to character number */
+{
+	return 0;
+}
+
+/*!
+ |	Called by the NxsReader object when a block named `blockName' is entered. Allows program to notify user of
+ |	progress in parsing the NEXUS file. Also gives program the opportunity to ask user if it is ok to purge data
+ |	currently contained in this block. If user is asked whether existing data should be deleted, and the answer comes
+ |	back no, then then return false, otherwise return true. Overrides pure virtual function in class NxsReader.
+ */
+bool BASICCMDLINE::EnteringBlock(
+								 NxsString blockName)	/* the name of the block just entered */
+{
+	message = "Reading ";
+	message += blockName;
+	message += " block...";
+	PrintMessage();
+
+	return true;
+}
+
+/*!
+ |	Called by the NxsReader object when exiting a block named `blockName'. Allows program to notify user of progress
+ |	in parsing the NEXUS file. Virtual function that overrides the pure virtual function in the base class NxsReader.
+ */
+void BASICCMDLINE::ExitingBlock(
+								NxsString )	/* the name of the block just exited */
+{
+}
+
+/*!
+ |	Sets all data members to their factory default settings: `inf_open', `logf_open' and `quit_now' are set to false;
+ |	`message' to the null string, and the pointers `data', `characters', `assumptions', `taxa' and `trees'
+ |	are all set to NULL. The C-string `next_command' is allocated COMMAND_MAXLEN + 1 bytes if it is currently NULL,
+ |	and its first byte is set to the null character to create an empty `next_command' string.
+ */
+void BASICCMDLINE::FactoryDefaults()
+{
+	isEmpty = true;
+	inf_open = false;
+	logf_open = false;
+	quit_now = false;
+	message.clear();
+
+	if (trees != NULL)
+	{
+		Detach(trees);
+		delete trees;
+		trees = NULL;
+	}
+
+	if (taxa != NULL)
+	{
+		Detach(taxa);
+		delete taxa;
+		taxa = NULL;
+	}
+
+	if (assumptions != NULL)
+	{
+		Detach(assumptions);
+		delete assumptions;
+		assumptions = NULL;
+	}
+
+	if (distances != NULL)
+	{
+		Detach(distances);
+		delete distances;
+		distances = NULL;
+	}
+
+	if (characters != NULL)
+	{
+		Detach(characters);
+		delete characters;
+		characters = NULL;
+	}
+
+	if (data != NULL)
+	{
+		Detach(data);
+		delete data;
+		data = NULL;
+	}
+
+	if (next_command == NULL)
+		next_command = new char[COMMAND_MAXLEN + 1];
+	next_command[0] = '\0';
+}
+
+/*!
+ |	Returns true if file named `fn' already exists, false otherwise.
+ */
+bool BASICCMDLINE::FileExists(
+							  const char *fn)	/* the name of the file to check */
+{
+	bool exists = false;
+
+	FILE *fp = fopen(fn, "r");
+	if (fp != NULL)
+	{
+		fclose(fp);
+		exists = true;
+	}
+
+	return exists;
+}
+
+/*!
+ |	Called whenever a file name needs to be read from either the command line or a file. Expects next token to be "="
+ |	followed by the token representing the file name. Call this function after, say, the keyword "file" has been read
+ |	in the following LOG command:
+ |>
+ |	log file=doofus.txt start replace;
+ |>
+ |	Note that this function will read only the "=doofus.txt " leaving "start replace;" in the stream for reading at
+ |	a later time.
+ */
+NxsString BASICCMDLINE::GetFileName(
+									NxsToken &token)	/* the token used to read from `in' */
+{
+	// Eat the equals sign
+	//
+	token.GetNextToken();
+
+	if (!token.Equals("="))
+	{
+		errormsg = "Expecting an equals sign, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+	// Now get the filename itself
+	//
+	token.GetNextToken();
+
+	return token.GetToken();
+}
+
+void BASICCMDLINE::HandleReturnData(
+									NxsToken &token)	/*  the token used to read from `in' */
+{
+	// Get the semicolon following END or ENDBLOCK token
+	//
+	NxsString null=ReturnDataForR(false, true, false);
+	token.GetNextToken();
+
+	if (!token.Equals(";"))
+	{
+		errormsg = "Expecting ';' to terminate the RETURNDATA command, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+}
+
+void BASICCMDLINE::RReturnCharacters(NxsString & nexuscharacters, bool allchar, bool polymorphictomissing, bool levelsall) {
+
+	int nchartoreturn=0;
+	int ntax = taxa->GetNumTaxonLabels();
+	if (!characters->IsEmpty())
+	{
+		//characters->Report(cerr);
+		if (1==characters->GetDataType()) { //standard datatype
+		//if((characters->GetDatatypeName())=="standard") {
+			//nexuscharacters=characters->GetDatatypeName();
+			nexuscharacters+="data.frame(";
+
+			if (allchar) {
+				nchartoreturn=characters->GetNCharTotal();
+			}
+			else {
+				nchartoreturn=characters->GetNChar();
+			}
+			for (int character=0; character<nchartoreturn; character++) { //We only pass the non-eliminated chars
+				NxsString charlabel=characters->GetCharLabel(character);
+				if (character>0) {
+					nexuscharacters+=", ";
+				}
+				if (charlabel.length()>1) {
+					nexuscharacters+="'";
+					nexuscharacters+=charlabel;
+					nexuscharacters+="'";
+				}
+				else {
+					nexuscharacters+="standard_char_";
+					nexuscharacters+=character+1;
+				}
+				nexuscharacters+=" = ";
+
+				nexuscharacters+="factor(c(";
+				for (int taxon=0;taxon<ntax;taxon++) {
+					int statenumber=characters->GetInternalRepresentation(taxon,character,0);
+
+					if(characters->IsMissingState(taxon,character)) {
+						nexuscharacters+="NA";
+					}
+					else if (characters->GetNumStates(taxon,character)>1) {
+						if(polymorphictomissing) {
+							nexuscharacters+="NA";
+						}
+						else {
+							nexuscharacters+='{';
+							for (unsigned int k=0;k<characters->GetNumStates(taxon,character);k++) {
+								nexuscharacters+=characters->GetInternalRepresentation(taxon,character,0);
+								if (k+1<characters->GetNumStates(taxon,character)) {
+									nexuscharacters+=',';
+								}
+							}
+							nexuscharacters+='}';
+						}
+					}
+					else {
+						nexuscharacters+=statenumber;
+					}
+					if (taxon+1<ntax) {
+						nexuscharacters+=',';
+					}
+				}
+				nexuscharacters+=')';
+				if (levelsall) {
+					nexuscharacters+=", levels=c(";
+					for (unsigned int l=0;l<characters->GetMaxObsNumStates(); l++) {
+						nexuscharacters+=l;
+						if (l+1<characters->GetMaxObsNumStates()) {
+							nexuscharacters+=',';
+						}
+					}
+					nexuscharacters+=')';
+				}
+				else {
+
+					NxsString levels=", levels=c(";
+					NxsString labels=", labels=c(";
+					unsigned int totallabellength=0;
+					for (unsigned int l=0;l<characters->GetObsNumStates(character); l++) {
+						labels+='"';
+						labels+= characters->GetStateLabel(character,l);
+						totallabellength+=(characters->GetStateLabel(character,l)).length();
+						labels+='"';
+						levels+= l;
+						if (l+1<characters->GetObsNumStates(character)) {
+							labels+=',';
+							levels+=',';
+						}
+					}
+					levels+=')';
+					labels+=')';
+					//cout<<"labels.length="<<labels.length()<<endl<<"levels.length="<<levels.length()<<endl<<"total label length="<<totallabellength<<endl;
+					if (totallabellength>characters->GetObsNumStates(character)) {
+						nexuscharacters+=levels;
+						nexuscharacters+=labels;
+					}
+				}
+				nexuscharacters+=")\n";
+			}
+			nexuscharacters+=", row.names=c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+=GetRStringLiteral(characters->GetTaxonLabel(taxon));
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+			nexuscharacters+="))";
+		}
+		else if (2==characters->GetDataType() || 3==characters->GetDataType() || 4==characters->GetDataType()) { //dna, rna, nucleotide
+	//	if((characters->GetDatatypeName())=="dna") {
+
+			nexuscharacters+="data.frame(";
+			if (2==characters->GetDataType()) {
+				nexuscharacters+="dna_alignment_1=c(";
+			}
+			else if (3==characters->GetDataType()) {
+				nexuscharacters+="rna_alignment_1=c(";
+			}
+			else {
+				nexuscharacters+="nucleotide_alignment_1=c(";
+			}
+
+			if (allchar) {
+				nchartoreturn=characters->GetNCharTotal();
+			}
+			else {
+				nchartoreturn=characters->GetNChar();
+			}
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+='"';
+				for (int character=0; character<nchartoreturn; character++) {
+					int numstates=characters->GetNumStates(taxon,character);
+					if (characters->IsGapState(taxon,character)) {
+						nexuscharacters+="-";
+					}
+					else if (characters->IsMissingState(taxon,character)) {
+						nexuscharacters+="?";
+					}
+					else if ( numstates == 1) {
+						nexuscharacters+=characters->GetState(taxon,character,0);
+					}
+					else {
+						bool hasA=false;
+						bool hasT=false;
+						bool hasG=false;
+						bool hasC=false;
+						for (int i=0;i<numstates;i++) {
+							unsigned currentstate=characters->GetState(taxon,character,i);
+							if (currentstate=='A') {
+								hasA=true;
+							}
+							else if (currentstate=='T') {
+								hasT=true;
+							}
+							else if (currentstate=='G') {
+								hasG=true;
+							}
+							else if (currentstate=='C') {
+								hasC=true;
+							}
+							else {
+								cout<<"Error: currentstate "<<currentstate<<" does not match ATGC"<<endl;
+							}
+						}
+						if (hasA && hasG && !hasT && !hasC) {
+							nexuscharacters+="R";
+						}
+						else if (!hasA && !hasG && hasC && hasT) {
+							nexuscharacters+="Y";
+						}
+						else if (hasA && !hasG && hasC && !hasT) {
+							nexuscharacters+="M";
+						}
+						else if (!hasA && hasG && !hasC && hasT) {
+							nexuscharacters+="K";
+						}
+						else if (!hasA && hasG && hasC && !hasT) {
+							nexuscharacters+="S";
+						}
+						else if (hasA && !hasG && !hasC && hasT) {
+							nexuscharacters+="W";
+						}
+						else if (hasA && !hasG && hasC && hasT) {
+							nexuscharacters+="H";
+						}
+						else if (!hasA && hasG && hasC && hasT) {
+							nexuscharacters+="B";
+						}
+						else if (hasA && hasG && hasC && !hasT) {
+							nexuscharacters+="V";
+						}
+						else if (hasA && hasG && !hasC && hasT) {
+							nexuscharacters+="D";
+						}
+						else if (hasA && hasG && hasC && hasT) {
+							nexuscharacters+="N";
+						}
+						else {
+							nexuscharacters+="N";
+						}
+					}
+				}
+				nexuscharacters+='"';
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+
+			nexuscharacters+="), row.names=c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+=GetRStringLiteral(characters->GetTaxonLabel(taxon));
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+			nexuscharacters+="), stringsAsFactors=FALSE)";
+
+		}
+		else if (5==characters->GetDataType()) { //protein
+			nexuscharacters+="data.frame(";
+			nexuscharacters+="aa_alignment_1=c(";
+
+
+			if (allchar) {
+				nchartoreturn=characters->GetNCharTotal();
+			}
+			else {
+				nchartoreturn=characters->GetNChar();
+			}
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+='"';
+				for (int character=0; character<nchartoreturn; character++) {
+					int numstates=characters->GetNumStates(taxon,character);
+					if (characters->IsGapState(taxon,character)) {
+						nexuscharacters+="-";
+					}
+					else if (characters->IsMissingState(taxon,character)) {
+						nexuscharacters+="?";
+					}
+					else if ( numstates == 1) {
+						nexuscharacters+=characters->GetState(taxon,character,0);
+					}
+					else {
+						nexuscharacters+="X";
+					}
+				}
+				nexuscharacters+='"';
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+
+			nexuscharacters+="), row.names=c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+=GetRStringLiteral(characters->GetTaxonLabel(taxon));
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+			nexuscharacters+="), stringsAsFactors=FALSE)";
+		}
+		else if (6==characters->GetDataType()) { //continuousnexuscharacters+="data.frame(";
+			nexuscharacters+="data.frame(";
+
+			if (allchar) {
+				nchartoreturn=characters->GetNCharTotal();
+			}
+			else {
+				nchartoreturn=characters->GetNChar();
+			}
+			for (int character=0; character<nchartoreturn; character++) { //We only pass the non-eliminated chars
+				NxsString charlabel=characters->GetCharLabel(character);
+				if (character>0) {
+					nexuscharacters+=", ";
+				}
+				if (charlabel.length()>1) {
+					nexuscharacters+="'";
+					nexuscharacters+=charlabel;
+					nexuscharacters+="'";
+				}
+				else {
+					nexuscharacters+="continuous_char_";
+					nexuscharacters+=character+1;
+				}
+				nexuscharacters+=" = ";
+
+				nexuscharacters+="c(";
+				for (int taxon=0;taxon<ntax;taxon++) {
+					double state=characters->GetSimpleContinuousValue(taxon,character);
+					//cout<<"State at "<<taxon+1<<" char "<<character+1<<" = "<<state<<endl;
+					if (state==DBL_MAX) {
+							nexuscharacters+="NA";
+					}
+					else {
+						char buffer[100];
+						sprintf(buffer, "%.10f", state);
+						nexuscharacters+=buffer;
+					}
+
+					if (taxon+1<ntax) {
+						nexuscharacters+=',';
+					}
+				}
+				nexuscharacters+=")";
+			}
+			nexuscharacters+=", row.names=c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				nexuscharacters+=GetRStringLiteral(characters->GetTaxonLabel(taxon));
+				if (taxon+1<ntax) {
+					nexuscharacters+=',';
+				}
+			}
+			nexuscharacters+="))";
+			//message="Warning: Continuous characters do not work";
+			//PrintMessage();
+		}
+		else {
+				message="Error: character matrix loaded, but does not match any category (dna, standard, etc.)";
+			PrintMessage();
+		}
+		//@MTH I'm not sure why this was here but it looks dangerous.  I'm commenting it out (May 18, 2010):
+		//nexuscharacters=RemoveUnderscoresAndSpaces(nexuscharacters);
+	}
+}
+
+void BASICCMDLINE::RReturnTrees(NxsString & nexustrees) {
+	if (!trees->IsEmpty())
+	{
+
+		nexustrees+= "\nBEGIN TREES;\n";
+		for (unsigned k = 0; k < trees->GetNumTrees(); k++)
+		{
+			NxsString s = trees->GetTreeName(k);
+			s.BlanksToUnderscores();
+			nexustrees+="\tTREE ";
+			nexustrees+=s;
+			nexustrees+=" = ";
+			if (trees->IsRootedTree(k))
+				nexustrees+="[&R]";
+			else
+				nexustrees+="[&U]";
+			nexustrees+=trees->GetTranslatedTreeDescription(k);
+			nexustrees+=";\n";
+		}
+		nexustrees+="END;\n";
+	}
+
+}
+
+void BASICCMDLINE::RReturnDistances(NxsString  & nexusdistances) {
+	int ntax = taxa->GetNumTaxonLabels();
+
+	if (!distances->IsEmpty())
+	{ //fill cols first, first col has taxon 1, first row has taxon 2 (no diags)
+		nexusdistances+="\ndistances <- structure(c(";
+		vector<double> distancevector;
+		for (int col=0;col<ntax-1;col++) {
+			for (int row=col+1;row<ntax;row++) {
+				distancevector.push_back(distances->GetDistance(row,col));
+			}
+		}
+		for (unsigned int i=0;i<distancevector.size();i++) {
+			nexusdistances+=distancevector.at(i);
+			if (i+1<distancevector.size()) {
+				nexusdistances+=',';
+			}
+		}
+		nexusdistances+="), Size = ";
+		nexusdistances+=ntax;
+		nexusdistances+="L, Labels = c(";
+		for (int taxon=0; taxon<ntax;taxon++) {
+			nexusdistances+=GetRStringLiteral(taxa->GetTaxonLabel(taxon));
+			if (taxon+1<ntax) {
+				nexusdistances+=", ";
+			}
+		}
+		nexusdistances+="), Upper = FALSE, Diag = FALSE, class = \"dist\")\n";
+	}
+}
+
+//Break into separate functions,Input is string reference rather than return string
+NxsString BASICCMDLINE::ReturnDataForR(bool allchar, bool polymorphictomissing, bool levelsall) {
+	//allchar: return even eliminated characters if true
+	//polymorphictomissing: convert polymorphic observations to missing if true
+	//levelsall: if true, takes as the number of states the max across all chars
+	//Create one factor per char.
+	//Factor can have info about whether or not a char is ordered, state labels, missing states
+	//(i.e., if a particular char has just states 0 and 2, but the true set of possible states is 0,1,2,3,
+	//you can specify this.
+	//Create a vector of character names if present
+	//Create a vector of taxon names
+	//Make a data frame of all this
+	//Give the data frame to R
+	int nchartoreturn=0;
+	int ntax = taxa->GetNumTaxonLabels();
+	NxsString outputforR = "";
+	if (!characters->IsEmpty())
+	{
+		outputforR+=characters->GetDatatypeName();
+		outputforR+=" <- data.frame(taxa=c(";
+
+		for (int taxon=0;taxon<ntax;taxon++) {
+			outputforR+=GetRStringLiteral(characters->GetTaxonLabel(taxon));
+			if (taxon+1<ntax) {
+				outputforR+=',';
+			}
+		}
+		outputforR+=')';
+		if (allchar) {
+			nchartoreturn=characters->GetNCharTotal();
+		}
+		else {
+			nchartoreturn=characters->GetNChar();
+		}
+		for (int character=0; character<nchartoreturn; character++) { //We only pass the non-eliminated chars
+			NxsString charlabel=characters->GetCharLabel(character);
+			outputforR+=", ";
+			if (charlabel.length()>1) {
+				outputforR+="'";
+				outputforR+=charlabel;
+				outputforR+="'";
+			}
+			else {
+				outputforR+="char";
+				outputforR+=character+1;
+			}
+			outputforR+=" = ";
+
+			outputforR+="factor(c(";
+			for (int taxon=0;taxon<ntax;taxon++) {
+				int statenumber=characters->GetInternalRepresentation(taxon,character,0);
+
+				if(characters->IsMissingState(taxon,character)) {
+					outputforR+="<NA>";
+				}
+				else if (characters->GetNumStates(taxon,character)>1) {
+					if(polymorphictomissing) {
+						outputforR+="<NA>";
+					}
+					else {
+						outputforR+='{';
+						for (unsigned int k=0;k<characters->GetNumStates(taxon,character);k++) {
+							outputforR+=characters->GetInternalRepresentation(taxon,character,0);
+							if (k+1<characters->GetNumStates(taxon,character)) {
+								outputforR+=',';
+							}
+						}
+						outputforR+='}';
+					}
+				}
+				else {
+					outputforR+=statenumber;
+				}
+				if (taxon+1<ntax) {
+					outputforR+=',';
+				}
+			}
+			outputforR+=')';
+			if (levelsall) {
+				outputforR+=", levels=c(";
+				for (unsigned int l=0;l<characters->GetMaxObsNumStates(); l++) {
+					outputforR+=l;
+					if (l+1<characters->GetMaxObsNumStates()) {
+						outputforR+=',';
+					}
+				}
+				outputforR+=')';
+			}
+			else {
+
+				NxsString levels=", levels=c(";
+				NxsString labels=", labels=c(";
+
+				for (unsigned int l=0;l<characters->GetObsNumStates(character); l++) {
+					labels+= characters->GetStateLabel(character,l);
+					levels+= l;
+					if (l+1<characters->GetObsNumStates(character)) {
+						labels+=',';
+						levels+=',';
+					}
+				}
+				levels+=')';
+				labels+=')';
+				if (labels.length()>levels.length()) {
+					outputforR+=levels;
+					outputforR+=labels;
+				}
+			}
+			outputforR+=")\n";
+		}
+		outputforR+=")\n";
+	}
+	if (!taxa->IsEmpty())
+	{
+	}
+
+	if (!trees->IsEmpty())
+	{
+
+		outputforR+= "\nBEGIN TREES;\n";
+		for (unsigned k = 0; k < trees->GetNumTrees(); k++)
+		{
+			NxsString s = trees->GetTreeName(k);
+			s.BlanksToUnderscores();
+			outputforR+="\tTREE ";
+			outputforR+=s;
+			outputforR+=" = ";
+			if (trees->IsRootedTree(k))
+				outputforR+="[&R]";
+			else
+				outputforR+="[&U]";
+			outputforR+=trees->GetTranslatedTreeDescription(k);
+			outputforR+=";\n";
+		}
+		outputforR+="END;\n";
+
+	}
+
+	if (!assumptions->IsEmpty())
+	{
+	}
+
+	if (!distances->IsEmpty())
+	{ //fill cols first, first col has taxon 1, first row has taxon 2 (no diags)
+		outputforR+="\ndistances <- structure(c(";
+		vector<double> distancevector;
+		for (int col=0;col<ntax-1;col++) {
+			for (int row=col+1;row<ntax;row++) {
+				distancevector.push_back(distances->GetDistance(row,col));
+			}
+		}
+		for (unsigned int i=0;i<distancevector.size();i++) {
+			outputforR+=distancevector.at(i);
+			if (i+1<distancevector.size()) {
+				outputforR+=',';
+			}
+		}
+		outputforR+="), Size = ";
+		outputforR+=ntax;
+		outputforR+="L, Labels = c(";
+		for (int taxon=0; taxon<ntax;taxon++) {
+			outputforR+=GetRStringLiteral(taxa->GetTaxonLabel(taxon));
+			if (taxon+1<ntax) {
+				outputforR+=", ";
+			}
+		}
+		outputforR+="), Upper = FALSE, Diag = FALSE, class = \"dist\")\n";
+	}
+
+	if (!data->IsEmpty())
+	{
+	}
+
+	//message=outputforR;
+	//PrintMessage();
+	return outputforR;
+}
+
+/*!
+ |	Called when the END or ENDBLOCK command needs to be parsed from within the BASICCMDLINE block. Basically just
+ |	checks to make sure the next token in the data file is a semicolon.
+ */
+void BASICCMDLINE::HandleEndblock(
+								  NxsToken &token)	/*  the token used to read from `in' */
+{
+	// Get the semicolon following END or ENDBLOCK token
+	//
+	token.GetNextToken();
+
+	if (!token.Equals(";"))
+	{
+		errormsg = "Expecting ';' to terminate the END or ENDBLOCK command, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+}
+
+/*!
+ |	Handles everything after the EXECUTE keyword and the terminating semicolon. Purges all blocks before executing
+ |	file specified, and no warning is given of this.
+ */
+void BASICCMDLINE::HandleExecute(
+								 NxsToken &token)	/* the token used to read from `in' */
+{
+	// Issuing the EXECUTE command from within a file is a no-no (at least in this program)
+	//
+	if (inf_open)
+	{
+		errormsg = "Cannot issue execute command from within a BASICCMDLINE block";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+	// Get the file name to execute (note: if filename contains underscores, these will be
+	// automatically converted to spaces; user should surround such filenames with single quotes)
+	//
+	token.GetNextToken();
+
+	NxsString fn = token.GetToken();
+
+	// Get the semicolon terminating the EXECUTE command
+	//
+	token.GetNextToken();
+
+	if (!token.Equals(";"))
+	{
+		errormsg = "Expecting ';' to terminate the EXECUTE command, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+	ReadFilePath(fn.c_str());
+
+}
+
+void BASICCMDLINE::ReadFilePath(const char * fn)
+{
+	if (FileExists(fn))
+	{
+		cerr << endl;
+		cerr << "Opening " << fn << "..." << endl;
+
+		PurgeBlocks();
+
+		ifstream inf(fn, ios::binary | ios::in);
+
+		inf_open = true;
+
+		MyNexusToken ftoken(inf);
+
+		try
+		{
+			Execute(ftoken);
+		}
+		catch(NxsException x)
+		{
+			NexusError(errormsg, x.pos, x.line, x.col);
+		}
+
+		if (inf_open)
+			inf.close();
+		inf_open = false;
+
+		// Users are allowed to put DATA blocks in their NEXUS files, but internally the data is always
+		// stored in a NxsCharacterBlock object.
+		//
+		if (characters->IsEmpty() && !data->IsEmpty())
+		{
+			data->TransferTo(*characters);
+		}
+
+	}
+	else
+	{
+		cerr << endl;
+		cerr << "Oops! Could not find specified file: " << fn << endl;
+	}
+}
+
+/*!
+ |	Called when the HELP command needs to be parsed from within the BASICCMDLINE block.
+ */
+void BASICCMDLINE::HandleHelp(
+							  NxsToken &token)	/* the token used to read from `in' */
+{
+	// Retrieve all tokens for this command, stopping only in the event
+	// of a semicolon or an unrecognized keyword
+	//
+	for (;;)
+	{
+		token.GetNextToken();
+
+		if (token.Equals(";"))
+		{
+			break;
+		}
+		else
+		{
+			errormsg = "Unexpected keyword (";
+			errormsg += token.GetToken();
+			errormsg += ") encountered reading HELP command";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	}
+
+	message = "\nExamples of use of available commands:";
+	message += "\n  help                     -> shows this message";
+	message += "\n  log file=mylog.txt start -> opens log file named mylog.txt";
+	message += "\n  log stop                 -> closes current log file";
+	message += "\n  exe mydata.nex           -> executes nexus file mydata.nex";
+	message += "\n  show                     -> reports on blocks currently stored";
+	message += "\n  quit                     -> terminates application";
+	message += "\n";
+	PrintMessage();
+}
+
+/*!
+ |	Called when the HELP command needs to be parsed from within the BASICCMDLINE block.
+ */
+void BASICCMDLINE::HandleShow(
+							  NxsToken &token)	/* the token used to read from `in' */
+{
+	// Retrieve all tokens for this command, stopping only in the event
+	// of a semicolon or an unrecognized keyword
+	//
+	for (;;)
+	{
+		token.GetNextToken();
+
+		if (token.Equals(";"))
+			break;
+		else
+		{
+			errormsg = "Unexpected keyword (";
+			errormsg += token.GetToken();
+			errormsg += ") encountered reading HELP command";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	}
+
+	message = "\nNexus blocks currently stored:";
+	PrintMessage();
+
+	if (!taxa->IsEmpty())
+	{
+		cerr << "\n  TAXA block found" << endl;
+		taxa->Report(cerr);
+		if (logf_open)
+			taxa->Report(logf);
+	}
+
+	if (!trees->IsEmpty())
+	{
+		cerr << "\n  TREES block found" << endl;
+		trees->Report(cerr);
+		if (logf_open)
+			trees->Report(logf);
+	}
+
+	if (!assumptions->IsEmpty())
+	{
+		cerr << "\n  ASSUMPTIONS block found" << endl;
+		assumptions->Report(cerr);
+		if (logf_open)
+			assumptions->Report(logf);
+	}
+
+	if (!distances->IsEmpty())
+	{
+		cerr << "\n  DISTANCES block found" << endl;
+		distances->Report(cerr);
+		if (logf_open)
+			distances->Report(logf);
+	}
+
+	if (!characters->IsEmpty())
+	{
+		cerr << "\n  CHARACTERS block found" << endl;
+		characters->Report(cerr);
+		if (logf_open)
+			characters->Report(logf);
+	}
+
+	if (!data->IsEmpty())
+	{
+		cerr << "\n  DATA block found" << endl;
+		data->Report(cerr);
+		if (logf_open)
+			data->Report(logf);
+	}
+}
+
+/*!
+ |	Called when the LOG command needs to be parsed from within the BASICCMDLINE block.
+ */
+void BASICCMDLINE::HandleLog(
+							 NxsToken &token)	/* the token used to read from `in' */
+{
+	bool starting = false;
+	bool stopping = false;
+	bool appending = false;
+	bool replacing = false;
+	bool name_provided = false;
+	NxsString logfname;
+
+	// Retrieve all tokens for this command, stopping only in the event
+	// of a semicolon or an unrecognized keyword
+	//
+	for (;;)
+	{
+		token.GetNextToken();
+
+		if (token.Equals(";"))
+		{
+			break;
+		}
+		else if (token.Abbreviation("STOp"))
+		{
+			stopping = true;
+		}
+		else if (token.Abbreviation("STArt"))
+		{
+			starting = true;
+		}
+		else if (token.Abbreviation("Replace"))
+		{
+			replacing = true;
+		}
+		else if (token.Abbreviation("Append"))
+		{
+			appending = true;
+		}
+		else if (token.Abbreviation("File"))
+		{
+			logfname = GetFileName(token);
+			name_provided = true;
+		}
+		else
+		{
+			errormsg = "Unexpected keyword (";
+			errormsg += token.GetToken();
+			errormsg += ") encountered reading LOG command";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	}
+
+	// Check for incompatible combinations of keywords
+	//
+	if (stopping && (starting || appending || replacing || name_provided))
+	{
+		errormsg = "Cannot specify STOP with any of the following START, APPEND, REPLACE, FILE";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+	if (appending && replacing)
+	{
+		errormsg = "Cannot specify APPEND and REPLACE at the same time";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+	if (logf_open && (starting || name_provided || appending || replacing))
+	{
+		errormsg = "Cannot start log file since log file is already open";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+	// Is user closing an open log file?
+	//
+	if (stopping)
+	{
+		logf.close();
+		logf_open = false;
+
+		message = "\nLog file closed";
+		PrintMessage();
+
+		return;
+	}
+
+	// If this far, must be attempting to open a log file
+	//
+	if (!name_provided)
+	{
+		errormsg = "Must provide a file name when opening a log file\n";
+		errormsg += "e.g., log file=doofus.txt start replace;";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+	if (appending)
+	{
+		logf_open = true;
+		logf.open(logfname.c_str(), ios::out | ios::app);
+
+		message = "\nAppending to log file ";
+		message += logfname;
+		PrintMessage();
+	}
+
+	else if (replacing)
+	{
+		logf_open = true;
+		logf.open(logfname.c_str());
+
+		message = "\nReplacing log file ";
+		message += logfname;
+		PrintMessage();
+	}
+
+	else
+	{
+		bool exists = FileExists(logfname.c_str());
+		bool userok = true;
+		if (exists && !UserQuery("Ok to replace?", "Log file specified already exists", BASICCMDLINE::UserQueryEnum(BASICCMDLINE::uq_yes | BASICCMDLINE::uq_no)))
+			userok = false;
+
+		if (userok)
+		{
+			logf_open = true;
+			logf.open(logfname.c_str());
+		}
+
+		if (exists && userok)
+		{
+			message = "\nReplacing log file ";
+			message += logfname;
+		}
+
+		else if (userok)
+		{
+			message = "\nLog file ";
+			message += logfname;
+			message += " opened";
+		}
+
+		else
+		{
+			message = "\nLog command aborted";
+		}
+
+		PrintMessage();
+	}
+}
+
+/*!
+ |	Accepts a string in the form of a BASICCMDLINE block containing one command and processes it just like a real
+ |	BASICCMDLINE block in a NEXUS data file.
+ */
+void BASICCMDLINE::HandleNextCommand()
+{
+	std::istringstream cmdin(next_command);
+
+	MyNexusToken token(cmdin);
+	try
+	{
+		Read(token);
+	}
+	catch(NxsException x)
+	{
+		NexusError(errormsg, x.pos, x.line, x.col);
+	}
+}
+
+/*!
+ |	Called when an error is encountered in a NEXUS file. Allows program to give user details of the error as well as
+ |	the precise location of the error.
+ */
+void BASICCMDLINE::NexusError(
+							  NxsString msg,	/* the error message */
+							  file_pos ,		/* the point in the NEXUS file where the error occurred */
+							  long line,		/* the line in the NEXUS file where the error occurred */
+							  long col)			/* the column in the NEXUS file where the error occurred */
+{
+	message = "\n";
+	message += msg;
+	PrintMessage();
+
+	if (inf_open)
+	{
+		message = "Line:   ";
+		message += line;
+		PrintMessage();
+
+		message = "Column: ";
+		message += col;
+		PrintMessage();
+	}
+}
+
+/*!
+ |	Begins with the command just entered by the user, which is stored in the data member `next_command', adds a
+ |	semicolon (if the user failed to supply one), and then adds the string "end;" so the whole bundle looks like a
+ |	very short BASICCMDLINE block. This is then passed to HandleNextCommand, which processes it just like a real
+ |	BASICCMDLINE block in a NEXUS data file.
+ */
+void BASICCMDLINE::PreprocessNextCommand()
+{
+	// If user failed to add the terminating semicolon, we'll do it now. We will also remove the line feed
+	// at the end and add the command "end;" to the end of the line (see explanation below).
+	//
+	unsigned len = (unsigned)strlen(next_command);
+	assert(len > 0);
+
+	// Remove any whitespace characters from end of string entered by user
+	//
+	unsigned i = len;
+	while (i > 0 && (next_command[i-1] == ' ' || next_command[i-1] == '\t' || next_command[i-1] == '\n'))
+		i--;
+
+	// If character at position i - 1 is a semicolon, put '\0' terminator at position i;
+	// otherwise, put a semicolon at position i and terminator at i + 1
+	//
+	if (next_command[i-1] != ';')
+	{
+		next_command[i] = ';';
+		i++;
+	}
+	assert(i <= COMMAND_MAXLEN);
+	next_command[i] = '\0';
+
+	// Now add a semicolon at the beginning and terminate with an "END;" command
+	// so that we can pretend this is simply a very short private NEXUS block
+	// containing only one command.  This allows us to simply use the Read
+	// function we inherited from the base class BstBase to process the command.
+	//
+	len = (unsigned)strlen(next_command);
+	assert(len < COMMAND_MAXLEN-2);
+	NxsString tmp = ";";
+	tmp += next_command;
+	tmp += "end;";
+	strcpy(next_command, tmp.c_str());
+}
+
+/*!
+ |	All output is funneled through here. Writes string currently stored in `message' (a NxsString data member) to the
+ |	output file stream, if open, and also to the console via cerr. Places a newline after the string if `linefeed' is
+ |	true.
+ */
+void BASICCMDLINE::PrintMessage(
+								bool linefeed)	/* if true, places newline character after message */
+{
+	cerr << message;
+	if (linefeed)
+		cerr << endl;
+
+	if (logf_open)
+	{
+		logf << message;
+		if (linefeed)
+			logf << endl;
+	}
+}
+
+/*!
+ |	Detaches all blocks, deletes them, creates new blocks, and finally adds the new blocks. Call this function if
+ |	you want to be sure that there is no data currently stored in any blocks.
+ */
+void BASICCMDLINE::PurgeBlocks()
+{
+	if (blockList != NULL)
+	{
+		Detach(taxa);
+		Detach(trees);
+		Detach(assumptions);
+		Detach(distances);
+		Detach(characters);
+		Detach(data);
+	}
+
+	delete taxa;
+	delete trees;
+	delete assumptions;
+	delete distances;
+	delete characters;
+	delete data;
+
+	taxa		= new NxsTaxaBlock();
+	trees		= new NxsTreesBlock(taxa);
+	assumptions	= new NxsAssumptionsBlock(taxa);
+	distances	= new NxsDistancesBlock(taxa);
+	characters	= new NxsCharactersBlock(taxa, assumptions);
+	data		= new NxsDataBlock(taxa, assumptions);
+
+	Add(taxa);
+	Add(trees);
+	Add(assumptions);
+	Add(distances);
+	Add(characters);
+	Add(data);
+}
+
+/*!
+ |	This function provides the ability to read everything following the block name (which is read by the NxsReader
+ |	object) to the END or ENDBLOCK statement. Characters are read from the input stream `in'. Overrides the virtual
+ |	function in the base class.
+ */
+void BASICCMDLINE::Read(
+						NxsToken &token)	/* the token used to read from `in' */
+{
+	isEmpty = false;
+
+	// This should be the semicolon after the block name
+	//
+	token.GetNextToken();
+
+	if (!token.Equals(";"))
+	{
+		errormsg = "Expecting ';' after ";
+		errormsg += NCL_BLOCKTYPE_ATTR_NAME;
+		errormsg += " block name, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+	for (;;)
+	{
+		token.GetNextToken();
+
+		if (token.Abbreviation("ENdblock"))
+		{
+			HandleEndblock(token);
+			break;
+		}
+		else if (token.Abbreviation("Help"))
+		{
+			HandleHelp(token);
+		}
+		else if (token.Abbreviation("Log"))
+		{
+			HandleLog(token);
+		}
+		else if (token.Abbreviation("EXecute"))
+		{
+			HandleExecute(token);
+		}
+		else if (token.Abbreviation("Show"))
+		{
+			HandleShow(token);
+		}
+		else if (token.Abbreviation("REturn"))
+		{
+			HandleReturnData(token);
+			//NxsString null=ReturnDataForR(false, true, false);
+		}
+		else if (token.Abbreviation("Quit"))
+		{
+			quit_now = true;
+
+			message = "\nBASICCMDLINE says goodbye\n";
+			PrintMessage();
+
+			break;
+		}
+		else
+		{
+			SkippingCommand(token.GetToken());
+			do
+			{
+				token.GetNextToken();
+			}
+			while (!token.AtEOF() && !token.Equals(";"));
+
+			if (token.AtEOF())
+			{
+				errormsg = "Unexpected end of file encountered";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		}
+	}
+}
+
+/*!
+ |	Overrides the NxsBlock virtual function. This function does nothing because the BASICCMDLINE block is simply a
+ |	private command block and does not store any data.
+ */
+void BASICCMDLINE::Reset()
+{
+	NxsBlock::Reset();
+}
+
+/*!
+ |	This function outputs a brief report of the contents of this BASICCMDLINE block. Overrides the virtual function
+ |	in the NxsBlock base class.
+ */
+void BASICCMDLINE::Report(
+						  ostream &out)	/* the output stream to which to write the report */
+{
+	message.clear();
+	PrintMessage();
+	out << message << '\n';
+	message = NCL_BLOCKTYPE_ATTR_NAME;
+	message += " block contains...";
+	PrintMessage();
+	out << message << '\n';
+}
+
+/*!
+ |	Runs the command line interpreter, allowing BASICCMDLINE to interact with user. Typically, this is the only
+ |	function called in main after a BASICCMDLINE object is created. If `infile_name' is non-NULL, the first command
+ |	executed by the command interpreter will be "EXECUTE `infile_name'".
+ */
+void BASICCMDLINE::Run(
+					   char *infile_name)	/* the name of the NEXUS data file to execute (can be NULL) */
+{
+
+	if (infile_name != NULL)
+	{
+		strcpy(next_command, "exe ");
+		strncat(next_command, infile_name, 252);
+		PreprocessNextCommand();
+		HandleNextCommand();
+	}
+
+	quit_now = false;
+	while (!quit_now)
+	{
+		cerr << endl;
+		cerr << "BASICCMDLINE> ";
+		//cin.getline(next_command, COMMAND_MAXLEN);
+		unsigned i = 0;
+		for(;;)
+		{
+			int ch = cin.get();
+			if (i > COMMAND_MAXLEN)
+			{
+				cerr << endl;
+				cerr << "Error: the length of any one command cannot exceed ";
+				cerr << COMMAND_MAXLEN << " characters" << endl;
+				break;
+			}
+			else if (ch == 10 || ch == 13)
+				break;
+			next_command[i++] = (char)ch;
+			next_command[i] = '\0';
+		}
+		PreprocessNextCommand();
+		HandleNextCommand();
+	}
+}
+
+void BASICCMDLINE::Initialize(
+					   char *infile_name,	/* the name of the NEXUS data file to execute (can be NULL) */
+					   int verboseLevel
+{
+	ReadFilePath(infile_name);
+}
+
+
+/*!
+ |	Called when program does not recognize a block name encountered in a NEXUS file. Virtual function that overrides
+ |	the virtual function in the base class NxsReader.
+ */
+void BASICCMDLINE::SkippingBlock(
+								 NxsString blockName)	/* the unrecognized block name */
+{
+	message = "Skipping unknown block (";
+	message += blockName;
+	message += ")";
+	PrintMessage();
+}
+
+/*!
+ |	This function is called when an unknown command named `commandName' is about to be skipped. This version of the
+ |	function (which is identical to the base class version) does nothing (i.e., no warning is issued that a command
+ |	was unrecognized). Modify this virtual function to provide such warnings to the user (or eliminate it altogether
+ |	since the base class version already does what this does).
+ */
+void BASICCMDLINE::SkippingCommand(
+								   NxsString commandName)	/* the name of the command being skipped */
+{
+	message = "Skipping unknown command (";
+	message += commandName;
+	message += ")";
+	PrintMessage();
+}
+
+/*!
+ |	Called by the NxsReader object when skipping a block named blockName that has been disabled. Allows program to
+ |	notify user of progress in parsing the NEXUS file. Virtual function that overrides the virtual function in the
+ |	base class NxsReader.
+ */
+void BASICCMDLINE::SkippingDisabledBlock(
+										 NxsString )	/* the name of the block just exited */
+{
+}
+
+/*!
+ |	The code here is identical to the base class version (simply returns 0), so the code here should either be modified
+ |	or this derived version eliminated altogether. Under what circumstances would you need to modify the default code,
+ |	you ask? This function should be modified to something meaningful if this derived class needs to construct and run
+ |	a NxsSetReader object to read a set involving taxa. The NxsSetReader object may need to use this function to look
+ |	up a taxon label encountered in the set. A class that overrides this method should return the taxon index in the
+ |	range [1..ntax]; i.e., add one to the 0-offset index.
+ */
+unsigned BASICCMDLINE::TaxonLabelToNumber(
+										  NxsString )	/* the taxon label to be translated to a taxon number */
+{
+	return 0;
+}
+
+/*!
+ |	Returns true if response is either "ok" or "yes", and returns false if response is either "no" or "cancel".
+ |	This is a general query function that can handle many situations. The possible responses are enumerated in
+ |	BASICCMDLINE::UserQueryEnum: uq_cancel, uq_ok, uq_yes, and uq_no. Not yet fully implemented: only handles uq_ok
+ |	alone or the (uq_yes | uq_no) combination.
+ */
+bool BASICCMDLINE::UserQuery(
+							 NxsString mb_message,						/* the question posed to the user */
+							 NxsString mb_title,						/* the title of the message box */
+							 BASICCMDLINE::UserQueryEnum mb_choices)	/* bit combination of uq_xx values indicating which buttons to show */
+{
+	const bool yes_no			= (mb_choices == (BASICCMDLINE::uq_yes | BASICCMDLINE::uq_no));
+	const bool ok_only		= (mb_choices == BASICCMDLINE::uq_ok);
+	assert(ok_only || yes_no); // Still working on other choices
+
+	if (ok_only)
+	{
+		cerr << endl;
+		cerr << mb_title << endl;
+		cerr << "  " << mb_message;
+		cerr << " (press return to acknowledge) ";
+		cin.getline(next_command, COMMAND_MAXLEN);
+		return true;
+	}
+	cerr << endl;
+	cerr << mb_title << endl;
+	cerr << "  " << mb_message;
+	cerr << " (y/n) ";
+
+	cin.getline(next_command, COMMAND_MAXLEN);
+
+	// This could be made much simpler by just checking first letter: if 'y' then
+	// assume yes, if 'n' assume no.
+	//
+	bool yep  = (next_command[0] == 'y' && next_command[1] == '\0');
+	bool nope = (next_command[0] == 'n' && next_command[1] == '\0');
+
+	while (!yep && !nope)
+	{
+		cerr << endl;
+		cerr << "Must answer by typing either y or n and then pressing the Enter key" << endl;
+		cerr << endl;
+		cerr << mb_title << endl;
+		cerr << "  " << mb_message;
+		cerr << " (y/n) ";
+
+		cin.getline(next_command, COMMAND_MAXLEN);
+		yep  = (next_command[0] == 'y' && next_command[1] == '\0');
+		nope = (next_command[0] == 'n' && next_command[1] == '\0');
+	}
+
+	return yep;
+}
+
+
+#endif // #if defined(NEW_NCL_INTERFACE)
+
+
+NxsString BASICCMDLINE::RemoveUnderscoresAndSpaces(NxsString input) const
+{
+	while (input.find( "_", 0 ) != string::npos ) {
+		input.erase((input.find( "_", 0 )),1);
+	}
+	while (input.find( " ", 0 ) != string::npos ) {
+		input.erase((input.find( " ", 0 )),1);
+	}
+	input+="";
+	return input;
+}
+
+
+int main(int argc, char *argv[])
+{
+	BASICCMDLINE basiccmdline;
+	for (int i = 1; i < argc; ++i) {
+		basiccmdline.Initialize(argv[i]);
+	}
+	NxsString t;
+	basiccmdline.RReturnCharacters(t, true, false, false);
+	if (!t.empty())
+		cout << t << '\n';
+	t.clear();
+	basiccmdline.RReturnTrees(t);
+	if (!t.empty())
+		cout << t << '\n';
+	t.clear();
+	basiccmdline.RReturnDistances(t);
+	if (!t.empty())
+		cout << t << '\n';
+	return 0;
+}
+
diff --git a/example/phylobaseinterface/NCLInterface.h b/example/phylobaseinterface/NCLInterface.h
new file mode 100644
index 0000000..24980e5
--- /dev/null
+++ b/example/phylobaseinterface/NCLInterface.h
@@ -0,0 +1,304 @@
+//  Copyright (C) 2007-2008 Brian O'Meara & Derrick Zwickl
+//  A modification of the BasicCommandLine file of the NCL (see below)
+//  to use for loading trees and data from Nexus into R. Licensing as below.
+
+//	Copyright (C) 1999-2002 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_INTERFACE_H
+#define NCL_INTERFACE_H
+
+
+#define NEW_NCL_INTERFACE
+
+std::string GetRStringLiteral(const std::string & inp);
+
+#if defined(NEW_NCL_INTERFACE)
+
+//  Copyright (C) 2007-2008 Brian O'Meara & Derrick Zwickl
+//	Copyright (C) 2007-2008 Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+/*******************************************************************************
+ * This file merges content NEXUSnormalizer and phylobase NCLInterface.{h,cpp}
+ by  Brian O'Meara & Derrick Zwickl
+
+
+ */
+#include "ncl/ncl.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxspublicblocks.h"
+#include "ncl/nxsmultiformat.h"
+#include <cassert>
+
+using namespace std;
+class BASICCMDLINE {
+		enum MessageLevel {
+			DEBUG_MESSAGE_LEVEL = 0,
+			STATUS_MESSAGE_LEVEL = 1,
+			REPORT_MESSAGE_LEVEL = 2,
+			WARNING_MESSAGE_LEVEL = 3,
+			ERROR_MESSAGE_LEVEL = 4
+		};
+	public:
+		BASICCMDLINE()
+			: nexusReader(0L),
+			verboseLevel(REPORT_MESSAGE_LEVEL),
+			fmt(MultiFormatReader::NEXUS_FORMAT),
+			gStrictLevel(2),
+			warningLevel(NxsReader::SUPPRESS_WARNINGS_LEVEL)
+			{}
+		~BASICCMDLINE(){
+			Clear();
+		}
+
+		// verbosity level here refers to facets of the NxsReader::NxsWarnLevel enum (not the MessageLevel above)
+		void Initialize(char *infile_name, int verbosityLevel=8) {
+			if (verbosityLevel >= NxsReader::SUPPRESS_WARNINGS_LEVEL) {
+				this->warningLevel = NxsReader::SUPPRESS_WARNINGS_LEVEL;
+				this->verboseLevel = WARNING_MESSAGE_LEVEL;
+			}
+			else if (verbosityLevel >= 0) {
+				this->warningLevel = NxsReader::NxsWarnLevel(verboseLevel);
+			}
+			processFilepath(infile_name);
+		}
+		void Clear();
+
+		void RReturnCharacters(NxsString & nexuscharacters, bool allchar, bool polymorphictomissing, bool levelsall);
+		void RReturnTrees(NxsString & nexustrees);
+		void RReturnDistances(NxsString & nexusdistances);
+
+		std::string TestRunning();
+
+
+	private:
+		NxsString			RemoveUnderscoresAndSpaces(NxsString input) const;
+
+		void AppendRContent(
+				  NxsString & nexuscharacters,
+				  NxsCharactersBlock &characters,
+				  bool allchar,
+				  bool polymorphictomissing,
+				  bool levelsall) const;
+		void AppendRContent(NxsString & nexuscharacters,  NxsTreesBlock &treesB) const;
+
+		void AppendRContent(NxsString & nexuscharacters, NxsDistancesBlock &distancesB) const;
+
+		void processFilepath(const char * filename);
+		void statusMessage(const std::string & m)  const{
+			this->writeMessage(STATUS_MESSAGE_LEVEL, m);
+		}
+		void errorMessage(const std::string & m)  const{
+			this->writeMessage(ERROR_MESSAGE_LEVEL, m);
+		}
+		void writeMessage(MessageLevel level, const std::string & m) const;
+
+		MultiFormatReader * nexusReader;
+		int verboseLevel;
+		MultiFormatReader::DataFormatType fmt;
+		long gStrictLevel;
+		NxsReader::NxsWarnLevel warningLevel; // passed to NxsReader to discriminate between different levels of NexusWarning
+};
+
+#else // NEW_NCL_INTERFACE
+
+
+
+
+
+#define COMMAND_MAXLEN  255
+
+/*!
+	BASICCMDLINE provides a template for creating a program that reads NEXUS data files and provides a basic command
+	line. After compiling BASICCMDLINE, you will already have a program that understands the following commands, either
+	typed in at the console or provided in a BASICCMDLINE block in a NEXUS data file (exception is the execute command,
+	which can only be entered at the console). Keywords in the descriptions below are given in uppercase, however the
+	commands themselves are case-insensitive. Lower-case indicates a parameter supplied by the user (e.g., "filename"
+	would be replaced by the actual name of the file). Square brackets indicate optional keywords or subcommands.
+>
+	EXECUTE filename;
+
+	LOG [options];
+
+	  Option         Action
+	  ------------------------------------------------------
+	  FILE=filename  specifies name of log file to start
+	  START          indicates logging is to be started
+	  STOP           indicates logging is to be stopped
+	  APPEND         append to log file if it already exists
+	  REPLACE        replace log file without asking
+
+	QUIT;
+>
+	See the Read function for details and to add other commands.
+
+	To change the name of the program (which is also the prompt name and the name of the program's private NEXUS
+	block), replace all occurrences of BASICCMDLINE with the name of your program (also search for the string
+	"basiccmdline" and replace with an appropriate string at each occurrence).
+
+	This class handles reading and storage for the NxsReader block BASICCMDLINE. It also serves as the main class for
+	the program BASICCMDLINE, acting as both a NxsReader object (in order to be capable of parsing data files) as well
+	as a NxsBlock object (in order to be able to process commands in a BASICCMDLINE block).
+
+	Acting as a NxsBlock, it overrides the member functions Read and Reset, which are virtual functions in the base
+	class NxsBlock. Acting as a NxsReader object, it overrides the member functions EnteringBlock, SkippingBlock, and
+	NexusError.
+
+	Adding a new data member? Don't forget to:
+~
+	o Describe it in the class header comment at the top of "basiccmdline.h"
+	o Initialize it (unless it is self-initializing) in the constructor and reinitialize it in the Reset function
+	o Describe the initial state in the constructor documentation
+	o Delete memory allocated to it in both the destructor and Reset function
+	o Report it in some way in the Report function
+~
+*/
+class BASICCMDLINE
+  : public NxsBlock,
+  public NxsReader
+	{
+	public:
+
+		enum UserQueryEnum		/* enumeration used with UserQuery member function to specify which choices to provide the user */
+			{
+			uq_cancel = 0x01,	/* provide opportunity to cancel */
+			uq_ok	  = 0x02,	/* provide opportunity to answer ok */
+			uq_yes	  = 0x04,	/* provide opportunity to answer yes */
+			uq_no 	  = 0x08	/* provide opportunity to answer no */
+			};
+
+							BASICCMDLINE();
+		virtual				~BASICCMDLINE();
+
+		bool				EnteringBlock(NxsString blockName);
+		void				ExitingBlock(NxsString blockName);
+		void				ExecuteStarting();
+		void				ExecuteStopping();
+		void				OutputComment(const NxsString &msg);
+		void				HandleNextCommand();
+		void				NexusError(NxsString msg, file_pos pos, long line, long col);
+		void				PreprocessNextCommand();
+		void				PrintMessage(bool linefeed = true);
+		virtual void		Report(ostream &out);
+		void				Run(char *infile_name);
+		void				Initialize(char *infile_name); //@@should be const char * !!! it is not being modified, but changing will break phylobase's ReadWithNCL
+		void				SkippingBlock(NxsString blockName);
+		void				SkippingCommand(NxsString commandName);
+		void				SkippingDisabledBlock(NxsString blockName);
+		virtual bool		UserQuery(NxsString mb_message, NxsString mb_title, BASICCMDLINE::UserQueryEnum mb_choices = BASICCMDLINE::uq_ok);
+		void				HandleReturnData(NxsToken& token);
+		NxsString			ReturnDataForR(bool allchar, bool polymorphictomissing, bool levelsall);
+		NxsString			RemoveUnderscoresAndSpaces(NxsString input);
+		void				RReturnCharacters(NxsString & nexuscharacters, bool allchar, bool polymorphictomissing, bool levelsall);
+		void				RReturnTrees(NxsString & nexustrees);
+		void				RReturnDistances(NxsString & nexusdistances);
+		string				TestRunning();
+
+		void 				ReadFilePath(const char * fn);
+	protected:
+
+		bool				inf_open;			/* true if `inf' is currently open */
+		bool				logf_open;			/* true if `logf' is currently open */
+		bool				quit_now;			/* set to false at beginning of Run and turns true only when QUIT command processed */
+		ofstream			logf;				/* the log file output stream */
+		NxsString			message;			/* workspace for composing output strings */
+		NxsTreesBlock		*trees;				/* pointer to NxsTreesBlock object */
+		NxsTaxaBlock		*taxa;				/* pointer to NxsTaxaBlock object */
+		NxsAssumptionsBlock	*assumptions;		/* pointer to NxsAssumptionsBlock object */
+		NxsDistancesBlock	*distances;			/* pointer to NxsDistancesBlock object */
+		NxsCharactersBlock	*characters;		/* pointer to NxsCharactersBlock object */
+		NxsDataBlock		*data;				/* pointer to NxsDataBlock object */
+		char				*next_command;		/* workspace for processing next command entered interactively by user */
+		unsigned			CharLabelToNumber(NxsString s);
+		bool				FileExists(const char* fn);
+		NxsString			GetFileName(NxsToken& token);
+		void				FactoryDefaults();
+		void				HandleEndblock(NxsToken& token);
+		void				HandleShow(NxsToken& token);
+		void				HandleHelp(NxsToken& token);
+		void				HandleLog(NxsToken& token);
+		void				HandleExecute(NxsToken& token);
+		void				PurgeBlocks();
+		virtual void		Read(NxsToken& token);
+		virtual void		Reset();
+		unsigned			TaxonLabelToNumber(NxsString s);
+	};
+
+/*!
+	The MyNexusToken class provides a NxsToken-derived object that can display output comments as it encounters them.
+	The virtual function NxsToken::OutputComment is overridden in this class for this purpose.
+*/
+class MyNexusToken
+  : public NxsToken
+	{
+	public:
+				MyNexusToken(istream &i);
+
+		void	OutputComment(const NxsString &msg);
+	};
+
+/*!
+	Will be called by NxsReader::Execute after the initial "#NEXUS" keyword is found in a NEXUS file but before other
+	tokens are read. Add code here if you need to do any initializations prior to encountering any NEXUS blocks in a
+	NEXUS data file.
+*/
+inline void BASICCMDLINE::ExecuteStarting()
+	{
+	}
+
+/*!
+	Will be called by NxsReader::Execute just before it exits after reading to the end of a NEXUS data file (or until
+	encountering a LEAVE command between NEXUS blocks. Add code here if you need to clean up any memory allocated in
+	ExecuteStarting.
+*/
+inline void BASICCMDLINE::ExecuteStopping()
+	{
+	}
+
+/*!
+	Called if an "output comment" is encountered in a NEXUS data file. An output comment is a comment [text enclosed in
+	square brackets] that begins with an exclamation point. [!This is an example of a NEXUS output comment]. Output
+	comments are supposed to be displayed when encountered. Modify this function's body to display output comments,
+	which are made available as they are encountered via the `msg' argument.
+*/
+inline void	BASICCMDLINE::OutputComment(const NxsString &)
+	{
+	}
+
+#endif //NEW_NCL_INTERFACE
+
+#endif
+
diff --git a/example/splitsinfile/Makefile.am b/example/splitsinfile/Makefile.am
new file mode 100644
index 0000000..d50c4ad
--- /dev/null
+++ b/example/splitsinfile/Makefile.am
@@ -0,0 +1,7 @@
+LDADD       = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = NEXUStosplits majrule
+noinst_HEADERS = splitsstructs.h
+NEXUStosplits_SOURCES = splitsinfile.cpp splitsstructs.cpp
+majrule_SOURCES = splitsinfile.cpp splitsstructs.cpp
+NEXUStosplits_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/example/splitsinfile/Makefile.in b/example/splitsinfile/Makefile.in
new file mode 100644
index 0000000..2b532a8
--- /dev/null
+++ b/example/splitsinfile/Makefile.in
@@ -0,0 +1,529 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = NEXUStosplits$(EXEEXT) majrule$(EXEEXT)
+subdir = example/splitsinfile
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_NEXUStosplits_OBJECTS = NEXUStosplits-splitsinfile.$(OBJEXT) \
+	NEXUStosplits-splitsstructs.$(OBJEXT)
+NEXUStosplits_OBJECTS = $(am_NEXUStosplits_OBJECTS)
+NEXUStosplits_LDADD = $(LDADD)
+NEXUStosplits_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+am_majrule_OBJECTS = splitsinfile.$(OBJEXT) splitsstructs.$(OBJEXT)
+majrule_OBJECTS = $(am_majrule_OBJECTS)
+majrule_LDADD = $(LDADD)
+majrule_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(NEXUStosplits_SOURCES) $(majrule_SOURCES)
+DIST_SOURCES = $(NEXUStosplits_SOURCES) $(majrule_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_HEADERS = splitsstructs.h
+NEXUStosplits_SOURCES = splitsinfile.cpp splitsstructs.cpp
+majrule_SOURCES = splitsinfile.cpp splitsstructs.cpp
+NEXUStosplits_CPPFLAGS = $(AM_CPPFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/splitsinfile/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/splitsinfile/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+NEXUStosplits$(EXEEXT): $(NEXUStosplits_OBJECTS) $(NEXUStosplits_DEPENDENCIES) 
+	@rm -f NEXUStosplits$(EXEEXT)
+	$(CXXLINK) $(NEXUStosplits_OBJECTS) $(NEXUStosplits_LDADD) $(LIBS)
+majrule$(EXEEXT): $(majrule_OBJECTS) $(majrule_DEPENDENCIES) 
+	@rm -f majrule$(EXEEXT)
+	$(CXXLINK) $(majrule_OBJECTS) $(majrule_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUStosplits-splitsinfile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUStosplits-splitsstructs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/splitsinfile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/splitsstructs.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+NEXUStosplits-splitsinfile.o: splitsinfile.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStosplits_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUStosplits-splitsinfile.o -MD -MP -MF $(DEPDIR)/NEXUStosplits-splitsinfile.Tpo -c -o NEXUStosplits-splitsinfile.o `test -f 'splitsinfile.cpp' || echo '$(srcdir)/'`splitsinfile.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUStosplits-splitsinfile.Tpo $(DEPDIR)/NEXUStosplits-splitsinfile.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='splitsinfile.cpp' object='NEXUStosplits-splitsinfile.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStosplits_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUStosplits-splitsinfile.o `test -f 'splitsinfile.cpp' || echo '$(srcdir)/'`splitsinfile.cpp
+
+NEXUStosplits-splitsinfile.obj: splitsinfile.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStosplits_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUStosplits-splitsinfile.obj -MD -MP -MF $(DEPDIR)/NEXUStosplits-splitsinfile.Tpo -c -o NEXUStosplits-splitsinfile.obj `if test -f 'splitsinfile.cpp'; then $(CYGPATH_W) 'splitsinfile.cpp'; else $(CYGPATH_W) '$(srcdir)/splitsinfile.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUStosplits-splitsinfile.Tpo $(DEPDIR)/NEXUStosplits-splitsinfile.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='splitsinfile.cpp' object='NEXUStosplits-splitsinfile.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStosplits_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUStosplits-splitsinfile.obj `if test -f 'splitsinfile.cpp'; then $(CYGPATH_W) 'splitsinfile.cpp'; else $(CYGPATH_W) '$(srcdir)/splitsinfile.cpp'; fi`
+
+NEXUStosplits-splitsstructs.o: splitsstructs.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStosplits_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUStosplits-splitsstructs.o -MD -MP -MF $(DEPDIR)/NEXUStosplits-splitsstructs.Tpo -c -o NEXUStosplits-splitsstructs.o `test -f 'splitsstructs.cpp' || echo '$(srcdir)/'`splitsstructs.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUStosplits-splitsstructs.Tpo $(DEPDIR)/NEXUStosplits-splitsstructs.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='splitsstructs.cpp' object='NEXUStosplits-splitsstructs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStosplits_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUStosplits-splitsstructs.o `test -f 'splitsstructs.cpp' || echo '$(srcdir)/'`splitsstructs.cpp
+
+NEXUStosplits-splitsstructs.obj: splitsstructs.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStosplits_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUStosplits-splitsstructs.obj -MD -MP -MF $(DEPDIR)/NEXUStosplits-splitsstructs.Tpo -c -o NEXUStosplits-splitsstructs.obj `if test -f 'splitsstructs.cpp'; then $(CYGPATH_W) 'splitsstructs.cpp'; else $(CYGPATH_W) '$(srcdir)/splitsstructs.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUStosplits-splitsstructs.Tpo $(DEPDIR)/NEXUStosplits-splitsstructs.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='splitsstructs.cpp' object='NEXUStosplits-splitsstructs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStosplits_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUStosplits-splitsstructs.obj `if test -f 'splitsstructs.cpp'; then $(CYGPATH_W) 'splitsstructs.cpp'; else $(CYGPATH_W) '$(srcdir)/splitsstructs.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/splitsinfile/splitsinfile.cpp b/example/splitsinfile/splitsinfile.cpp
new file mode 100644
index 0000000..55ad9f5
--- /dev/null
+++ b/example/splitsinfile/splitsinfile.cpp
@@ -0,0 +1,435 @@
+//	Copyright (C) 2007-2008 Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+/*******************************************************************************
+ * This file contains code for 4 executables:
+ *		NEXUSnormalizer, NEXUSvalidator, NEXUSinspector, and NEX_us2ml
+ *	with conditional compilation used to determine the behavior.
+ *
+ *		* NEXUSnormalizer - writes a NEXUS version of the file with consistent
+ *			ordering of blocks and commands. Ideally 2 equivalent files will
+ *			produce the same normalized output. This version of tthe program is
+ *			less ambitious. The goal is to be able to run (for any valid NEXUS
+ *			in.nex file):
+ *				$ NEXUSnormalizer in.nex > outOrig.nex
+ *				$ NEXUSnormalizer outOrig.nex > outSecond.nex
+ *				$ diff outOrig.nex outSecond.nex
+ *			and find no differences.
+ *		* NEXUSvalidator - reports errors and warnings to stderr. Invalid files
+ *			cause exit with a non-zero return code
+ *		* NEXUSinspector - writes a brief report of every block parsed
+ *		* NEXUS_us2ml - writes a nexml version of the input (partially
+ *			implemented, note that the code to write nexml is in us2ml.cpp).
+ * See the processFilepath() function for an example of how to deal with NCL
+ *	to read a file using the new MultiFormatReader class. When the file
+ *	is correctly read, the processContent() function is called.
+ *
+ * All other code has to do with reading command line arguments and other
+ * 	user-interface concerns.
+ */
+#include "ncl/ncl.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxspublicblocks.h"
+#include "ncl/nxsmultiformat.h"
+#include <cassert>
+
+#include "splitsstructs.h"
+using namespace std;
+long gStrictLevel = 2;
+long gInterleaveLen = -1;
+bool gVerbose = false;
+static long gBurnin = 0;
+void processContent(PublicNexusReader & nexusReader, ostream *out);
+
+
+
+
+bool newTreeHook(NxsFullTreeDescription &, void *, NxsTreesBlock *);
+
+
+
+void writeTranslateCommand(NxsTaxaBlockAPI * taxa, std::ostream & out)
+{
+	if (!taxa)
+		return;
+	out << "    TRANSLATE" << "\n";
+	const unsigned nt = taxa->GetNTaxTotal();
+	for (unsigned i = 0; i < nt; ++i)
+		{
+		if (i > 0)
+				out << ",\n";
+		out << "        " << i + 1 << ' ' << NxsString::GetEscaped(taxa->GetTaxonLabel(i));
+		}
+	out << ";\n";
+}
+
+TreesToSplits * gTreesToSplitsB = NULL;
+void writeStarTreeCommand(NxsTaxaBlockAPI * taxa, std::ostream & out)
+	{
+	out << "Tree star = " << " [&";
+	out << (gTreesToSplitsB->treatAsRooted ? 'R' : 'U');
+	out << "] (1";
+	const unsigned nt = taxa->GetNTaxTotal();
+	for (unsigned i = 1; i < nt; ++i)
+		out << ',' << (1+i);
+	out << ");\n";
+	}
+
+bool newTreeHook(NxsFullTreeDescription &ftd, void * arg, NxsTreesBlock *treesB)
+{
+	static unsigned long gTreeCount = 0;
+	gTreeCount++;
+	if (gTreeCount <= (unsigned long) gBurnin)
+		{
+		if (gVerbose)
+			std::cerr << "Skipping tree " <<  gTreeCount<< '\n';
+		return false;
+		}
+	if (gVerbose)
+		std::cerr << "Read tree " <<  gTreeCount<< '\n';
+	NxsTaxaBlockAPI *taxB = 0L;
+	if (treesB)
+		taxB = treesB->GetTaxaBlockPtr(NULL);
+	if (!arg)
+		return false;
+	TreesToSplits * tts = (TreesToSplits *)(arg);
+	tts->recordTree(ftd, taxB);
+	return false;
+}
+////////////////////////////////////////////////////////////////////////////////
+// Takes NxsReader that has successfully read a file, and processes the
+//	information stored in the reader.
+//
+// The caller is responsibel for calling DeleteBlocksFromFactories() to clean
+//	up (if the reader uses the factory API).
+////////////////////////////////////////////////////////////////////////////////
+void processContent(PublicNexusReader & nexusReader, ostream *out)
+{
+	if (!out)
+		return;
+	BlockReaderList blocks = nexusReader.GetUsedBlocksInOrder();
+
+	*out << "#NEXUS\n";
+	for (BlockReaderList::const_iterator bIt = blocks.begin(); bIt != blocks.end(); ++bIt)
+		{
+		NxsBlock * b = *bIt;
+		if (b->GetID() == "TAXA")
+			b->WriteAsNexus(*out);
+		}
+	TreesToSplits::TaxaBlockToSplitsMap::const_iterator tbtsm = gTreesToSplitsB->taxaBlockToSplitsMap.begin();
+	for (; tbtsm != gTreesToSplitsB->taxaBlockToSplitsMap.end(); ++tbtsm) {
+		*out << "Begin Trees;\n";
+		NxsTaxaBlockAPI * tb = tbtsm->first;
+		if (tb && gTreesToSplitsB->taxaBlockToSplitsMap.size() > 1)
+			*out << "Link Taxa = " << NxsString::GetEscaped(tb->GetTitle()) << ";\n";
+		writeTranslateCommand(tb, *out);
+		const TreesToSplits::NTreesSplitsMap & ntsm = tbtsm->second;
+		const unsigned nt = ntsm.first;
+		const TreesToSplits::SplitsMap & sm = ntsm.second;
+		unsigned n = 1;
+		writeStarTreeCommand(tb, *out);
+
+
+		for (TreesToSplits::SplitsMap::const_iterator smIt = sm.begin(); smIt != sm.end(); ++smIt, ++n) {
+			const SplitInfo & si = smIt->second;
+			*out << "Tree split_" << n << " = " << " [&";
+			*out << (gTreesToSplitsB->treatAsRooted ? 'R' : 'U');
+			*out << "] [";
+			if (gTreesToSplitsB->trackFreq || gTreesToSplitsB->trackEdgeLenSummary || gTreesToSplitsB->trackEdgeLen)
+				*out << "&W " << ((double)si.nTimes)/((double)nt) << " ] [";
+			if (gTreesToSplitsB->trackHeightSummary) {
+				*out << "meanH =" << ((double)si.heightSum)/((double)si.nTimes);
+			}
+			*out << "] ";
+
+			if (gTreesToSplitsB->trackEdgeLenSummary)
+				smIt->first.writeNewick(*out, si.edgeLenSum/((double)si.nTimes), true);
+			else
+				smIt->first.writeNewick(*out, true);
+			*out << ";\n";
+
+		}
+		*out << "End;\n";
+	}
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Creates a NxsReader, and tries to read the file `filename`.  If the
+//	read succeeds, then processContent will be called.
+////////////////////////////////////////////////////////////////////////////////
+void processFilepath(
+	const char * filename, // name of the file to be read
+	ostream *out, // output stream to use (NULL for no output). Not that cerr is used to report errors.
+	MultiFormatReader::DataFormatType fmt) // enum indicating the file format to expect.
+	{
+	assert(filename);
+	try
+		{
+		MultiFormatReader nexusReader(-1, NxsReader::WARNINGS_TO_STDERR);
+		if (gStrictLevel != 2)
+			nexusReader.SetWarningToErrorThreshold((int)NxsReader::FATAL_WARNING + 1 - (int) gStrictLevel);
+		NxsCharactersBlock * charsB = nexusReader.GetCharactersBlockTemplate();
+		NxsDataBlock * dataB = nexusReader.GetDataBlockTemplate();
+		charsB->SetAllowAugmentingOfSequenceSymbols(true);
+		dataB->SetAllowAugmentingOfSequenceSymbols(true);
+		if (gInterleaveLen > 0)
+			{
+			assert(charsB);
+			charsB->SetWriteInterleaveLen(gInterleaveLen);
+			dataB->SetWriteInterleaveLen(gInterleaveLen);
+			}
+		NxsTreesBlock * treesB = nexusReader.GetTreesBlockTemplate();
+		assert(treesB);
+		if (gStrictLevel < 2)
+			treesB->SetAllowImplicitNames(true);
+		if (!gTreesToSplitsB)
+			gTreesToSplitsB = new TreesToSplits();
+		treesB->setValidationCallbacks(newTreeHook, gTreesToSplitsB);
+		if (gStrictLevel < 2)
+			{
+			NxsStoreTokensBlockReader *storerB =  nexusReader.GetUnknownBlockTemplate();
+			assert(storerB);
+			storerB->SetTolerateEOFInBlock(true);
+			}
+		cerr << "Executing" <<endl;
+		try {
+			nexusReader.ReadFilepath(filename, fmt);
+			processContent(nexusReader, out);
+			}
+		catch(...)
+			{
+			nexusReader.DeleteBlocksFromFactories();
+			throw;
+			}
+		nexusReader.DeleteBlocksFromFactories();
+		}
+	catch (const NxsException &x)
+		{
+		cerr << "Error:\n " << x.msg << endl;
+		if (x.line >=0)
+			cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << endl;
+		exit(2);
+		}
+	}
+
+void readFilepathAsNEXUS(const char *filename, MultiFormatReader::DataFormatType fmt)
+	{
+	cerr << "[Reading " << filename << "	 ]" << endl;
+	try {
+		ostream * outStream = 0L;
+		outStream = &cout;
+		processFilepath(filename, outStream, fmt);
+		}
+	catch (...)
+		{
+		cerr << "Parsing of " << filename << " failed (with an exception)" << endl;
+		exit(1);
+		}
+	}
+
+void readFilesListedIsFile(const char *masterFilepath, MultiFormatReader::DataFormatType fmt)
+	{
+	ifstream masterStream(masterFilepath, ios::binary);
+	if (masterStream.bad())
+		{
+		cerr << "Could not open " << masterFilepath << "." << endl;
+		exit(3);
+		}
+	char filename[1024];
+	while ((!masterStream.eof())  && masterStream.good())
+		{
+		masterStream.getline(filename, 1024);
+		if (strlen(filename) > 0 && filename[0] != '#')
+			readFilepathAsNEXUS(filename, fmt);
+		}
+	}
+
+void printHelp(ostream & out)
+	{
+	out << "NEXUStosplits takes reads a file and writes trees for each split that occurs in any tree in the file.\n";
+	out << "\nThe most common usage is simply:\n    NEXUStosplits <path to NEXUS file>\n";
+	out << "\nCommand-line flags:\n\n";
+	out << "    -h on the command line shows this help message\n\n";
+	out << "    -v verbose output\n\n";
+	out << "    -d report depth of splits\n\n";
+	out << "    -e report edge length of splits\n\n";
+	out << "    -b brief report of splits\n\n";
+	out << "    -o report which trees a split occurs in.\n\n";
+	out << "    -p report the proportion of trees that contain the split occurs in.\n\n";
+	out << "    -r treat splits as rooted\n\n";
+	out << "    -t report trivial splits.\n\n";
+	out << "    -l<path> reads a file and treats each line of the file as a path to NEXUS file\n\n";
+	out << "    -s<non-negative integer> controls the NEXUS strictness level.\n";
+	out << "        the default level is equivalent to -s2 invoking the program with \n";
+	out << "        -s3 or a higher number will convert some warnings into fatal errors.\n";
+	out << "        Running with -s1 will cause the parser to accept dangerous constructs,\n";
+	out << "        and running with -s0 will cause the parser make every attempt to finish\n";
+	out << "        parsing the file (warning about very serious errors).\n\n";
+	out << "        Note that when -s0 strictness level is used, and the parser fails to\n";
+	out << "        finish, it will often be the result of an earlier error than the \n";
+	out << "        error that is reported in the last message.\n";
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		//passs
+#	elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+		//passs
+#	else
+		out << "    -i<format> specifies the input file format expected:\n";
+#	endif
+	out << "    -f<format> specifies the input file format expected:\n";
+	out << "            -fnexus     NEXUS (this is also the default)\n";
+	out << "            -faafasta   Amino acid data in fasta\n";
+	out << "            -fdnafasta  DNA data in fasta\n";
+	out << "            -frnafasta  RNA data in fasta\n";
+	out << "        The complete list of format names that can follow the -f flag is:\n";
+	std::vector<std::string> fmtNames =  MultiFormatReader::getFormatNames();
+	for (std::vector<std::string>::const_iterator n = fmtNames.begin(); n != fmtNames.end(); ++n)
+		{
+		out << "            "<< *n << "\n";
+		}
+	}
+
+int main(int argc, char *argv[])
+	{
+	MultiFormatReader::DataFormatType f(MultiFormatReader::NEXUS_FORMAT);
+
+	bool readfile = false;
+	bool el = false;
+	bool depth = false;
+	bool brief = false;
+	for (int i = 1; i < argc; ++i)
+		{
+		const char * filepath = argv[i];
+		const unsigned slen = strlen(filepath);
+		if (strlen(filepath) > 1 && filepath[0] == '-' && filepath[1] == 'h')
+			printHelp(cout);
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'r')
+			TreesToSplits::gTreatAsRooted = true;
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'v')
+			gVerbose = true;
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 't')
+			TreesToSplits::gTrackTrivial = true;
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'p')
+			TreesToSplits::gTrackFreq = true;
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'o')
+			TreesToSplits::gTrackOccurrence = true;
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'e')
+			{
+			el = true;
+			}
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'd')
+			{
+			depth = true;
+			}
+		else if (strlen(filepath) == 2 && filepath[0] == '-' && filepath[1] == 'b')
+			{
+			brief = true;
+			}
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 's')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gStrictLevel)))
+				{
+				cerr << "Expecting an integer after -s\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'x')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gBurnin)))
+				{
+				cerr << "Expecting an integer after -x\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+#	if defined(JUST_VALIDATE_NEXUS) && JUST_VALIDATE_NEXUS
+		//pass
+#	elif defined(JUST_REPORT_NEXUS) && JUST_REPORT_NEXUS
+		//pass
+#	else
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'i')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gInterleaveLen)) || gInterleaveLen < 1)
+				{
+				cerr << "Expecting a positive integer after -d\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+#	endif
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'f')
+			{
+			f = MultiFormatReader::UNSUPPORTED_FORMAT;
+			if (slen > 2)
+				{
+				std::string fmtName(filepath + 2, slen - 2);
+				f =  MultiFormatReader::formatNameToCode(fmtName);
+				}
+			if (f == MultiFormatReader::UNSUPPORTED_FORMAT)
+				{
+				cerr << "Expecting a format after after -f\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+		else
+			{
+			if (brief)
+				{
+				if (el)
+					{
+					TreesToSplits::gTrackEdgeLenSummary = true;
+					TreesToSplits::gTrackFreq = true;
+					}
+				if (depth)
+					{
+					TreesToSplits::gTrackHeightSummary = true;
+					TreesToSplits::gTrackFreq = true;
+					}
+				}
+			else
+				{
+				if (el)
+					TreesToSplits::gTrackEdgeLen = true;
+				if (depth)
+					TreesToSplits::gTrackHeight = true;
+				}
+
+			if (strlen(filepath) > 2 && filepath[0] == '-' && filepath[1] == 'l')
+				{
+				readfile = true;
+				readFilesListedIsFile(filepath+2, f);
+				}
+			else
+				{
+				readfile = true;
+				readFilepathAsNEXUS(filepath, f);
+				}
+			}
+		}
+	if (!readfile)
+		{
+		cerr << "Expecting the path to NEXUS file as the only command line argument!\n" << endl;
+		printHelp(cerr);
+		return 1;
+		}
+	return 0;
+	}
+
diff --git a/example/splitsinfile/splitsstructs.cpp b/example/splitsinfile/splitsstructs.cpp
new file mode 100644
index 0000000..e1d87c4
--- /dev/null
+++ b/example/splitsinfile/splitsstructs.cpp
@@ -0,0 +1,151 @@
+#include "splitsstructs.h"
+bool TreesToSplits::gTrackTrivial = false;
+bool TreesToSplits::gTreatAsRooted = false;
+bool TreesToSplits::gTrackFreq = false;
+bool TreesToSplits::gTrackOccurrence = false;
+bool TreesToSplits::gTrackEdgeLen = false;
+bool TreesToSplits::gTrackEdgeLenSummary = false;
+bool TreesToSplits::gTrackHeight = false;
+bool TreesToSplits::gTrackHeightSummary = false;
+
+
+const WORD_INT_TYPE gLastMask[] = {1, 3, 7, 0x0F, 0x1F, 0x3F, 0x7F, 0x7F };
+const WORD_INT_TYPE gBit[] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80 };
+Split::Split(unsigned nTax)
+	:splitRep(1 + ((nTax - 1)/NBITS_IN_WORD), 0),
+	lastMask(gLastMask[(nTax-1) % NBITS_IN_WORD])
+	{
+	}
+
+void Split::setIndex(unsigned ind)
+{
+	const unsigned elIndex = ind/NBITS_IN_WORD;
+	assert(elIndex < splitRep.size());
+	WORD_INT_TYPE & el = splitRep[elIndex];
+	el |= gBit[ind % NBITS_IN_WORD ];
+}
+
+
+unsigned gCounter = 0;
+
+void TreesToSplits::recordTree(const NxsFullTreeDescription & ftd, NxsTaxaBlockAPI *taxB) {
+	TaxaBlockToSplitsMap::iterator tsmIt = taxaBlockToSplitsMap.find(taxB);
+	if (tsmIt == taxaBlockToSplitsMap.end()) {
+		taxaBlockToSplitsMap[taxB] = NTreesSplitsMap(0, SplitsMap());
+		tsmIt = taxaBlockToSplitsMap.find(taxB);
+	}
+	NTreesSplitsMap & ntsm = tsmIt->second;
+	SplitsMap & sm = ntsm.second;
+	unsigned nextNTax = taxB->GetNTax();
+	if (nextNTax != nTax)
+		splits.clear();
+	nTax = nextNTax;
+	recordTreeToSplitsMap(ftd, sm, ntsm.first);
+	ntsm.first += 1;
+}
+
+void TreesToSplits::recordTreeToSplitsMap(const NxsFullTreeDescription & ftd, TreesToSplits::SplitsMap & sm, unsigned treeIndex) {
+	nst.Initialize(ftd);
+	if (!treatAsRooted)
+		nst.RerootAt(0);
+	std::vector<const NxsSimpleNode *> nodes =  nst.GetPreorderTraversal();
+	if (nodes.empty())
+		return;
+	std::vector<const NxsSimpleNode *>::reverse_iterator last =  nodes.rend();
+	--last; /* root is a trivial split */
+	while (splits.size() < nodes.size())
+		splits.push_back(SplitAndScratch(Split(nTax), NULL));
+
+	const bool doHeights = (trackHeight || trackHeightSummary);
+	if (doHeights) {
+		while (dblScratch.size() < nodes.size())
+			dblScratch.push_back(0.0);
+	}
+	std::vector<double>::iterator hIt = dblScratch.begin();
+
+	std::vector<SplitAndScratch>::iterator spIt = splits.begin();
+	for (std::vector<const NxsSimpleNode *>::reverse_iterator ndIt = nodes.rbegin(); ndIt != last; ++ndIt, ++spIt) {
+		const NxsSimpleNode * nd = *ndIt;
+		//cout << "visiting node " << (long) nd << '\n';
+		assert(nd);
+		assert(spIt != splits.end());
+		SplitAndScratch & ss = *spIt;
+		Split & split = ss.first;
+		split.reset();
+		const NxsSimpleNode * c = nd->GetFirstChild();
+		nd->scratch = (void *)&ss;
+		double * h = 0L;
+		if (doHeights) {
+			h = &(*hIt);
+			ss.second = (void *) h;
+			++hIt;
+			*h = 0.0;
+		}
+		if (c) {
+			while (c) {
+				const SplitAndScratch * css = (SplitAndScratch *)(c->scratch);
+				const Split * cSplit = &(css->first);
+				assert(cSplit);
+				split.setToUnion(*cSplit);
+				if (doHeights) {
+					NxsSimpleEdge nse = c->GetEdgeToParent();
+					double n = nse.GetDblEdgeLen();
+					double * ch = (double*)(css->second);
+					n += *ch;
+					*h = std::max(*h, n);
+				}
+				c = c->GetNextSib();
+			}
+			if (!treatAsRooted)
+				split.invertIfNeeded();
+			recordSplit(split, nd, sm, treeIndex);
+		}
+		else {
+			split.setIndex(nd->GetTaxonIndex());
+			if (!treatAsRooted)
+				split.invertIfNeeded();
+			if (trackTrivial)
+				recordSplit(split, nd, sm, treeIndex);
+		}
+	}
+}
+
+void TreesToSplits::recordSplit(const Split &split, const NxsSimpleNode *nd, TreesToSplits::SplitsMap & sm, unsigned treeIndex) {
+	gCounter++;
+	TreesToSplits::SplitsMap::iterator smIt = sm.find(split);
+	if (smIt == sm.end()) {
+		sm[split] = SplitInfo();
+		smIt = sm.find(split);
+		//std::cout << "New Split " << gCounter << ": " << split.getNewick() << '\n';
+	}
+	else {
+		//std::cout << "Repeated Split " << gCounter << ": " << split.getNewick() << '\n';
+	}
+
+	SplitInfo & info = smIt->second;
+	if (trackFreq || trackEdgeLenSummary || trackEdgeLen)
+		info.nTimes += 1;
+	if (trackOccurrence)
+		info.inclusion.insert(treeIndex);
+
+	if (trackEdgeLenSummary) {
+		NxsSimpleEdge nse = nd->GetEdgeToParent();
+		const double el = nse.GetDblEdgeLen();
+		info.edgeLenSum += el;
+		info.edgeLenSumSq += el*el;
+	}
+	else if (trackEdgeLen){
+		NxsSimpleEdge nse = nd->GetEdgeToParent();
+		const double el = nse.GetDblEdgeLen();
+		info.edgeLen.push_back(el);
+	}
+
+	if (trackHeightSummary)
+		{
+		const SplitAndScratch * css = (SplitAndScratch *)(nd->scratch);
+		double *h = (double *)css->second;
+		info.heightSum += *h;
+		}
+	else if (trackHeight)
+		{}
+}
diff --git a/example/splitsinfile/splitsstructs.h b/example/splitsinfile/splitsstructs.h
new file mode 100644
index 0000000..54376b5
--- /dev/null
+++ b/example/splitsinfile/splitsstructs.h
@@ -0,0 +1,224 @@
+#if ! defined(SPLITSSTRUCTS_HPP)
+#define SPLITSSTRUCTS_HPP
+#include <vector>
+#include <iostream>
+#include <sstream>
+#include <cassert>
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxstreesblock.h"
+class NxsTaxaBlockAPI;
+class SplitInfo
+{
+	public:
+		SplitInfo()
+			:edgeLenSum(0.0),
+			edgeLenSumSq(0.0),
+			heightSum(0.0),
+			heightSumSq(0.0),
+			nTimes(0)
+			{}
+		void reset() {
+			edgeLen.clear();
+			heights.clear();
+			inclusion.clear();
+			edgeLenSum = 0.0;
+			edgeLenSumSq = 0.0;
+			heightSum = 0.0;
+			heightSumSq = 0.0;
+			nTimes = 0;
+		}
+		std::vector<double> edgeLen;
+		std::vector<double> heights;
+		NxsUnsignedSet inclusion;
+		double edgeLenSum;
+		double edgeLenSumSq;
+		double heightSum;
+		double heightSumSq;
+		unsigned nTimes;
+};
+
+#define WORD_INT_TYPE unsigned char
+#define NBITS_IN_WORD (8*sizeof(WORD_INT_TYPE))
+class Split
+{
+	public:
+		Split(unsigned nTax);
+		void reset() {
+			unsigned size = splitRep.size();
+			splitRep.assign(size, 0);
+		}
+		void invertIfNeeded() {
+			if (1 & (splitRep[0])) {
+				//cout << "Inverting: " << getNewick(true) << '\n';
+				std::vector<WORD_INT_TYPE>::iterator sIt = splitRep.begin();
+				for (; sIt != splitRep.end(); ++sIt) {
+					const WORD_INT_TYPE comp = ~(*sIt);
+					*sIt = comp;
+				}
+				WORD_INT_TYPE & lastWord = *(splitRep.rbegin());
+				lastWord &= lastMask;
+				//cout << "Done inverting: " << getNewick(true) << '\n';
+			}
+		}
+		void setIndex(unsigned ind);
+		void setToUnion(const Split & other) {
+			assert(splitRep.size() == other.splitRep.size());
+			std::vector<WORD_INT_TYPE>::iterator sIt = splitRep.begin();
+			std::vector<WORD_INT_TYPE>::const_iterator oIt = other.splitRep.begin();
+			for (; sIt != splitRep.end(); ++sIt, ++oIt) {
+				*sIt |= *oIt;
+			}
+		}
+		std::string getNewick(bool evenIfTrivial=true) const {
+			std::ostringstream out;
+			if (writeNewick(out, 0.0, false, evenIfTrivial))
+				return out.str();
+			return std::string();
+		}
+		bool writeNewick(std::ostream &out, bool evenIfTrivial) const {
+			return writeNewick(out, 0.0, false, evenIfTrivial);
+		}
+		bool writeNewick(std::ostream &out, double edgeLen, bool evenIfTrivial) const {
+			return writeNewick(out, edgeLen, true, evenIfTrivial);
+		}
+		void dumpIndices(NxsUnsignedSet * inc,  NxsUnsignedSet *exc) const {
+			WORD_INT_TYPE bit;
+			unsigned word = 0;
+			unsigned index = 0;
+			const unsigned nWords = splitRep.size();
+			if (nWords == 0)
+				return;
+			if (nWords > 1) {
+				for (;word < nWords - 1; ++word) {
+					const WORD_INT_TYPE &uc =  splitRep[word];
+					bit = 1;
+					for (unsigned i = 0; i < NBITS_IN_WORD; ++i, ++index) {
+						if (bit & uc) {
+							if (inc)
+								inc->insert(index);
+						}
+						else if (exc)
+							exc->insert(index);
+						bit <<= 1;
+					}
+				}
+			}
+			const WORD_INT_TYPE &lastc =  splitRep[nWords - 1];
+			bit = 1;
+			for (unsigned i = 0; i < NBITS_IN_WORD; ++i, ++index) {
+				if (bit >lastMask)
+					return;
+				if (bit & lastc) {
+					if (inc)
+						inc->insert(index);
+				}
+				else if (exc)
+					exc->insert(index);
+				bit <<= 1;
+			}
+		}
+		bool writeNewick(std::ostream &out, double edgeLen, bool writeEdgeLen, bool evenIfTrivial)  const {
+			NxsUnsignedSet inc;
+			NxsUnsignedSet exc;
+			dumpIndices(&inc, &exc);
+			if (!evenIfTrivial && (inc.size() == 1 || exc.size() == 1))
+				return false;
+			out << '(';
+			NxsUnsignedSet::const_iterator sIt = inc.begin();
+			if (!inc.empty()) {
+				out << '(' << (1 + *sIt);
+				for (++sIt; sIt != inc.end(); ++sIt)
+					out << ',' << (1 + *sIt);
+				out << ')';
+				if (writeEdgeLen)
+					out << ':' << edgeLen;
+			}
+
+			if (!exc.empty()) {
+				for (sIt = exc.begin(); sIt != exc.end(); ++sIt)
+					out << ',' << (1 + *sIt);
+				out << ')';
+			}
+			return true;
+		}
+
+		friend bool operator<(const Split & one, const Split & another);
+
+	private:
+		std::vector<WORD_INT_TYPE> splitRep;
+		WORD_INT_TYPE lastMask;
+};
+
+inline bool operator<(const Split & one, const Split & another)
+{
+	const unsigned osize = one.splitRep.size();
+	const unsigned asize = another.splitRep.size();
+	if (osize == asize) {
+		std::vector<WORD_INT_TYPE>::const_iterator oIt = one.splitRep.begin();
+		std::vector<WORD_INT_TYPE>::const_iterator aIt = another.splitRep.begin();
+		for (; oIt != one.splitRep.end(); ++oIt, ++aIt) {
+			if (*aIt != *oIt) {
+				return *oIt < *aIt;
+			}
+		}
+		return false;
+	}
+	return (osize < asize);
+}
+
+class TreesToSplits
+{
+	public:
+		typedef std::map<Split, SplitInfo> SplitsMap;
+		typedef std::pair<unsigned, SplitsMap> NTreesSplitsMap;
+		typedef std::pair<Split, void *> SplitAndScratch;
+		typedef std::map<NxsTaxaBlockAPI *,  NTreesSplitsMap > TaxaBlockToSplitsMap;
+		static bool gTrackTrivial;
+		static bool gTreatAsRooted;
+		static bool gTrackFreq;
+		static bool gTrackOccurrence;
+		static bool gTrackEdgeLen;
+		static bool gTrackEdgeLenSummary;
+		static bool gTrackHeight;
+		static bool gTrackHeightSummary;
+
+		TreesToSplits()
+		  :trackTrivial(gTrackTrivial),
+		  treatAsRooted(gTreatAsRooted),
+		  trackFreq(gTrackFreq),
+		  trackOccurrence(gTrackOccurrence),
+		  trackEdgeLen(gTrackEdgeLen),
+		  trackEdgeLenSummary(gTrackEdgeLenSummary),
+		  trackHeight(gTrackHeight),
+		  trackHeightSummary(gTrackHeightSummary),
+		  nst(0, 0.0),
+		  nTax(0)
+		   	{
+		   	}
+
+		void recordTree(const NxsFullTreeDescription & ftd, NxsTaxaBlockAPI *taxB);
+
+		bool trackTrivial;
+		bool treatAsRooted;
+		bool trackFreq;
+		bool trackOccurrence;
+		bool trackEdgeLen;
+		bool trackEdgeLenSummary;
+		bool trackHeight;
+		bool trackHeightSummary;
+		TaxaBlockToSplitsMap taxaBlockToSplitsMap;
+
+	protected:
+		void recordTreeToSplitsMap(const NxsFullTreeDescription & ftd, SplitsMap & sm, unsigned treeIndex);
+
+		void recordSplit(const Split &split, const NxsSimpleNode *nd, SplitsMap & sm, unsigned treeIndex);
+
+
+		NxsSimpleTree nst;
+		std::vector<SplitAndScratch> splits;
+		std::vector<double> dblScratch;
+		unsigned nTax;
+};
+
+#endif
diff --git a/example/subsetter/Makefile.am b/example/subsetter/Makefile.am
new file mode 100644
index 0000000..ec15728
--- /dev/null
+++ b/example/subsetter/Makefile.am
@@ -0,0 +1,5 @@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = NEXUSsubsetter
+NEXUSsubsetter_SOURCES = subsetter.cpp
+NEXUSsubsetter_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/example/subsetter/Makefile.in b/example/subsetter/Makefile.in
new file mode 100644
index 0000000..6861074
--- /dev/null
+++ b/example/subsetter/Makefile.in
@@ -0,0 +1,499 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = NEXUSsubsetter$(EXEEXT)
+subdir = example/subsetter
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_NEXUSsubsetter_OBJECTS = NEXUSsubsetter-subsetter.$(OBJEXT)
+NEXUSsubsetter_OBJECTS = $(am_NEXUSsubsetter_OBJECTS)
+NEXUSsubsetter_LDADD = $(LDADD)
+NEXUSsubsetter_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(NEXUSsubsetter_SOURCES)
+DIST_SOURCES = $(NEXUSsubsetter_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+NEXUSsubsetter_SOURCES = subsetter.cpp
+NEXUSsubsetter_CPPFLAGS = $(AM_CPPFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/subsetter/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/subsetter/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+NEXUSsubsetter$(EXEEXT): $(NEXUSsubsetter_OBJECTS) $(NEXUSsubsetter_DEPENDENCIES) 
+	@rm -f NEXUSsubsetter$(EXEEXT)
+	$(CXXLINK) $(NEXUSsubsetter_OBJECTS) $(NEXUSsubsetter_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUSsubsetter-subsetter.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+NEXUSsubsetter-subsetter.o: subsetter.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSsubsetter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSsubsetter-subsetter.o -MD -MP -MF $(DEPDIR)/NEXUSsubsetter-subsetter.Tpo -c -o NEXUSsubsetter-subsetter.o `test -f 'subsetter.cpp' || echo '$(srcdir)/'`subsetter.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSsubsetter-subsetter.Tpo $(DEPDIR)/NEXUSsubsetter-subsetter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='subsetter.cpp' object='NEXUSsubsetter-subsetter.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSsubsetter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSsubsetter-subsetter.o `test -f 'subsetter.cpp' || echo '$(srcdir)/'`subsetter.cpp
+
+NEXUSsubsetter-subsetter.obj: subsetter.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSsubsetter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUSsubsetter-subsetter.obj -MD -MP -MF $(DEPDIR)/NEXUSsubsetter-subsetter.Tpo -c -o NEXUSsubsetter-subsetter.obj `if test -f 'subsetter.cpp'; then $(CYGPATH_W) 'subsetter.cpp'; else $(CYGPATH_W) '$(srcdir)/subsetter.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUSsubsetter-subsetter.Tpo $(DEPDIR)/NEXUSsubsetter-subsetter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='subsetter.cpp' object='NEXUSsubsetter-subsetter.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUSsubsetter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUSsubsetter-subsetter.obj `if test -f 'subsetter.cpp'; then $(CYGPATH_W) 'subsetter.cpp'; else $(CYGPATH_W) '$(srcdir)/subsetter.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/subsetter/subsetter.cpp b/example/subsetter/subsetter.cpp
new file mode 100644
index 0000000..1386e08
--- /dev/null
+++ b/example/subsetter/subsetter.cpp
@@ -0,0 +1,190 @@
+#include<string>
+#include<vector>
+#include<cassert>
+#include "ncl/nxsmultiformat.h"
+
+
+
+
+
+
+
+int main(int argc, char * argv[])
+{
+	/* Usually it is easiest to surround interactions with NCL in a try block
+		that catches NxsException instances.
+		Reading files can certainly generate these errors, but even queries
+		after the parse can result in these exceptions.
+	*/
+	if (argc < 3)
+		{
+		std::cerr << "Expecting two arguments: a file name and a TaxSet/CharSetName\n";
+		return 1;
+		}
+	if (argv[1][0] == '-' &&  argv[1][1] == 'h' && argv[1][2] == '\0' )
+		{
+		std::cerr << "Takes two arguments: a file name and a TaxSet/CharSetName\n Prints a NEXUS file that contains only the TaxSet/CharSet indicated.  Also suppresses taxa that do not have any unambiguous characters for the indicated charset.\n";
+		return 0;
+		}
+
+	std::string filename(argv[1]);
+	std::string setName(argv[2]);
+	try {
+		int blocksToRead =  (PublicNexusReader::NEXUS_TAXA_BLOCK_BIT
+							| PublicNexusReader::NEXUS_CHARACTERS_BLOCK_BIT
+							| PublicNexusReader::NEXUS_ASSUMPTIONS_BLOCK_BIT
+							| PublicNexusReader::NEXUS_SETS_BLOCK_BIT);
+		MultiFormatReader nexusReader(blocksToRead, NxsReader::WARNINGS_TO_STDERR);
+
+		/* See discussion in "Making NCL less strict" */
+		NxsCharactersBlock * charsB = nexusReader.GetCharactersBlockTemplate();
+		NxsDataBlock * dataB = nexusReader.GetDataBlockTemplate();
+		charsB->SetAllowAugmentingOfSequenceSymbols(true);
+		dataB->SetAllowAugmentingOfSequenceSymbols(true);
+
+
+		/* End of code related to the section on making NCL less strict */
+
+
+		std::cerr << "Reading " << filename << "\n";
+		try {
+			nexusReader.DemoteBlocks();
+			nexusReader.ReadFilepath(filename.c_str(), MultiFormatReader::NEXUS_FORMAT);
+			}
+		catch(const NxsException &x)
+			{
+			std::cerr << "Error:\n " << x.msg << std::endl;
+			if (x.line > 0 || x.pos > 0)
+				std::cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << std::endl;
+			return 2;
+			}
+		catch(...)
+			{
+			nexusReader.DeleteBlocksFromFactories();
+			std::cerr << "Exiting with an unknown error" << std::endl;
+			return 1;
+			}
+
+		const unsigned numTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+		if (numTaxaBlocks != 1)
+			{
+			std::cerr << "Expecting a file with exactly 1 TAXA block, but found " << numTaxaBlocks << " in the file " << filename << ".\n";
+			return 2;
+			}
+		NxsTaxaBlock * taxaBlock = nexusReader.GetTaxaBlock(0);
+		const unsigned nCharBlocks = nexusReader.GetNumCharactersBlocks(taxaBlock);
+		if (nCharBlocks != 1)
+			{
+			std::cerr << "Expecting a file with exactly 1 CHARACTERS/DATA block, but found " << nCharBlocks << " in the file " << filename << ".\n";
+			return 3;
+			}
+		NCL_COULD_BE_CONST  NxsCharactersBlock * charBlock = nexusReader.GetCharactersBlock(taxaBlock, 0);
+		const unsigned totalNumTaxa = taxaBlock->GetNTax();
+		const unsigned totalNumChars = charBlock->GetNCharTotal();
+		NxsUnsignedSet taxaToInclude;
+		NxsUnsignedSet charsToInclude;
+		unsigned nTaxaInSet = taxaBlock->GetIndexSet(setName, &taxaToInclude);
+		unsigned nCharInSet = charBlock->GetIndexSet(setName, &charsToInclude);
+		if (nTaxaInSet + nCharInSet == 0)
+			{
+			std::cerr << "Expecting \"" << setName << "\" to refer to a TaxSet or CharSet.\n";
+			return 3;
+			}
+		if (nTaxaInSet == 0)
+			{
+			for (unsigned i = 0; i < totalNumTaxa; ++i)
+				taxaToInclude.insert(i);
+			nTaxaInSet = taxaToInclude.size();
+			}
+		if (nCharInSet == 0)
+			{
+			for (unsigned i = 0; i < totalNumChars; ++i)
+				charsToInclude.insert(i);
+			nCharInSet = charsToInclude.size();
+			}
+		NxsUnsignedSet taxaWithUnambigData;
+		NxsUnsignedSet::const_iterator taxIter = taxaToInclude.begin();
+		std::vector<std::string> escapedNamesVec;
+		size_t maxLabelLen = 0;
+		std::vector<const NxsDiscreteDatatypeMapper *> mapperVec =  charBlock->GetAllDatatypeMappers();
+		if (mapperVec.size() != 1)
+			{
+			std::cerr << "Expecting the characters block to contain one type of data (MIXED datatype is not supported).\n";
+			return 3;
+			}
+		const NxsDiscreteDatatypeMapper *mapper = mapperVec[0];
+		NxsDiscreteStateCell numStates = (NxsDiscreteStateCell)mapper->GetNumStates();
+		for (; taxIter != taxaToInclude.end(); ++taxIter)
+			{
+			const NxsDiscreteStateRow & row = charBlock->GetDiscreteMatrixRow(*taxIter);
+			bool hasData = false;
+			for (NxsUnsignedSet::const_iterator cIt = charsToInclude.begin(); cIt != charsToInclude.end(); ++cIt)
+				{
+				NxsDiscreteStateCell c = row[*cIt];
+				if (c >= 0 && c < numStates)
+					{
+					hasData = true;
+					break;
+					}
+				}
+			if (hasData)
+				{
+				taxaWithUnambigData.insert(*taxIter);
+				NxsString lab = taxaBlock->GetTaxonLabel(*taxIter);
+				std::string e = NxsString::GetEscaped(lab);
+				size_t ll = e.length();
+				if (ll > maxLabelLen)
+					maxLabelLen = ll;
+					escapedNamesVec.push_back(e);
+				}
+			}
+
+		if (taxaWithUnambigData.empty())
+			{
+			std::cerr << "No selected taxa had unambiguous data for the selected characters!\n";
+			return 5;
+			}
+
+		std::ostream & out = std::cout;
+
+		out << "#NEXUS\nbegin TAXA;\n Dimensions ntax = " << taxaWithUnambigData.size() << "\n; TaxLabels\n ";
+		std::vector<std::string>::const_iterator nIt = escapedNamesVec.begin();
+		for (; nIt != escapedNamesVec.end(); ++nIt)
+			{
+			out << ' ' << *nIt;
+			}
+		out << ";\nEND;\nBegin CHARACTERS;\n Dimensions nchar = " << nCharInSet << ";\n";
+		charBlock->WriteFormatCommand(out);
+		out << "\n Matrix\n";
+
+		taxIter = taxaWithUnambigData.begin();
+		nIt = escapedNamesVec.begin();
+		for (; nIt != escapedNamesVec.end(); ++nIt, ++taxIter)
+			{
+			const std::string & e = *nIt;
+			std::string s(maxLabelLen + 2 - e.length(), ' ');
+			out << e << s << ' ';
+			const NxsDiscreteStateRow & row = charBlock->GetDiscreteMatrixRow(*taxIter);
+			for (NxsUnsignedSet::const_iterator cIt = charsToInclude.begin(); cIt != charsToInclude.end(); ++cIt)
+				{
+				mapper->WriteStateCodeAsNexusString(out, row[*cIt]);
+				}
+			out << '\n';
+			}
+		out << ";\nEND;\n";
+		nexusReader.DeleteBlocksFromFactories();
+	}
+	catch(const NxsException &x)
+		{
+		std::cerr << "Error:\n " << x.msg << std::endl;
+		if (x.line > 0 || x.pos > 0)
+			std::cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << std::endl;
+		return 2;
+		}
+	catch(...)
+		{
+		std::cerr << "Exiting with an unknown error" << std::endl;
+		return 1;
+		}
+	return 0;
+}
diff --git a/example/translate/Makefile.am b/example/translate/Makefile.am
new file mode 100644
index 0000000..d24823b
--- /dev/null
+++ b/example/translate/Makefile.am
@@ -0,0 +1,8 @@
+LDADD       = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+noinst_PROGRAMS = NEXUStranslate
+NEXUStranslate_SOURCES = translateNuc.cpp
+NEXUStranslate_CPPFLAGS = $(AM_CPPFLAGS)
+
+check-local: NEXUStranslate
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py -o $(top_builddir)/example/translate/NEXUStranslate  $(top_srcdir)/test/TranslateIn $(top_srcdir)/test/TranslateOut
diff --git a/example/translate/Makefile.in b/example/translate/Makefile.in
new file mode 100644
index 0000000..f7f4663
--- /dev/null
+++ b/example/translate/Makefile.in
@@ -0,0 +1,504 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = NEXUStranslate$(EXEEXT)
+subdir = example/translate
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_NEXUStranslate_OBJECTS = NEXUStranslate-translateNuc.$(OBJEXT)
+NEXUStranslate_OBJECTS = $(am_NEXUStranslate_OBJECTS)
+NEXUStranslate_LDADD = $(LDADD)
+NEXUStranslate_DEPENDENCIES = @top_builddir@/ncl/libncl.la
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(NEXUStranslate_SOURCES)
+DIST_SOURCES = $(NEXUStranslate_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LDADD = @top_builddir@/ncl/libncl.la
+AM_CPPFLAGS = -I at top_srcdir@/ncl
+NEXUStranslate_SOURCES = translateNuc.cpp
+NEXUStranslate_CPPFLAGS = $(AM_CPPFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign example/translate/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign example/translate/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+NEXUStranslate$(EXEEXT): $(NEXUStranslate_OBJECTS) $(NEXUStranslate_DEPENDENCIES) 
+	@rm -f NEXUStranslate$(EXEEXT)
+	$(CXXLINK) $(NEXUStranslate_OBJECTS) $(NEXUStranslate_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NEXUStranslate-translateNuc.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+NEXUStranslate-translateNuc.o: translateNuc.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStranslate_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUStranslate-translateNuc.o -MD -MP -MF $(DEPDIR)/NEXUStranslate-translateNuc.Tpo -c -o NEXUStranslate-translateNuc.o `test -f 'translateNuc.cpp' || echo '$(srcdir)/'`translateNuc.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUStranslate-translateNuc.Tpo $(DEPDIR)/NEXUStranslate-translateNuc.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='translateNuc.cpp' object='NEXUStranslate-translateNuc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStranslate_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUStranslate-translateNuc.o `test -f 'translateNuc.cpp' || echo '$(srcdir)/'`translateNuc.cpp
+
+NEXUStranslate-translateNuc.obj: translateNuc.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStranslate_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NEXUStranslate-translateNuc.obj -MD -MP -MF $(DEPDIR)/NEXUStranslate-translateNuc.Tpo -c -o NEXUStranslate-translateNuc.obj `if test -f 'translateNuc.cpp'; then $(CYGPATH_W) 'translateNuc.cpp'; else $(CYGPATH_W) '$(srcdir)/translateNuc.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/NEXUStranslate-translateNuc.Tpo $(DEPDIR)/NEXUStranslate-translateNuc.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='translateNuc.cpp' object='NEXUStranslate-translateNuc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(NEXUStranslate_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NEXUStranslate-translateNuc.obj `if test -f 'translateNuc.cpp'; then $(CYGPATH_W) 'translateNuc.cpp'; else $(CYGPATH_W) '$(srcdir)/translateNuc.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am
+
+
+check-local: NEXUStranslate
+	$(PYTHON) $(top_srcdir)/test/roundTripNCLTest.py -o $(top_builddir)/example/translate/NEXUStranslate  $(top_srcdir)/test/TranslateIn $(top_srcdir)/test/TranslateOut
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/example/translate/translateNuc.cpp b/example/translate/translateNuc.cpp
new file mode 100644
index 0000000..7e0a786
--- /dev/null
+++ b/example/translate/translateNuc.cpp
@@ -0,0 +1,682 @@
+//	Copyright (C) 2007-2008 Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library).
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+/*******************************************************************************
+ * This file contains code for 4 executables:
+ *		NEXUSnormalizer, NEXUSvalidator, NEXUSinspector, and NEX_us2ml
+ *	with conditional compilation used to determine the behavior.
+ *
+ *		* NEXUSnormalizer - writes a NEXUS version of the file with consistent
+ *			ordering of blocks and commands. Ideally 2 equivalent files will
+ *			produce the same normalized output. This version of tthe program is
+ *			less ambitious. The goal is to be able to run (for any valid NEXUS
+ *			in.nex file):
+ *				$ NEXUSnormalizer in.nex > outOrig.nex
+ *				$ NEXUSnormalizer outOrig.nex > outSecond.nex
+ *				$ diff outOrig.nex outSecond.nex
+ *			and find no differences.
+ *		* NEXUSvalidator - reports errors and warnings to stderr. Invalid files
+ *			cause exit with a non-zero return code
+ *		* NEXUSinspector - writes a brief report of every block parsed
+ *		* NEXUS_us2ml - writes a nexml version of the input (partially
+ *			implemented, note that the code to write nexml is in us2ml.cpp).
+ * See the processFilepath() function for an example of how to deal with NCL
+ *	to read a file using the new MultiFormatReader class. When the file
+ *	is correctly read, the processContent() function is called.
+ *
+ * All other code has to do with reading command line arguments and other
+ * 	user-interface concerns.
+ */
+#include "ncl/ncl.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxspublicblocks.h"
+#include "ncl/nxsmultiformat.h"
+#include <cassert>
+using namespace std;
+long gStrictLevel = 2;
+long gInterleaveLen = -1;
+NxsGeneticCodesEnum gCode = NXS_GCODE_STANDARD;
+bool gEmitUntranslatedDNA = true;
+void processContent(PublicNexusReader & nexusReader, ostream *out);
+
+
+void vecToListOfIntWeights(const std::vector<int> &, NxsTransformationManager::ListOfIntWeights & iw);
+void vecToListOfDblWeights(const std::vector<double> &dblWts, NxsTransformationManager::ListOfDblWeights & dw);
+std::set<NxsTaxaBlockAPI *> gTaxaBWritten;
+
+void vecToListOfIntWeights(const std::vector<int> & v, NxsTransformationManager::ListOfIntWeights & iw)
+	{
+	std::map<int, NxsUnsignedSet> m;
+	unsigned index = 0;
+	for (std::vector<int>::const_iterator vIt = v.begin(); vIt != v.end(); ++vIt, ++index)
+		{
+		std::map<int, NxsUnsignedSet>::iterator el = m.find(*vIt);
+		if (el == m.end())
+			{
+			std::set<unsigned> s;
+			s.insert(index);
+			m[*vIt] = s;
+			}
+		else
+			el->second.insert(index);
+		}
+	for (std::map<int, NxsUnsignedSet>::const_iterator mIt = m.begin(); mIt != m.end(); ++mIt)
+		iw.push_back(NxsTransformationManager::IntWeightToIndexSet(mIt->first, mIt->second));
+	}
+
+void vecToListOfDblWeights(const std::vector<double> & v, NxsTransformationManager::ListOfDblWeights & iw)
+	{
+	std::map<double, NxsUnsignedSet> m;
+	unsigned index = 0;
+	for (std::vector<double>::const_iterator vIt = v.begin(); vIt != v.end(); ++vIt, ++index)
+		{
+		std::map<double, NxsUnsignedSet>::iterator el = m.find(*vIt);
+		if (el == m.end())
+			{
+			std::set<unsigned> s;
+			s.insert(index);
+			m[*vIt] = s;
+			}
+		else
+			el->second.insert(index);
+		}
+	for (std::map<double, NxsUnsignedSet>::const_iterator mIt = m.begin(); mIt != m.end(); ++mIt)
+		iw.push_back(NxsTransformationManager::DblWeightToIndexSet(mIt->first, mIt->second));
+	}
+
+
+void writeCharactersAsGapped(ostream & out, NxsCharactersBlock * cb);
+
+////////////////////////////////////////////////////////////////////////////////
+// Takes NxsReader that has successfully read a file, and processes the
+//	information stored in the reader.
+//
+// The caller is responsibel for calling DeleteBlocksFromFactories() to clean
+//	up (if the reader uses the factory API).
+////////////////////////////////////////////////////////////////////////////////
+void processContent(PublicNexusReader & nexusReader, ostream *out)
+	{
+	if (!out)
+		return;
+	BlockReaderList blocks = nexusReader.GetUsedBlocksInOrder();
+
+	*out << "#NEXUS\n";
+	for (BlockReaderList::const_iterator bIt = blocks.begin(); bIt != blocks.end(); ++bIt)
+		{
+		NxsBlock * b = *bIt;
+		if (b->GetID() == "CHARACTERS" || b->GetID() == "DATA" )
+			{
+			NxsCharactersBlock * charactersBPtr = (NxsCharactersBlock *) b;
+			NxsCharactersBlock::DataTypesEnum dt = charactersBPtr->GetDataType();
+			if (dt == NxsCharactersBlock::nucleotide || dt == NxsCharactersBlock::dna || dt == NxsCharactersBlock::rna)
+				{
+				NxsCharactersBlock * untDNA = 0L;
+				NxsCharactersBlock ** nccbArg = (gEmitUntranslatedDNA ? &untDNA : 0L);
+
+				const std::string defCodonPosName = charactersBPtr->GetDefaultCodonPosPartitionName();
+				const NxsPartition defCodonPos =  charactersBPtr->GetCodonPosPartition(defCodonPosName);
+				std::list<int> * charIndicesPtr = 0L;
+				std::list<int> charInds;
+				if (!defCodonPos.empty())
+					{
+					NxsCharactersBlock::CodonPosPartitionToPosList(defCodonPos, &charInds);
+					charIndicesPtr = &charInds;
+					}
+				NxsCharactersBlock * codonsB = NxsCharactersBlock::NewCodonsCharactersBlock(charactersBPtr, true, true, true, charIndicesPtr, nccbArg);
+				NxsTaxaBlockAPI * codonsTaxaBlock = codonsB->GetTaxaBlockPtr(0L);
+				if (gTaxaBWritten.find(codonsTaxaBlock) == gTaxaBWritten.end())
+					{
+					codonsTaxaBlock->WriteAsNexus(*out);
+					gTaxaBWritten.insert(codonsTaxaBlock);
+					}
+				NxsCharactersBlock *aaB = NxsCharactersBlock::NewProteinCharactersBlock(codonsB, true, true, gCode);
+				aaB->WriteAsNexus(*out);
+				if (untDNA)
+					{
+					untDNA->WriteAsNexus(*out);
+					delete untDNA;
+					}
+				delete aaB;
+				delete codonsB;
+				}
+			}
+		}
+	}
+
+////////////////////////////////////////////////////////////////////////////////
+// Creates a NxsReader, and tries to read the file `filename`.  If the
+//	read succeeds, then processContent will be called.
+////////////////////////////////////////////////////////////////////////////////
+void processFilepath(
+	const char * filename, // name of the file to be read
+	ostream *out, // output stream to use (NULL for no output). Not that cerr is used to report errors.
+	MultiFormatReader::DataFormatType fmt) // enum indicating the file format to expect.
+	{
+	assert(filename);
+	try
+		{
+		MultiFormatReader nexusReader(-1, NxsReader::WARNINGS_TO_STDERR);
+		if (gStrictLevel != 2)
+			nexusReader.SetWarningToErrorThreshold((int)NxsReader::FATAL_WARNING + 1 - (int) gStrictLevel);
+		NxsCharactersBlock * charsB = nexusReader.GetCharactersBlockTemplate();
+		NxsDataBlock * dataB = nexusReader.GetDataBlockTemplate();
+		charsB->SetAllowAugmentingOfSequenceSymbols(true);
+		dataB->SetAllowAugmentingOfSequenceSymbols(true);
+		if (gInterleaveLen > 0)
+			{
+			assert(charsB);
+			charsB->SetWriteInterleaveLen(gInterleaveLen);
+			dataB->SetWriteInterleaveLen(gInterleaveLen);
+			}
+		NxsTreesBlock * treesB = nexusReader.GetTreesBlockTemplate();
+		assert(treesB);
+		if (gStrictLevel < 2)
+			treesB->SetAllowImplicitNames(true);
+		if (gStrictLevel < 2)
+			{
+			NxsStoreTokensBlockReader *storerB =  nexusReader.GetUnknownBlockTemplate();
+			assert(storerB);
+			storerB->SetTolerateEOFInBlock(true);
+			}
+		cerr << "Executing" <<endl;
+		try {
+			nexusReader.ReadFilepath(filename, fmt);
+			processContent(nexusReader, out);
+			}
+		catch(...)
+			{
+			nexusReader.DeleteBlocksFromFactories();
+			throw;
+			}
+		nexusReader.DeleteBlocksFromFactories();
+		}
+	catch (const NxsException &x)
+		{
+		cerr << "Error:\n " << x.msg << endl;
+		if (x.line >=0)
+			cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << endl;
+		exit(2);
+		}
+	}
+
+void readFilepathAsNEXUS(const char *filename, MultiFormatReader::DataFormatType fmt)
+	{
+	cerr << "[Reading " << filename << "	 ]" << endl;
+	try {
+		ostream * outStream = 0L;
+		outStream = &cout;
+		processFilepath(filename, outStream, fmt);
+		}
+	catch (...)
+		{
+		cerr << "Normalizing of " << filename << " failed (with an exception)" << endl;
+		exit(1);
+		}
+	}
+
+void readFilesListedIsFile(const char *masterFilepath, MultiFormatReader::DataFormatType fmt)
+	{
+	ifstream masterStream(masterFilepath, ios::binary);
+	if (masterStream.bad())
+		{
+		cerr << "Could not open " << masterFilepath << "." << endl;
+		exit(3);
+		}
+	char filename[1024];
+	while ((!masterStream.eof())  && masterStream.good())
+		{
+		masterStream.getline(filename, 1024);
+		if (strlen(filename) > 0 && filename[0] != '#')
+			readFilepathAsNEXUS(filename, fmt);
+		}
+	}
+
+void printHelp(ostream & out)
+	{
+	out << "NEXUStransalte takes reads a file and print the characters blocks translated to amino acids.\n";
+	out << "\nThe most common usage is simply:\n    NEXUSgapcode <path to NEXUS file>\n";
+	out << "\nCommand-line flags:\n\n";
+	out << "    -h on the command line shows this help message\n\n";
+	out << "    -l<path> reads a file and treats each line of the file as a path to NEXUS file\n\n";
+	out << "    -s<non-negative integer> controls the NEXUS strictness level.\n";
+	out << "        the default level is equivalent to -s2 invoking the program with \n";
+	out << "        -s3 or a higher number will convert some warnings into fatal errors.\n";
+	out << "        Running with -s1 will cause the parser to accept dangerous constructs,\n";
+	out << "        and running with -s0 will cause the parser make every attempt to finish\n";
+	out << "        parsing the file (warning about very serious errors).\n\n";
+	out << "        Note that when -s0 strictness level is used, and the parser fails to\n";
+	out << "        finish, it will often be the result of an earlier error than the \n";
+	out << "        error that is reported in the last message.\n";
+	out << "    -i<number> specifies the length of the interleaved pages to create\n";
+	out << "    -c<code> specifies the genetic code to use:\n";
+	out << "            -cstandard     The Standard code (default)\n";
+	out << "            -cvertmito              Vertebrate Mitochondrial\n";
+	out << "            -cyeastmito             Yeast Mitochondrial\n";
+	out << "            -cmoldmito              Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; Spiroplasma\n";
+	out << "            -cinvertmito            Invertebrate Mitochondrial\n";
+	out << "            -cciliate               Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear\n";
+	out << "            -cechinomito            Echinoderm Mitochondrial; Flatworm Mitochondrial\n";
+	out << "            -ceuplotid              Euplotid Nuclear\n";
+	out << "            -cplantplastid          Bacterial and Plant Plastid\n";
+	out << "            -caltyeast              Alternative Yeast Nuclear\n";
+	out << "            -cascidianmito          Ascidian Mitochondrial\n";
+	out << "            -caltflatwormmito       Alternative Flatworm Mitochondrial\n";
+	out << "            -cblepharismamacro      Blepharisma Macronuclear\n";
+	out << "            -cchlorophyceanmito     Chlorophycean Mitochondrial\n";
+	out << "            -ctrematodemito         Trematode Mitochondrial\n";
+	out << "            -cscenedesmusmito       Scenedesmus obliquus Mitochondrial\n";
+	out << "            -cthraustochytriummito  Thraustochytrium Mitochondrial\n";
+	out << "    -f<format> specifies the input file format expected:\n";
+	out << "            -fnexus     NEXUS (this is also the default)\n";
+	out << "            -faafasta   Amino acid data in fasta\n";
+	out << "            -fdnafasta  DNA data in fasta\n";
+	out << "            -frnafasta  RNA data in fasta\n";
+	out << "    -u to suppress the printing of untranslated nucleotides as a block\n";
+	std::vector<std::string> fmtNames =  MultiFormatReader::getFormatNames();
+	for (std::vector<std::string>::const_iterator n = fmtNames.begin(); n != fmtNames.end(); ++n)
+		{
+		out << "            "<< *n << "\n";
+		}
+	}
+
+int main(int argc, char *argv[])
+	{
+	MultiFormatReader::DataFormatType f(MultiFormatReader::NEXUS_FORMAT);
+	bool readfile = false;
+	for (int i = 1; i < argc; ++i)
+		{
+		const char * filepath = argv[i];
+		const unsigned slen = strlen(filepath);
+		if (strlen(filepath) > 1 && filepath[0] == '-' && filepath[1] == 'h')
+			printHelp(cout);
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 's')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gStrictLevel)))
+				{
+				cerr << "Expecting an integer after -s\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'u')
+			gEmitUntranslatedDNA = false;
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'i')
+			{
+			if ((slen == 2) || (!NxsString::to_long(filepath + 2, &gInterleaveLen)) || gInterleaveLen < 1)
+				{
+				cerr << "Expecting a positive integer after -i\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'c')
+			{
+			if (slen > 2)
+				{
+				std::string codeName(filepath + 2, slen - 2);
+				try {
+					gCode = geneticCodeNameToEnum(codeName);
+					}
+				catch (...)
+					{
+					cerr << "Unrecognized genetic code in -c argument: " << codeName << "\n";
+					return 1;
+					}
+				}
+			else
+				{
+				cerr << "Expecting a genetic code name after -c\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+		else if (slen > 1 && filepath[0] == '-' && filepath[1] == 'f')
+			{
+			f = MultiFormatReader::UNSUPPORTED_FORMAT;
+			if (slen > 2)
+				{
+				std::string fmtName(filepath + 2, slen - 2);
+				f =  MultiFormatReader::formatNameToCode(fmtName);
+				}
+			if (f == MultiFormatReader::UNSUPPORTED_FORMAT)
+				{
+				cerr << "Expecting a format after -f\n" << endl;
+				printHelp(cerr);
+				return 2;
+				}
+			}
+		else if (strlen(filepath) > 2 && filepath[0] == '-' && filepath[1] == 'l')
+			{
+			readfile = true;
+			readFilesListedIsFile(filepath+2, f);
+			}
+		else
+			{
+			readfile = true;
+			readFilepathAsNEXUS(filepath, f);
+			}
+		}
+	if (!readfile)
+		{
+		cerr << "Expecting the path to NEXUS file as the only command line argument!\n" << endl;
+		printHelp(cerr);
+		return 1;
+		}
+	return 0;
+	}
+
+
+void writeCoreAssumptions(ostream &out, NxsCharactersBlock * cb, const char * newTitle)
+{
+	std::vector<int>			intWts;
+	std::vector<double>			dblWts;
+	NxsUnsignedSet activeExSet = cb->GetExcludedIndexSet();
+
+	const NxsTransformationManager &tm = cb->GetNxsTransformationManagerRef();
+	intWts = tm.GetDefaultIntWeights();
+	if (intWts.empty())
+		dblWts = tm.GetDefaultDoubleWeights();
+
+	if (!(activeExSet.empty() && intWts.empty() && dblWts.empty()))
+		{
+		out << "BEGIN ASSUMPTIONS; \n    LINK CHARACTERS = ";
+		out << NxsString::GetEscaped(newTitle) << " ;\n";
+		if (!activeExSet.empty())
+			{
+			NxsString exsetName;
+			exsetName << newTitle;
+			exsetName.append("ExSet");
+			NxsUnsignedSetMap m;
+			m[exsetName] = activeExSet;
+			NxsWriteSetCommand("EXSET", m, out, exsetName.c_str());;
+			}
+		if (!(intWts.empty() && dblWts.empty()))
+			{
+			NxsTransformationManager &cbntm = cb->GetNxsTransformationManagerRef();
+			const std::string &wtSetName =  cbntm.GetDefaultWeightSetName();
+			NxsTransformationManager ntm;
+			if (!intWts.empty())
+				{
+				NxsTransformationManager::ListOfIntWeights iw;
+				vecToListOfIntWeights(intWts, iw);
+				ntm.AddIntWeightSet(wtSetName, iw, true);
+				}
+			else
+				{
+				NxsTransformationManager::ListOfDblWeights dw;
+				vecToListOfDblWeights(dblWts, dw);
+				ntm.AddRealWeightSet(wtSetName, dw, true);
+				}
+			ntm.WriteWtSet(out);
+			}
+		out << "END;\n";
+		}
+}
+
+void writeCharactersAsGapped(ostream &out, NxsCharactersBlock * cb)
+{
+	if (!cb )
+		return;
+	NxsTaxaBlockAPI *tb = cb->GetTaxaBlockPtr(NULL);
+	if (tb == NULL)
+		return;
+	NxsCharactersBlock::DataTypesEnum dt = cb->GetDataType();
+	const char g = cb->GetGapSymbol();
+	const std::string baseTitle = cb->GetTitle();
+	if (tb == NULL
+		|| dt == NxsCharactersBlock::standard
+		|| dt == NxsCharactersBlock::continuous
+		|| dt == NxsCharactersBlock::mixed
+		|| g == '\0')
+		{
+		cb->WriteAsNexus(out);
+		writeCoreAssumptions(out, cb, baseTitle.c_str());
+
+		return;
+		}
+	bool isAutogen = cb->IsAutoGeneratedTitle();
+	std::string newTitle = baseTitle;
+	newTitle.append("GapsAsMissing");
+	cb->SetTitle(newTitle, isAutogen);
+
+	std::set<unsigned> gappedColumns;
+
+	out << "BEGIN CHARACTERS;\n";
+	cb->WriteBasicBlockCommands(out);
+
+	const unsigned ntaxTotal = tb->GetNTax();
+	out << "    DIMENSIONS";
+	if (tb)
+		{
+		const unsigned wod = cb->GetNTaxWithData();
+		if (wod > 0 && wod != ntaxTotal)
+			out << " NTax=" << wod;
+		}
+	const unsigned nc = cb->GetNCharTotal();
+	out << " NChar=" << nc << ";\n";
+	cb->WriteEliminateCommand(out);
+	cb->SetGapSymbol('\0');
+	cb->WriteFormatCommand(out);
+	cb->SetGapSymbol(g);
+
+	cb->WriteCharStateLabelsCommand(out);
+
+	std::vector<int>			intWts;
+	std::vector<double>			dblWts;
+	NxsUnsignedSet activeExSet = cb->GetExcludedIndexSet();
+
+	const NxsTransformationManager &tm = cb->GetNxsTransformationManagerRef();
+	intWts = tm.GetDefaultIntWeights();
+	if (intWts.empty())
+		dblWts = tm.GetDefaultDoubleWeights();
+
+	unsigned width = tb->GetMaxTaxonLabelLength();
+	out << "Matrix\n";
+	unsigned begCharInd = 0;
+	unsigned endCharInd = nc;
+	for (unsigned i = 0; i < ntaxTotal; i++)
+		{
+		if (cb->TaxonIndHasData(i))
+			{
+			const std::string currTaxonLabel = NxsString::GetEscaped(tb->GetTaxonLabel(i));
+			out << currTaxonLabel;
+			unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+			unsigned diff = width - currTaxonLabelLen;
+			for (unsigned k = 0; k < diff + 5; k++)
+				out << ' ';
+
+			const NxsDiscreteStateRow & row = cb->GetDiscreteMatrixRow(i);
+			if (!row.empty())
+				{
+				const NxsDiscreteDatatypeMapper * dm = cb->GetDatatypeMapperForChar(0);
+				if (dm == NULL)
+					throw NxsNCLAPIException("No DatatypeMapper in WriteStatesForTaxonAsNexus");
+				if (cb->IsMixedType())
+					throw NxsNCLAPIException("Mixed datatypes are not supported by the NEXUSgapcode program.");
+				if (cb->IsTokens())
+					{
+					for (unsigned charInd = begCharInd; charInd < endCharInd; ++charInd)
+						{
+						NxsDiscreteStateCell sc = row[charInd];
+						out << ' ';
+						if (sc == NXS_GAP_STATE_CODE)
+							out << dm->GetMissingSymbol();
+						else
+							{
+							NxsString sl = cb->GetStateLabel(charInd, sc); /*v2.1to2.2 4 */
+							if (sl == " ")
+								{
+								NxsString errormsg = "Writing character state ";
+								errormsg << 1 + sc << " for character " << 1+charInd << ", but no appropriate chararcter label or symbol was found.";
+								throw NxsNCLAPIException(errormsg);
+								}
+							else
+								out  << NxsString::GetEscaped(sl);
+							}
+						}
+					}
+				else
+					{
+					std::vector<NxsDiscreteStateCell>::const_iterator endIt = row.begin() + begCharInd;
+					std::vector<NxsDiscreteStateCell>::const_iterator begIt = endIt;
+					if (endCharInd == row.size())
+						endIt = row.end();
+					else
+						endIt += endCharInd - begCharInd;
+					unsigned j = begCharInd;
+					for (; begIt != endIt; ++begIt, ++j)
+						{
+						NxsDiscreteStateCell c;
+						if (*begIt == NXS_GAP_STATE_CODE)
+							{
+							c = NXS_MISSING_CODE;
+							gappedColumns.insert(j);
+							}
+						else
+							c = *begIt;
+						dm->WriteStateCodeAsNexusString(out, c, true);
+						}
+					}
+				}
+			out << '\n';
+			}
+		}
+	out << ";\n";
+	cb->WriteSkippedCommands(out);
+	out << "END;\n";
+
+
+	writeCoreAssumptions(out, cb, newTitle.c_str());
+	const unsigned nGappedCols = gappedColumns.size();
+	if (nGappedCols > 0)
+		{
+		newTitle = baseTitle;
+		newTitle.append("GapsAsBinary");
+		cb->SetTitle(newTitle, isAutogen);
+			out << "BEGIN CHARACTERS;\n";
+		cb->WriteBasicBlockCommands(out);
+
+		out << "    DIMENSIONS";
+		if (tb)
+			{
+			const unsigned wod = cb->GetNTaxWithData();
+			if (wod > 0 && wod != ntaxTotal)
+				out << " NTax=" << wod;
+			}
+		out << " NChar=" << nGappedCols << ";\n";
+		out << " CharStateLabels " ;
+		unsigned currChNumber = 1;
+		std::set<unsigned>::iterator gcIt = gappedColumns.begin();
+		out << currChNumber++ << " col_" << (1 + *gcIt);
+		for (++gcIt ; gcIt != gappedColumns.end(); ++gcIt)
+			out << ",\n    " << currChNumber++ << " col_" << (1 + *gcIt);
+		out << " ;\n" ;
+		out << "Format Datatype = Standard Symbols=\"01\" missing = '?' ;\n";
+
+		out << "Matrix\n";
+		for (unsigned i = 0; i < ntaxTotal; i++)
+			{
+			if (cb->TaxonIndHasData(i))
+				{
+				const std::string currTaxonLabel = NxsString::GetEscaped(tb->GetTaxonLabel(i));
+				out << currTaxonLabel;
+				unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+				unsigned diff = width - currTaxonLabelLen;
+				for (unsigned k = 0; k < diff + 5; k++)
+					out << ' ';
+
+				const NxsDiscreteStateRow & row = cb->GetDiscreteMatrixRow(i);
+				for (std::set<unsigned>::iterator cIt = gappedColumns.begin(); cIt != gappedColumns.end(); ++cIt)
+					{
+					NxsDiscreteStateCell sc = row[*cIt];
+					if (sc == NXS_GAP_STATE_CODE)
+						out << '0';
+					else
+						out << '1';
+					}
+				out << '\n';
+				}
+			}
+		out << ";\n";
+		cb->WriteSkippedCommands(out);
+		out << "END;\n";
+		}
+
+	std::vector<int>			gapintWts;
+	std::vector<double>			gapdblWts;
+	std::set<unsigned>			gapactiveExSet;
+	if (!activeExSet.empty())
+		{
+		unsigned gapind = 0;
+		for (std::set<unsigned>::iterator cIt = gappedColumns.begin(); cIt != gappedColumns.end(); ++cIt, ++gapind)
+			{
+			if (activeExSet.find(*cIt) != activeExSet.end())
+				gapactiveExSet.insert(gapind);
+			}
+		}
+	if (!intWts.empty())
+		{
+		for (std::set<unsigned>::iterator cIt = gappedColumns.begin(); cIt != gappedColumns.end(); ++cIt)
+			gapintWts.push_back(intWts[*cIt]);
+		}
+	if (!dblWts.empty())
+		{
+		for (std::set<unsigned>::iterator cIt = gappedColumns.begin(); cIt != gappedColumns.end(); ++cIt)
+			gapdblWts.push_back(dblWts[*cIt]);
+		}
+
+	if (!(gapactiveExSet.empty() && gapintWts.empty() && gapdblWts.empty()))
+		{
+		out << "BEGIN ASSUMPTIONS; \n    LINK CHARACTERS = ";
+		out << NxsString::GetEscaped(newTitle) << " ;\n";
+		if (!gapactiveExSet.empty())
+			{
+			NxsString exsetName;
+			exsetName << newTitle;
+			exsetName.append("GapExSet");
+			NxsUnsignedSetMap m;
+			m[exsetName] = gapactiveExSet;
+			NxsWriteSetCommand("EXSET", m, out, exsetName.c_str());;
+			}
+		if (!(gapintWts.empty() && gapdblWts.empty()))
+			{
+			NxsTransformationManager &cbntm = cb->GetNxsTransformationManagerRef();
+			std::string wtSetName =  cbntm.GetDefaultWeightSetName();
+			wtSetName.append("GapWtSet");
+			NxsTransformationManager ntm;
+			if (!gapintWts.empty())
+				{
+				NxsTransformationManager::ListOfIntWeights iw;
+				vecToListOfIntWeights(gapintWts, iw);
+				ntm.AddIntWeightSet(wtSetName, iw, true);
+				}
+			else
+				{
+				NxsTransformationManager::ListOfDblWeights dw;
+				vecToListOfDblWeights(gapdblWts, dw);
+				ntm.AddRealWeightSet(wtSetName, dw, true);
+				}
+			ntm.WriteWtSet(out);
+			}
+		out << "END;\n";
+		}
+
+
+	cb->SetTitle(baseTitle, isAutogen);
+}
diff --git a/html/BASICCMDLINE.html b/html/BASICCMDLINE.html
new file mode 100644
index 0000000..43764d7
--- /dev/null
+++ b/html/BASICCMDLINE.html
@@ -0,0 +1,856 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: BASICCMDLINE Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class BASICCMDLINE</h1>
+
+<h2>Enums</h2>
+<a href="#UserQueryEnum"><span class="quickref">UserQueryEnum</span></a>
+<h2>Data Members</h2>
+<a href="#assumptions"><span class="quickref">assumptions</span></a>, <a href="#characters"><span class="quickref">characters</span></a>, <a href="#data"><span class="quickref">data</span></a>, <a href="#distances"><span class="quickref">distances</span></a>, <a href="#inf_open"><span class="quickref">inf_open</span></a>, <a href="#logf"><span class="quickref">logf</span></a>, <a href="#logf_open"><span class="quickref">logf_open</span></a>, <a href="#message"><span class="quickref">mess [...]
+<h2>Member Functions</h2>
+<a href="#BASICCMDLINE49"><span class="quickref">BASICCMDLINE</span></a><a href="#BASICCMDLINE71"><span class="quickref">, ~BASICCMDLINE</span></a><a href="#CharLabelToNumber88"><span class="quickref">, CharLabelToNumber</span></a><a href="#EnteringBlock100"><span class="quickref">, EnteringBlock</span></a><a href="#ExitingBlock115"><span class="quickref">, ExitingBlock</span></a><a href="#FactoryDefaults126"><span class="quickref">, FactoryDefaults</span></a><a href="#FileExists184"><sp [...]
+<h2>Class Description</h2>
+
+<p>
+BASICCMDLINE provides a template for creating a program that reads NEXUS data files and provides a basic command  line. After compiling BASICCMDLINE, you will already have a program that understands the following commands, either  typed in at the console or provided in a BASICCMDLINE block in a NEXUS data file (exception is the execute command, which can only be entered at the console). Keywords in the descriptions below are given in uppercase, however the commands themselves are case-in [...]
+
+ LOG [options];
+
+   Option         Action
+   ------------------------------------------------------
+   FILE=filename  specifies name of log file to start
+   START          indicates logging is to be started
+   STOP           indicates logging is to be stopped
+   APPEND         append to log file if it already exists
+   REPLACE        replace log file without asking
+
+ QUIT;
+</pre> See the Read function for details and to add other commands.  To change the name of the program (which is also the prompt name and the name of the program's private NEXUS  block), replace all occurrences of BASICCMDLINE with the name of your program (also search for the string  "basiccmdline" and replace with an appropriate string at each occurrence).  This class handles reading and storage for the  <a href="NxsReader.html">NxsReader</a>  block BASICCMDLINE. It also serves as the  [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Enums</span></td>
+</tr>
+</table>
+
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+  <tr><td>
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td>
+        <table border="0" width="100%" cellpadding="1">
+          <tr>
+            <td align="left" width="25%"><code class="public"><a name="UserQueryEnum">enum UserQueryEnum</a></code></td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>uq_cancel = 0x01</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>provide opportunity to cancel</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>uq_ok = 0x02</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>provide opportunity to answer ok</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>uq_yes = 0x04</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>provide opportunity to answer yes</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>uq_no = 0x08</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>provide opportunity to answer no</td>
+          </tr>
+        </table>
+      </td></tr>
+    </table>
+  </td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="assumptions">*assumptions</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to NxsAssumptionsBlock object</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsCharactersBlock.html">NxsCharactersBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="characters">*characters</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to NxsCharactersBlock object</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsDataBlock.html">NxsDataBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="data">*data</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to NxsDataBlock object</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsDistancesBlock.html">NxsDistancesBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="distances">*distances</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to NxsDistancesBlock object</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="inf_open">inf_open</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if <span class="variablename">inf</span> is currently open</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> ofstream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="logf">logf</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the log file output stream</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="logf_open">logf_open</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if <span class="variablename">logf</span> is currently open</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="message">message</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>workspace for composing output strings</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="next_command">*next_command</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>workspace for processing next command entered interactively by user</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="quit_now">quit_now</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>set to false at beginning of Run and turns true only when QUIT command processed</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsTaxaBlock.html">NxsTaxaBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="taxa">*taxa</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to NxsTaxaBlock object</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsTreesBlock.html">NxsTreesBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="trees">*trees</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to NxsTreesBlock object</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="BASICCMDLINE49">BASICCMDLINE</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes the <span class="variablename">id</span> data member to "BASICCMDLINE" and calls the FactoryDefaults member function to perform the  remaining initializations. The data member `'' is set to NULL so that memory will be allocated for it in FactoryDefaults.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="BASICCMDLINE71">~BASICCMDLINE</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Closes <span class="variablename">logf</span> if it is open and deletes memory allocated to <span class="variablename">next_command</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="CharLabelToNumber88">CharLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>The code here is identical to the base class version (simply returns 0), so the code here should either be  modified or this derived version eliminated altogether. Under what circumstances would you need to modify the  default code, you ask? This function should be modified to something meaningful if this derived class needs to  construct and run a <a href="NxsSetReader.html">NxsSetReader</a> object to read a set involving characters. The <a href="NxsSetReader.html">NxsSetReader< [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="EnteringBlock100">EnteringBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called by the <a href="NxsReader.html">NxsReader</a> object when a block named <span class="variablename">blockName</span> is entered. Allows program to notify user of  progress in parsing the NEXUS file. Also gives program the opportunity to ask user if it is ok to purge data  currently contained in this block. If user is asked whether existing data should be deleted, and the answer comes  back no, then then return false, otherwise return true. Overrides pure virtual function in [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ExitingBlock115">ExitingBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called by the <a href="NxsReader.html">NxsReader</a> object when exiting a block named <span class="variablename">blockName</span>. Allows program to notify user of progress  in parsing the NEXUS file. Virtual function that overrides the pure virtual function in the base class <a href="NxsReader.html">NxsReader</a>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="FactoryDefaults126">FactoryDefaults</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets all data members to their factory default settings: <span class="variablename">inf_open</span>, <span class="variablename">logf_open</span> and <span class="variablename">quit_now</span> are set to false;  <span class="variablename">message</span> to the null string, and the pointers <span class="variablename">data</span>, <span class="variablename">characters</span>, <span class="variablename">assumptions</span>, <span class="variablename">taxa</span> and <span class="varia [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="FileExists184">FileExists</a></code><code>(const char *fn)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if file named <span class="variablename">fn</span> already exists, false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetFileName209">GetFileName</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called whenever a file name needs to be read from either the command line or a file. Expects next token to be "="  followed by the token representing the file name. Call this function after, say, the keyword "file" has been read  in the following LOG command:<pre> log file=doofus.txt start replace;
+</pre> Note that this function will read only the "=doofus.txt " leaving "start replace;" in the stream for reading at  a later time.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleEndblock235">HandleEndblock</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when the END or ENDBLOCK command needs to be parsed from within the BASICCMDLINE block. Basically just  checks to make sure the next token in the data file is a semicolon.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleExecute255">HandleExecute</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Handles everything after the EXECUTE keyword and the terminating semicolon. Purges all blocks before executing  file specified, and no warning is given of this.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleHelp331">HandleHelp</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when the HELP command needs to be parsed from within the BASICCMDLINE block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleLog444">HandleLog</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when the LOG command needs to be parsed from within the BASICCMDLINE block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleNextCommand596">HandleNextCommand</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Accepts a string in the form of a BASICCMDLINE block containing one command and processes it just like a real  BASICCMDLINE block in a NEXUS data file.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleShow368">HandleShow</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when the HELP command needs to be parsed from within the BASICCMDLINE block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NexusError615">NexusError</a></code><code>(NxsString &msg, file_pos pos, long line, long col)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when an error is encountered in a NEXUS file. Allows program to give user details of the error as well as  the precise location of the error.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="PreprocessNextCommand643">PreprocessNextCommand</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Begins with the command just entered by the user, which is stored in the data member <span class="variablename">next_command</span>, adds a  semicolon (if the user failed to supply one), and then adds the string "end;" so the whole bundle looks like a  very short BASICCMDLINE block. This is then passed to HandleNextCommand, which processes it just like a real  BASICCMDLINE block in a NEXUS data file.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="PrintMessage686">PrintMessage</a></code><code>(bool linefeed)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>All output is funneled through here. Writes string currently stored in <span class="variablename">message</span> (a <a href="NxsString.html">NxsString</a> data member) to the  output file stream, if open, and also to the console via cerr. Places a newline after the string if <span class="variablename">linefeed</span> is  true.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="PurgeBlocks705">PurgeBlocks</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Detaches all blocks, deletes them, creates new blocks, and finally adds the new blocks. Call this function if you want to be sure that there is no data currently stored in any blocks.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Read744">Read</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function provides the ability to read everything following the block name (which is read by the <a href="NxsReader.html">NxsReader</a>  object) to the END or ENDBLOCK statement. Characters are read from the input stream <span class="variablename">in</span>. Overrides the virtual  function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Report827">Report</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function outputs a brief report of the contents of this BASICCMDLINE block. Overrides the virtual function  in the <a href="NxsBlock.html">NxsBlock</a> base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset819">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Overrides the <a href="NxsBlock.html">NxsBlock</a> virtual function. This function does nothing because the BASICCMDLINE block is simply a private command block and does not store any data.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Run843">Run</a></code><code>(char *infile_name)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Runs the command line interpreter, allowing BASICCMDLINE to interact with user. Typically, this is the only  function called in main after a BASICCMDLINE object is created. If <span class="variablename">infile_name</span> is non-NULL, the first command  executed by the command interpreter will be "EXECUTE <span class="variablename">infile_name</span>".</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingBlock900">SkippingBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when program does not recognize a block name encountered in a NEXUS file. Virtual function that overrides  the virtual function in the base class <a href="NxsReader.html">NxsReader</a>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingCommand915">SkippingCommand</a></code><code>(NxsString commandName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function is called when an unknown command named <span class="variablename">commandName</span> is about to be skipped. This version of the  function (which is identical to the base class version) does nothing (i.e., no warning is issued that a command  was unrecognized). Modify this virtual function to provide such warnings to the user (or eliminate it altogether  since the base class version already does what this does).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingDisabledBlock929">SkippingDisabledBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called by the <a href="NxsReader.html">NxsReader</a> object when skipping a block named blockName that has been disabled. Allows program to  notify user of progress in parsing the NEXUS file. Virtual function that overrides the virtual function in the  base class <a href="NxsReader.html">NxsReader</a>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="TaxonLabelToNumber942">TaxonLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>The code here is identical to the base class version (simply returns 0), so the code here should either be modified  or this derived version eliminated altogether. Under what circumstances would you need to modify the default code,  you ask? This function should be modified to something meaningful if this derived class needs to construct and run  a <a href="NxsSetReader.html">NxsSetReader</a> object to read a set involving taxa. The <a href="NxsSetReader.html">NxsSetReader</a> ob [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="UserQuery954">UserQuery</a></code><code>(NxsString mb_message, NxsString mb_title, BASICCMDLINE::UserQueryEnum mb_choices)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if response is either "ok" or "yes", and returns false if response is either "no" or "cancel". This is a general query function that can handle many situations. The possible responses are enumerated in  BASICCMDLINE::UserQueryEnum: uq_cancel, uq_ok, uq_yes, and uq_no. Not yet fully implemented: only handles uq_ok alone or the (uq_yes | uq_no) combination.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/COPYING b/html/COPYING
new file mode 100644
index 0000000..2128a66
--- /dev/null
+++ b/html/COPYING
@@ -0,0 +1,280 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
diff --git a/html/MyAssumptionsBlock.html b/html/MyAssumptionsBlock.html
new file mode 100644
index 0000000..abff6da
--- /dev/null
+++ b/html/MyAssumptionsBlock.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: MyAssumptionsBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class MyAssumptionsBlock</h1>
+
+<h2>Data Members</h2>
+<a href="#outf"><span class="quickref">outf</span></a>
+<h2>Member Functions</h2>
+<a href="#MyAssumptionsBlock263"><span class="quickref">MyAssumptionsBlock</span></a><a href="#SkippingCommand274"><span class="quickref">, SkippingCommand</span></a>
+<h2>Class Description</h2>
+
+<p>
+This derived version of  <a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a>  was created in order to provide feedback to the user on commands that are not yet impemented (much of the  <a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a>  is not yet implemented, and the  <a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a>  version of SkippingCommand is simply the one it inherited from  <a href="NxsBlock.html">NxsBlock</a> , which does nothing).
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> ostream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="outf">&outf</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd></dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="MyAssumptionsBlock263">MyAssumptionsBlock</a></code><code>(NxsTaxaBlock *tb, ostream &o)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Class derived from <a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a> so that an output file stream can be used for reporting unknown commands  that are being skipped. Overrides SkippingCommand function for this purpose.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingCommand274">SkippingCommand</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. Simply reports the command being skipped (name of command is in 's') both  to the standard output stream as well as to the output stream outf.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/MyCharactersBlock.html b/html/MyCharactersBlock.html
new file mode 100644
index 0000000..4afd8f1
--- /dev/null
+++ b/html/MyCharactersBlock.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: MyCharactersBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class MyCharactersBlock</h1>
+
+<h2>Data Members</h2>
+<a href="#outf"><span class="quickref">outf</span></a>
+<h2>Member Functions</h2>
+<a href="#MyCharactersBlock217"><span class="quickref">MyCharactersBlock</span></a><a href="#SkippingCommand229"><span class="quickref">, SkippingCommand</span></a>
+<h2>Class Description</h2>
+
+<p>
+This derived version of  <a href="NxsCharactersBlock.html">NxsCharactersBlock</a>  is necessary in order to provide for the use of an ostream to give  feedback to the user and report on the information contained in any CHARACTERS blocks found. It overloads the base  class virtual function SkippingCommand.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> ostream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="outf">&outf</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd></dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="MyCharactersBlock217">MyCharactersBlock</a></code><code>(NxsTaxaBlock *tb, NxsAssumptionsBlock *ab, ostream &o)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Class derived from <a href="NxsCharactersBlock.html">NxsCharactersBlock</a> so that an output file stream can be used for reporting unknown commands that are being skipped. Overrides SkippingCommand function for this purpose.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingCommand229">SkippingCommand</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. Simply reports the command being skipped (name of command is in 's') both  to the standard output stream as well as to the output stream outf.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/MyDataBlock.html b/html/MyDataBlock.html
new file mode 100644
index 0000000..fdba3ea
--- /dev/null
+++ b/html/MyDataBlock.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: MyDataBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class MyDataBlock</h1>
+
+<h2>Data Members</h2>
+<a href="#outf"><span class="quickref">outf</span></a>
+<h2>Member Functions</h2>
+<a href="#MyDataBlock240"><span class="quickref">MyDataBlock</span></a><a href="#SkippingCommand252"><span class="quickref">, SkippingCommand</span></a>
+<h2>Class Description</h2>
+
+<p>
+This derived version of  <a href="NxsDataBlock.html">NxsDataBlock</a>  is necessary in order to provide for the use of an ostream to give  feedback to the user and report on the information contained in any DATA blocks found. It overloads the base class virtual function SkippingCommand.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> ostream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="outf">&outf</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd></dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="MyDataBlock240">MyDataBlock</a></code><code>(NxsTaxaBlock *tb, NxsAssumptionsBlock *ab, ostream &o)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Class derived from <a href="NxsDataBlock.html">NxsDataBlock</a> so that an output file stream can be used for reporting unknown commands that are  being skipped. Overrides SkippingCommand function for this purpose.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingCommand252">SkippingCommand</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. Simply reports the command being skipped (name of command is in 's') both  to the standard output stream as well as to the output stream outf.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/MyNexusFileReader.html b/html/MyNexusFileReader.html
new file mode 100644
index 0000000..1a77879
--- /dev/null
+++ b/html/MyNexusFileReader.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: MyNexusFileReader Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class MyNexusFileReader</h1>
+
+<h2>Data Members</h2>
+<a href="#inf"><span class="quickref">inf</span></a>, <a href="#infile_exists"><span class="quickref">infile_exists</span></a>, <a href="#outf"><span class="quickref">outf</span></a>
+<h2>Member Functions</h2>
+<a href="#DebugReportBlock172"><span class="quickref">DebugReportBlock</span></a><a href="#EnteringBlock82"><span class="quickref">, EnteringBlock</span></a><a href="#ExitingBlock94"><span class="quickref">, ExitingBlock</span></a><a href="#FileExists121"><span class="quickref">, FileExists</span></a><a href="#MyNexusFileReader53"><span class="quickref">, MyNexusFileReader</span></a><a href="#MyNexusFileReader72"><span class="quickref">, ~MyNexusFileReader</span></a><a href="#NexusError1 [...]
+<h2>Class Description</h2>
+
+<p>
+This class represents a NEXUS file reader that supervises the interpretation of a NEXUS-formatted data file. It  overloads several important virtual base class functions, including EnteringBlock and ExitingBlock (which allow it to inform the user when particular blocks are being entered or exited), ExecuteStarting and ExecuteStopping (which allow any initialization before a NEXUS file is read or cleanup afterwards, respectively), SkippingBlock and  SkippingDisabledBlock (which allow user [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> ifstream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="inf">inf</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>input file stream used for reading NEXUS file</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="infile_exists">infile_exists</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if input file is determined to exist, false otherwise</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> ofstream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="outf">outf</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>output file stream used for reporting progress</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="DebugReportBlock172">DebugReportBlock</a></code><code>(NxsBlock &nexusBlock)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. If a block of the type referenced by 'nexusBlock' has been read (i.e. the IsEmpty member function returns false), this function calls the Report member function of 'nexusBlock' to dump the contents of the block object to the output file stream outf.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="EnteringBlock82">EnteringBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. Simply reports to both standard output and the output file stream outf that a block named 'blockName' was just entered by the NEXUS file reader. Always returns true.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ExitingBlock94">ExitingBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. Simply reports to both standard output and the output file stream outf that the NEXUS file reader just finished with a block named 'blockName'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="FileExists121">FileExists</a></code><code>(char *fn)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>A simple function to test for the existance of a file named 'fn'. Returns true if an attempt to open the file  succeeds, and false otherwise. No attempt is made to diagnose failure to open the file, so this function may return false even when the file exists if the file could not be opened for some other reason (e.g. user does not have read permissions for that file).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="MyNexusFileReader53">MyNexusFileReader</a></code><code>(char *infname, char *outfname)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes infile_exists to true if a file by the name 'infname' exists and to false otherwise. If a file named 'infname' exists, proceeds to open the ifstream data member inf to that file and the ofstream data member outf to the file specified by the 'outfname' argument. Does not check for the existance of the output file beforehand, so will overwrite a file if one by than name already exists. In a real application, use the FileExists member function to check for the existance  [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="MyNexusFileReader72">~MyNexusFileReader</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Destructor simply closes the input file stream inf and the output file stream outf.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NexusError188">NexusError</a></code><code>(NxsString msg, file_pos pos, unsigned line, unsigned col)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. This function simply reports the error message contained in the string 'msg' and the file position, line and column (contained in 'pos', 'line' and 'col', respectively) to both the  standard error stream and the output file stream outf. It then aborts the application by invoking exit(0).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="OutputComment106">OutputComment</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. Simply outputs the string 's' to both the standard output and the output stream outf. This function will be called when a printable NEXUS comment is found in a NEXUS file. The contents of the comment are provided in the string argument 's'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingBlock146">SkippingBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. Simply reports to both the standard output and to the output stream outf that a block named 'blockName' is being skipped because this NEXUS file reader does not know how to interpret blocks by this name. This situation is common if the NEXUS file has private blocks, e.g. a PAUP block containing commands understood only by the program PAUP.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingDisabledBlock160">SkippingDisabledBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Override of base class virtual function. Simply reports to both the standard output and to the output stream outf that a block named 'blockName' is being skipped because this block, though known to the NEXUS reader, is currently disabled. This situation arises when reading a treefile for instance (the application may disable all blocks except <a href="NxsTreesBlock.html">NxsTreesBlock</a> because only TREES blocks expected in a treefile. Overriding this function gives the applica [...]
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/MyNexusToken.html b/html/MyNexusToken.html
new file mode 100644
index 0000000..05c6ddd
--- /dev/null
+++ b/html/MyNexusToken.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: MyNexusToken Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class MyNexusToken</h1>
+
+<h2>Member Functions</h2>
+<a href="#MyNexusToken27"><span class="quickref">MyNexusToken</span></a><a href="#OutputComment38"><span class="quickref">, OutputComment</span></a>
+<h2>Class Description</h2>
+
+<p>
+The MyNexusToken class provides a  <a href="NxsToken.html">NxsToken</a> -derived object that can display output comments as it encounters them. The virtual function  <a href="NxsToken.html">NxsToken</a> ::OutputComment is overridden in this class for this purpose.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="MyNexusToken27">MyNexusToken</a></code><code>(istream &i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>The constructor simply passes along <span class="variablename">i</span> to the base class constructor. Nothing else needs to be done.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="OutputComment38">OutputComment</a></code><code>(const NxsString &msg)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Overrides the <a href="NxsToken.html">NxsToken</a>::OutputComment virtual function (which does nothing) to display output comments [!comments like this one beginning with an exclamation point]. The output comment contained in <span class="variablename">msg</span> is simply sent to the standard output stream cout.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/MyToken.html b/html/MyToken.html
new file mode 100644
index 0000000..ad2274f
--- /dev/null
+++ b/html/MyToken.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: MyToken Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class MyToken</h1>
+
+<h2>Data Members</h2>
+<a href="#out"><span class="quickref">out</span></a>
+<h2>Member Functions</h2>
+<a href="#MyToken27"><span class="quickref">MyToken</span></a><a href="#OutputComment39"><span class="quickref">, OutputComment</span></a>
+<h2>Class Description</h2>
+
+<p>
+MyToken is derived from  <a href="NxsToken.html">NxsToken</a>  in order to provide a way to report printable NEXUS comments (the square-bracket comments in NEXUS files that begin with an exclamation point and are intended to be printed in the outout).
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> ostream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="out">&out</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>output file stream</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="MyToken27">MyToken</a></code><code>(istream &is, ostream &os)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Takes an ostream reference in addition to the istream reference required by the base class <a href="NxsToken.html">NxsToken</a>. The istream  'is' is passed along to the base class constructor, and 'os' is used to initialize the data member out.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="OutputComment39">OutputComment</a></code><code>(const NxsString &msg)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Overrides the base class version. When a NEXUS printable comment is encountered in a NEXUS file, the comment is  passed to the virtual function OutputComment in its argument 'msg'. This version outputs 'msg' directly to both the standard output (cout) and the output file (out).</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NStrCaseInsensitiveEquals.html b/html/NStrCaseInsensitiveEquals.html
new file mode 100644
index 0000000..1a63711
--- /dev/null
+++ b/html/NStrCaseInsensitiveEquals.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NStrCaseInsensitiveEquals Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NStrCaseInsensitiveEquals</h1>
+
+<h2>Data Members</h2>
+<a href="#compStr"><span class="quickref">compStr</span></a>
+<h2>Member Functions</h2>
+<a href="#NStrCaseInsensitiveEquals182"><span class="quickref">NStrCaseInsensitiveEquals</span></a><a href="#operator194"><span class="quickref">, operator()</span></a>
+<h2>Class Description</h2>
+
+<p>
+Function object (Unary Predicate functor) that stores one string. The ()(const  <a href="NxsString.html">NxsString</a>  &) operator then returns the  result of a case-insensitive compare. Useful for STL find algorithms. Could be made faster than sequential case  insenstive comparisons, because the string stored in the object is just capitalized once.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="compStr">compStr</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd></dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>CI</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NStrCaseInsensitiveEquals182">NStrCaseInsensitiveEquals</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Creates a function object for case-insensitive comparisons of <span class="variablename">s</span> to a container of strings.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator194">operator()</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the result of a case-sensitive compare of <span class="variablename">s</span> and the string stored when the NStrCaseInsensitiveEquals object   was created. Could be made more efficient (currently capitalizes the entire argument even though the first character may  be wrong).</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NStrCaseSensitiveEquals.html b/html/NStrCaseSensitiveEquals.html
new file mode 100644
index 0000000..313a9d2
--- /dev/null
+++ b/html/NStrCaseSensitiveEquals.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NStrCaseSensitiveEquals Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NStrCaseSensitiveEquals</h1>
+
+<h2>Data Members</h2>
+<a href="#compStr"><span class="quickref">compStr</span></a>
+<h2>Member Functions</h2>
+<a href="#NStrCaseSensitiveEquals211"><span class="quickref">NStrCaseSensitiveEquals</span></a><a href="#operator221"><span class="quickref">, operator()</span></a>
+<h2>Class Description</h2>
+
+<p>
+Function object (Unary Predicate functor) that stores one string. The ()(const  <a href="NxsString.html">NxsString</a>  &) operator then returns the  result of a case-sensitive compare. Useful for STL find algorithms.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="compStr">compStr</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd></dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>CI</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NStrCaseSensitiveEquals211">NStrCaseSensitiveEquals</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Creates a function object for case-sensitive comparisons of <span class="variablename">s</span> to a container of strings.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator221">operator()</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the result of a case-sensitive compare of <span class="variablename">s</span> and the string stored when the NStrCaseSensitiveEquals was  created.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsAssumptionsBlock.html b/html/NxsAssumptionsBlock.html
new file mode 100644
index 0000000..2d93451
--- /dev/null
+++ b/html/NxsAssumptionsBlock.html
@@ -0,0 +1,657 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsAssumptionsBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsAssumptionsBlock</h1>
+
+<h2>Data Members</h2>
+<a href="#charBlockPtr"><span class="quickref">charBlockPtr</span></a>, <a href="#charsets"><span class="quickref">charsets</span></a>, <a href="#def_charset"><span class="quickref">def_charset</span></a>, <a href="#def_exset"><span class="quickref">def_exset</span></a>, <a href="#def_taxset"><span class="quickref">def_taxset</span></a>, <a href="#exsets"><span class="quickref">exsets</span></a>, <a href="#taxa"><span class="quickref">taxa</span></a>, <a href="#taxsets"><span class="quic [...]
+<h2>Member Functions</h2>
+<a href="#ApplyExSet170"><span class="quickref">ApplyExSet</span></a><a href="#GetCharSet74"><span class="quickref">, GetCharSet</span></a><a href="#GetCharSetNames62"><span class="quickref">, GetCharSetNames</span></a><a href="#GetDefCharSetName84"><span class="quickref">, GetDefCharSetName</span></a><a href="#GetDefExSetName160"><span class="quickref">, GetDefExSetName</span></a><a href="#GetDefTaxSetName122"><span class="quickref">, GetDefTaxSetName</span></a><a href="#GetExSet150"><s [...]
+<h2>Class Description</h2>
+
+<p>
+This class handles reading and storage for the  <a href="NxsReader.html">NxsReader</a>  block ASSUMPTIONS. It overrides the member functions Read  and Reset, which are abstract virtual functions in the base class  <a href="NxsBlock.html">NxsBlock</a> . Adding a new data member? Don't forget to:<ul> <li>Describe it in the class declaration using a C-style comment.</li> <li>Initialize it (unless it is self-initializing) in the constructor and re-initialize it in the Reset function.</li> <l [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsCharactersBlock.html">NxsCharactersBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="charBlockPtr">*charBlockPtr</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to the NxsCharactersBlock-derived object to be notified in the event of exset changes</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsUnsignedSetMap</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="charsets">charsets</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the variable storing charsets</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="def_charset">def_charset</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the default charset</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="def_exset">def_exset</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the default exset</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="def_taxset">def_taxset</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the default taxset</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsUnsignedSetMap</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="exsets">exsets</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the variable storing exsets</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsTaxaBlock.html">NxsTaxaBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="taxa">*taxa</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to the NxsTaxaBlock object</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsUnsignedSetMap</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="taxsets">taxsets</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the variable storing taxsets</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ApplyExSet170">ApplyExSet</a></code><code>(NxsString nm)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Applies exclusion set having name 'nm' by calling the ApplyExset method of the <a href="NxsCharactersBlock.html">NxsCharactersBlock</a> or  <a href="NxsCharactersBlock.html">NxsCharactersBlock</a>-derived object stored in the charBlockPtr pointer (which will be whichever block last called the  NxsAssumptionsBlock::SetCallback method).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsUnsignedSet</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetCharSet74">&GetCharSet</a></code><code>(NxsString nm)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns reference to character set having name 'nm'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetCharSetNames62">GetCharSetNames</a></code><code>(NxsStringVector &names)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Erases 'names' vector, then fills 'names' with the names of all stored character sets.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetDefCharSetName84">GetDefCharSetName</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns name of default character set. If returned string has zero length, then no default character set was defined in the data set.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetDefExSetName160">GetDefExSetName</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns name of default exclusion set. If returned string has zero length, then no default exclusion set was defined in the data set.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetDefTaxSetName122">GetDefTaxSetName</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns name of default taxon set. If returned string has zero length, then no default taxon set was defined in the data set.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsUnsignedSet</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetExSet150">&GetExSet</a></code><code>(NxsString nm)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns reference to exclusion set having name 'nm'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetExSetNames138">GetExSetNames</a></code><code>(NxsStringVector &names)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Erases names, then fills names with the names of all stored exclusion sets.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumCharSets54">GetNumCharSets</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of character sets stored.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumExSets130">GetNumExSets</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of exclusion sets stored.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumTaxSets92">GetNumTaxSets</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of taxon sets stored.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsUnsignedSet</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTaxSet112">&GetTaxSet</a></code><code>(NxsString nm)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns reference to taxon set having name 'nm'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTaxSetNames100">GetTaxSetNames</a></code><code>(NxsStringVector &names)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Erases 'names' vector, then fills 'names' with the names of all stored taxon sets.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleCharset180">HandleCharset</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads and stores information contained in the command CHARSET within an ASSUMPTIONS block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleEndblock226">HandleEndblock</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when the END or ENDBLOCK command needs to be parsed from within the ASSUMPTIONS block. Basically just checks to make sure the next token in the data file is a semicolon.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleExset247">HandleExset</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads and stores information contained in the command EXSET within an ASSUMPTIONS block. If EXSET keyword is  followed by an asterisk, last read <a href="NxsCharactersBlock.html">NxsCharactersBlock</a> or <a href="NxsCharactersBlock.html">NxsCharactersBlock</a>-derived object is notified of the  characters to be excluded (its ApplyExset function is called).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleTaxset295">HandleTaxset</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads and stores information contained in the command TAXSET within an ASSUMPTIONS block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsAssumptionsBlock25">NxsAssumptionsBlock</a></code><code>(NxsTaxaBlock *t)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets id = "ASSUMPTIONS", charBlockPtr = NULL, and taxa = t. Assumes taxa is non-NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsAssumptionsBlock37">~NxsAssumptionsBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Nothing needs to be done in the destructor.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Read340">Read</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function provides the ability to read everything following the block name (which is read by the <a href="NxsReader.html">NxsReader</a>  object) to the end or ENDBLOCK statement. Characters are read from the input stream in. Overrides the pure virtual function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ReplaceTaxaBlockPtr44">ReplaceTaxaBlockPtr</a></code><code>(NxsTaxaBlock *tb)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Makes data member taxa point to 'tb'. Assumes tb is non-NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Report423">Report</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function outputs a brief report of the contents of this ASSUMPTIONS block. Overrides the pure virtual function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset405">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Prepares for reading a new ASSUMPTIONS block. Overrides the pure virtual function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetCallback510">SetCallback</a></code><code>(NxsCharactersBlock *p)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>A CHARACTERS, DATA, or ALLELES block can call this function to specify that it is to receive notification when the  current taxon or character set changes (e.g., an "EXSET *" command is read or a program requests that one of the  predefined taxon sets, character sets, or exsets be applied). Normally, a <a href="NxsCharactersBlock.html">NxsCharactersBlock</a>-derived object calls  this function upon entering its MATRIX command, since when that happens it becomes the primary data-c [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="TaxonLabelToNumber521">TaxonLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts a taxon label to a number corresponding to the taxon's position within the list maintained by the  <a href="NxsTaxaBlock.html">NxsTaxaBlock</a> object. This method overrides the virtual function of the same name in the <a href="NxsBlock.html">NxsBlock</a> base class. If s  is not a valid taxon label, returns the value 0.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsBlock.html b/html/NxsBlock.html
new file mode 100644
index 0000000..d581582
--- /dev/null
+++ b/html/NxsBlock.html
@@ -0,0 +1,461 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsBlock</h1>
+
+<h2>Friends</h2>
+class <a href="NxsReader.html"><span class="quickref">NxsReader</span></a>
+<h2>Data Members</h2>
+<a href="#errormsg"><span class="quickref">errormsg</span></a>, <a href="#id"><span class="quickref">id</span></a>, <a href="#isEmpty"><span class="quickref">isEmpty</span></a>, <a href="#isEnabled"><span class="quickref">isEnabled</span></a>, <a href="#isUserSupplied"><span class="quickref">isUserSupplied</span></a>, <a href="#next"><span class="quickref">next</span></a>, <a href="#nexus"><span class="quickref">nexus</span></a>
+<h2>Member Functions</h2>
+<a href="#CharLabelToNumber51"><span class="quickref">CharLabelToNumber</span></a><a href="#Disable66"><span class="quickref">, Disable</span></a><a href="#Enable77"><span class="quickref">, Enable</span></a><a href="#GetID117"><span class="quickref">, GetID</span></a><a href="#IsEmpty109"><span class="quickref">, IsEmpty</span></a><a href="#IsEnabled88"><span class="quickref">, IsEnabled</span></a><a href="#IsUserSupplied99"><span class="quickref">, IsUserSupplied</span></a><a href="#Nx [...]
+<h2>Class Description</h2>
+
+<p>
+This is the base class from which all block classes are derived. A NxsBlock-derived class encapsulates a Nexus block (e.g. DATA block, TREES block, etc.). The abstract virtual function Read must be overridden for each derived class  to provide the ability to read everything following the block name (which is read by the  <a href="NxsReader.html">NxsReader</a>  object) to the  end or endblock statement. Derived classes must provide their own data storage and access functions. The abstract [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="errormsg">errormsg</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>workspace for creating error messages</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="id">id</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>holds name of block (e.g., "DATA", "TREES", etc.)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="isEmpty">isEmpty</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if this object is currently storing data</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="isEnabled">isEnabled</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if this block is currently ebabled</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="isUserSupplied">isUserSupplied</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if this object has been read from a file; false otherwise</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsBlock</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="next">*next</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to next block in list</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsReader.html">NxsReader</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="nexus">*nexus</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to the Nexus file reader object</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="CharLabelToNumber51">CharLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This base class version simply returns 0 but a derived class should override this function if it needs to construct and run a <a href="NxsSetReader.html">NxsSetReader</a> object to read a set involving characters. The <a href="NxsSetReader.html">NxsSetReader</a> object may need to use this  function to look up a character label encountered in the set. A class that overrides this method should return the character index in the range [1..nchar].</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Disable66">Disable</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the value of isEnabled to false. A NxsBlock can be disabled (by calling this method) if blocks of that type are to be skipped during execution of the NEXUS file. If a disabled block is encountered, the virtual <a href="NxsReader.html">NxsReader</a>::SkippingDisabledBlock function is called, giving your application the opportunity to inform the user that a block was skipped.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Enable77">Enable</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the value of isEnabled to true. A NxsBlock can be disabled (by calling Disable) if blocks of that type are to be skipped during execution of the NEXUS file. If a disabled block is encountered, the virtual  <a href="NxsReader.html">NxsReader</a>::SkippingDisabledBlock function is called, giving your application the opportunity to inform the user that a block was skipped.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetID117">GetID</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the id <a href="NxsString.html">NxsString</a>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsEmpty109">IsEmpty</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if Read function has not been called since the last Reset. This base class version simply returns the  value of the data member isEmpty. If you derive a new block class from NxsBlock, be sure to set isEmpty to true in  your Reset function and isEmpty to false in your Read function.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsEnabled88">IsEnabled</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns value of isEnabled, which can be controlled through use of the Enable and Disable member functions. A  NxsBlock should be disabled if blocks of that type are to be skipped during execution of the NEXUS file. If a  disabled block is encountered, the virtual <a href="NxsReader.html">NxsReader</a>::SkippingDisabledBlock function is called, giving your  application the opportunity to inform the user that a block was skipped.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsUserSupplied99">IsUserSupplied</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns value of isUserSupplied, which is true if and only if this block's Read function is called to process a  block of this type appearing in a data file. This is useful because in some cases, a block object may be created  internally (e.g. a <a href="NxsTaxaBlock.html">NxsTaxaBlock</a> may be populated using taxon names provided in a DATA block), and such blocks do  not require permission from the user to delete data stored therein.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsBlock26">NxsBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes all pointer data members to NULL, and all bool data members to true except isUserSupplied, which is initialized to false.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsBlock41">~NxsBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Nothing to be done.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Read129">Read</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This virtual function must be overridden for each derived class to provide the ability to read everything following the block name (which is read by the <a href="NxsReader.html">NxsReader</a> object) to the end or endblock statement. Characters are read from  the input stream 'in'. Note that to get output comments displayed, you must derive a class from <a href="NxsToken.html">NxsToken</a>, override  the member function OutputComment to display a supplied comment, and then pass a [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Report149">Report</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This virtual function provides a brief report of the contents of the block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset142">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This virtual function should be overridden for each derived class to completely reset the block object in  preparation for reading in another block of this type. This function is called by the <a href="NxsReader.html">NxsReader</a> object just prior to calling the block object's Read function.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetNexus160">SetNexus</a></code><code>(NxsReader *nxsptr)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the nexus data member of the NxsBlock object to 'nxsptr'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingCommand171">SkippingCommand</a></code><code>(NxsString commandName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function is called when an unknown command named commandName is about to be skipped. This version of the  function does nothing (i.e., no warning is issued that a command was unrecognized). Override this virtual function  in a derived class to provide such warnings to the user.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="TaxonLabelToNumber185">TaxonLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This base class version simply returns 0, but a derived class should override this function if it needs to construct and run a <a href="NxsSetReader.html">NxsSetReader</a> object to read a set involving taxa. The <a href="NxsSetReader.html">NxsSetReader</a> object may need to use this function to look up a taxon label encountered in the set. A class that overrides this method should return the taxon index in the range [1..ntax].</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsCharactersBlock.html b/html/NxsCharactersBlock.html
new file mode 100644
index 0000000..63f205b
--- /dev/null
+++ b/html/NxsCharactersBlock.html
@@ -0,0 +1,2207 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsCharactersBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsCharactersBlock</h1>
+
+<h2>Friends</h2>
+class <a href="NxsAssumptionsBlock.html"><span class="quickref">NxsAssumptionsBlock</span></a>
+<h2>Enums</h2>
+<a href="#DataTypesEnum"><span class="quickref">DataTypesEnum</span></a>
+<h2>Data Members</h2>
+<a href="#activeChar"><span class="quickref">activeChar</span></a>, <a href="#activeTaxon"><span class="quickref">activeTaxon</span></a>, <a href="#assumptionsBlock"><span class="quickref">assumptionsBlock</span></a>, <a href="#charLabels"><span class="quickref">charLabels</span></a>, <a href="#charPos"><span class="quickref">charPos</span></a>, <a href="#charStates"><span class="quickref">charStates</span></a>, <a href="#datatype"><span class="quickref">datatype</span></a>, <a href="#el [...]
+<h2>Member Functions</h2>
+<a href="#ApplyDelset72"><span class="quickref">ApplyDelset</span></a><a href="#ApplyExset104"><span class="quickref">, ApplyExset</span></a><a href="#ApplyIncludeset135"><span class="quickref">, ApplyIncludeset</span></a><a href="#ApplyRestoreset167"><span class="quickref">, ApplyRestoreset</span></a><a href="#BuildCharPosArray201"><span class="quickref">, BuildCharPosArray</span></a><a href="#CharLabelToNumber223"><span class="quickref">, CharLabelToNumber</span></a><a href="#Consume24 [...]
+<h2>Class Description</h2>
+
+<p>
+This class handles reading and storage for the NEXUS block CHARACTERS. It overrides the member functions Read and  Reset, which are abstract virtual functions in the base class  <a href="NxsBlock.html">NxsBlock</a> . The issue of bookkeeping demands a careful explanation. Users are allowed to control the number of characters analyzed either by "eliminating" or "excluding" characters. Characters can be eliminated (by using the ELIMINATE command) at the time of execution of the data  file, [...]
+ GetNumStates
+ GetNumStates
+ GetObsNumStates
+ GetOrigCharIndex
+ GetOrigCharNumber
+ GetState
+ HandleNextState
+ HandleTokenState
+ IsGapState
+ IsMissingState
+ IsPolymorphic
+ ShowStateLabels
+</pre> The function IsEliminated is exceptional in requiring (by necessity) the original character index. The function  GetOrigCharIndex returns the original character index for any current character index. This is useful only when  outputting information that will be seen by the user, and in this case, it is really the character number that  should be output. To get the original character number, either add 1 to GetOrigCharIndex or call GetOrigCharNumber function (which simply returns G [...]
+ 	{
+ 	if (IsExcluded(j))
+ 		continue;
+ 	.
+ 	.
+ 	.
+ 	}
+</pre> A corresponding set of data structures and functions exists to provide the same services for taxa. Thus, <span class="variablename">ntax</span>  holds the current number of taxa, whereas <span class="variablename">ntaxTotal</span> holds the number of taxa specified in the TAXA block.  If data is provided in the MATRIX command for all taxa listed in the TAXA block, ntax will be equal to <span class="variablename">ntaxTotal</span>. If data is not provided for some of the taxa, the o [...]
+ 	{
+ 	if (IsDeleted(i))
+ 		continue;
+ 	.
+ 	.
+ 	.
+ 	}
+</pre> Below is a table showing the correspondence between the elements of a CHARACTERS block in a NEXUS file and the variables and member functions of the NxsCharactersBlock class that can be used to access each piece of information stored. Items in parenthesis should be viewed as "see also" items.<pre> NEXUS         Command        Data           Member
+   Command       Atribute       Member         Functions
+ ---------------------------------------------------------------------
+ DIMENSIONS    NEWTAXA        newtaxa
+
+               NTAX           ntax           GetNTax
+                                (ntaxTotal)    (GetNumMatrixRows)
+
+               NCHAR          nchar          GetNChar
+                              (ncharTotal)   (GetNumMatrixCols)
+
+ FORMAT        DATATYPE       datatype       GetDataType
+
+               RESPECTCASE    respectingCase IsRespectCase
+
+               MISSING        missing        GetMissingSymbol
+
+               GAP            gap            GetGapSymbol
+
+               SYMBOLS        symbols        GetSymbols
+
+               EQUATE         equates        GetEquateKey
+                                             GetEquateValue
+                                             GetNumEquates
+
+               MATCHCHAR      matchchar      GetMatchcharSymbol
+
+               (NO)LABELS     labels         IsLabels
+
+               TRANSPOSE      transposing    IsTranspose
+
+               INTERLEAVE     interleaving   IsInterleave
+
+               ITEMS          (Note: only STATES implemented)
+
+               STATESFORMAT   (Note: only STATESPRESENT implemented)
+
+               (NO)TOKENS     tokens         IsTokens
+
+ ELIMINATE                    eliminated     IsEliminated
+                                             GetNumEliminated
+
+ MATRIX                       matrix         GetState
+                                             GetInternalRepresentation
+                                             GetNumStates
+                                             GetNumMatrixRows
+                                             GetNumMatrixCols
+                                             IsPolymorphic
+</pre>
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Enums</span></td>
+</tr>
+</table>
+
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+  <tr><td>
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td>
+        <table border="0" width="100%" cellpadding="1">
+          <tr>
+            <td align="left" width="25%"><code class="public"><a name="DataTypesEnum">enum DataTypesEnum</a></code></td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>standard = 1</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>indicates <span class="variablename">matrix</span> holds characters with arbitrarily-assigned, discrete states, such as discrete morphological data</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>dna = 2</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>indicates <span class="variablename">matrix</span> holds DNA sequences (states A, C, G, T)</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>rna = 3</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>indicates <span class="variablename">matrix</span> holds RNA sequences (states A, C, G, U)</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>nucleotide = 4</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>indicates <span class="variablename">matrix</span> holds nucleotide sequences</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>protein = 5</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>indicates <span class="variablename">matrix</span> holds amino acid sequences</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>continuous = 6</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>indicates <span class="variablename">matrix</span> holds continuous data</td>
+          </tr>
+        </table>
+      </td></tr>
+    </table>
+  </td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="activeChar">*activeChar</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>`activeChar[i]' true if character <span class="variablename">i</span> not excluded; <span class="variablename">i</span> is in range [0..<span class="variablename">nchar</span>)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="activeTaxon">*activeTaxon</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>`activeTaxon[i]' true if taxon <span class="variablename">i</span> not deleted; <span class="variablename">i</span> is in range [0..<span class="variablename">ntax</span>)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="assumptionsBlock">*assumptionsBlock</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to the ASSUMPTIONS block in which exsets, taxsets and charsets are stored</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsStringVector</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="charLabels">charLabels</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for character labels (if provided)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="charPos">*charPos</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>maps character numbers in the data file to column numbers in matrix (necessary if some characters have been eliminated)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsStringVectorMap</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="charStates">charStates</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for character state labels (if provided)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> DataTypesEnum</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="datatype">datatype</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>flag variable (see datatypes enum)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsUnsignedSet</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="eliminated">eliminated</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>array of (0-offset) character numbers that have been eliminated (will remain empty if no ELIMINATE command encountered)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsStringMap</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="equates">equates</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>list of associations defined by EQUATE attribute of FORMAT command</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="formerly_datablock">formerly_datablock</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if this object was originally read in as a DATA block rather than as a CHARACTERS block, false otherwise</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="gap">gap</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>gap symbol for use with molecular data</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="interleaving">interleaving</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>indicates matrix will be in interleaved format</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="labels">labels</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>indicates whether or not labels will appear on left side of matrix</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="matchchar">matchchar</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>match symbol to use in matrix</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="matrix">*matrix</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for discrete data</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="missing">missing</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>missing data symbol</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="nchar">nchar</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>number of columns in matrix (same as <span class="variablename">ncharTotal</span> unless some characters were eliminated, in which case <span class="variablename">ncharTotal</span> > <span class="variablename">nchar</span>)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="ncharTotal">ncharTotal</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>total number of characters (same as <span class="variablename">nchar</span> unless some characters were eliminated, in which case <span class="variablename">ncharTotal</span> > <span class="variablename">nchar</span>)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="newchar">newchar</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true unless CHARLABELS or CHARSTATELABELS command read</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="newtaxa">newtaxa</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if NEWTAXA keyword encountered in DIMENSIONS command</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="ntax">ntax</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>number of rows in matrix (same as <span class="variablename">ntaxTotal</span> unless fewer taxa appeared in CHARACTERS MATRIX command than were specified in the TAXA block, in which case <span class="variablename">ntaxTotal</span> > <span class="variablename">ntax</span>)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="ntaxTotal">ntaxTotal</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>number of taxa (same as <span class="variablename">ntax</span> unless fewer taxa appeared in CHARACTERS MATRIX command than were specified in the TAXA block, in which case <span class="variablename">ntaxTotal</span> > <span class="variablename">ntax</span>)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="respectingCase">respectingCase</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>if true, RESPECTCASE keyword specified in FORMAT command</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="symbols">*symbols</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>list of valid character state symbols</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsTaxaBlock.html">NxsTaxaBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="taxa">*taxa</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to the TAXA block in which taxon labels are stored</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="taxonPos">*taxonPos</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>maps taxon numbers in the data file to row numbers in matrix (necessary if fewer taxa appear in CHARACTERS block MATRIX command than are specified in the TAXA block)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="tokens">tokens</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>if false, data matrix entries must be single symbols; if true, multicharacter entries are allows</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="transposing">transposing</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>indicates matrix will be in transposed format</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ApplyDelset72">ApplyDelset</a></code><code>(NxsUnsignedSet &delset)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Deletes (i.e., excludes from further analyses) taxa whose indices are contained in the set <span class="variablename">delset</span>. The taxon  indices refer to original taxon indices, not current indices (originals will equal current ones if number of taxa  in TAXA block equals number of taxa in MATRIX command). Returns the number of taxa actually deleted (some may have  already been deleted)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ApplyExset104">ApplyExset</a></code><code>(NxsUnsignedSet &exset)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Excludes characters whose indices are contained in the set <span class="variablename">exset</span>. The indices supplied should refer to the  original character indices, not current character indices. Returns number of characters actually excluded (some  may have already been excluded).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ApplyIncludeset135">ApplyIncludeset</a></code><code>(NxsUnsignedSet &inset)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Includes characters whose indices are contained in the set <span class="variablename">inset</span>. The indices supplied should refer to the  original character indices, not current character indices.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ApplyRestoreset167">ApplyRestoreset</a></code><code>(NxsUnsignedSet &restoreset)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Restores (i.e., includes in further analyses) taxa whose indices are contained in the set <span class="variablename">restoreset</span>. The taxon  indices refer to original taxon indices, not current indices (originals will equal current ones if number of taxa  in TAXA block equals number of taxa in MATRIX command).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="BuildCharPosArray201">BuildCharPosArray</a></code><code>(bool check_eliminated)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Use to allocate memory for (and initialize) <span class="variablename">charPos</span> array, which keeps track of the original character index in  cases where characters have been eliminated. This function is called by HandleEliminate in response to encountering  an ELIMINATE command in the data file, and this is probably the only place where BuildCharPosArray should be called  with <span class="variablename">check_eliminated</span> true. BuildCharPosArray is also called in Handl [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="CharLabelToNumber223">CharLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts a character label to a 1-offset number corresponding to the character's position within <span class="variablename">charLabels</span>. This method overrides the virtual function of the same name in the <a href="NxsBlock.html">NxsBlock</a> base class. If <span class="variablename">s</span> is not a valid character  label, returns the value 0.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Consume244">Consume</a></code><code>(NxsCharactersBlock &other)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Transfers all data from <span class="variablename">other</span> to this object, leaving <span class="variablename">other</span> completely empty. Used to convert a <a href="NxsDataBlock.html">NxsDataBlock</a>  object to a NxsCharactersBlock object in programs where it is desirable to just have a NxsCharactersBlock for  storage but also allow users to enter the information in the form of the deprecated <a href="NxsDataBlock.html">NxsDataBlock</a>. This function  does not make a co [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="DebugShowMatrix348">DebugShowMatrix</a></code><code>(ostream &out, bool use_matchchar, char *marginText)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Provides a dump of the contents of the <span class="variablename">matrix</span> variable. Useful for testing whether data is being read as  expected. If marginText is NULL, matrix output is placed flush left. If each line of output should be prefaced with  a tab character, specify "	" for <span class="variablename">marginText</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="DeleteTaxon323">DeleteTaxon</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Deletes taxon whose 0-offset current index is <span class="variablename">i</span>. If taxon has already been deleted, this function has no effect.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ExcludeCharacter333">ExcludeCharacter</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Excludes character whose 0-offset current index is <span class="variablename">i</span>. If character has already been excluded, this function has  no effect.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetActiveCharArray345">*GetActiveCharArray</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns <span class="variablename">activeChar</span> data member (pointer to first element of the <span class="variablename">activeChar</span> array). Access to this protected  data member is necessary in certain circumstances, such as when a NxsCharactersBlock object is stored in another  class, and that other class needs direct access to the <span class="variablename">activeChar</span> array even though it is not derived from  NxsCharactersBlock.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetActiveTaxonArray356">*GetActiveTaxonArray</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns <span class="variablename">activeTaxon</span> data member (pointer to first element of the <span class="variablename">activeTaxon</span> array). Access to this protected  data member is necessary in certain circumstances, such as when a NxsCharactersBlock object is stored in another  class, and that other class needs direct access to the <span class="variablename">activeTaxon</span> array even though it is not derived from  NxsCharactersBlock.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetCharLabel365">GetCharLabel</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns label for character <span class="variablename">i</span>, if a label has been specified. If no label was specified, returns string  containing a single blank (i.e., " ").</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetCharPos380">GetCharPos</a></code><code>(unsigned origCharIndex)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns current index of character in matrix. This may differ from the original index if some characters were  removed using an ELIMINATE command. For example, character number 9 in the original data matrix may now be at  position 8 if the original character 8 was eliminated. The parameter <span class="variablename">origCharIndex</span> is assumed to range from  0 to <span class="variablename">ncharTotal</span> - 1.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetDataType416">GetDataType</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns value of <span class="variablename">datatype</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetGapSymbol393">GetGapSymbol</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the gap symbol currently in effect. If no gap symbol specified, returns ' '.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetInternalRepresentation443">GetInternalRepresentation</a></code><code>(unsigned i, unsigned j, unsigned k)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns internal representation of the state for taxon <span class="variablename">i</span>, character <span class="variablename">j</span>. In the normal situation, <span class="variablename">k</span> is 0 meaning there is only one state with no uncertainty or polymorphism. If there are multiple states, specify a number in the  range [0..n) where n is the number of states returned by the GetNumStates function. Use the IsPolymorphic  function to determine whether the multiple state [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetMatchcharSymbol424">GetMatchcharSymbol</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the <span class="variablename">matchchar</span> symbol currently in effect. If no <span class="variablename">matchchar</span> symbol specified, returns ' '.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetMaxObsNumStates406">GetMaxObsNumStates</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the maximum observed number of states for any character. Note: this function is rather slow, as it must  walk through each row of each column, adding the states encountered to a set,  then finally returning the size of  the set. Thus, if this function is called often, it would be advisable to initialize an array using this function,  then refer to the array subsequently.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetMissingSymbol459">GetMissingSymbol</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the missing data symbol currently in effect. If no missing data symbol specified, returns ' '.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNChar467">GetNChar</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of <span class="variablename">nchar</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNCharTotal475">GetNCharTotal</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of <span class="variablename">ncharTotal</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNTax483">GetNTax</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of <span class="variablename">ntax</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNTaxTotal491">GetNTaxTotal</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of <span class="variablename">ntaxTotal</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumActiveChar423">GetNumActiveChar</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Performs a count of the number of characters for which <span class="variablename">activeChar</span> array reports true.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumActiveTaxa439">GetNumActiveTaxa</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Performs a count of the number of taxa for which <span class="variablename">activeTaxon</span> array reports true.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumEliminated499">GetNumEliminated</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of characters eliminated with the ELIMINATE command.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumEquates507">GetNumEquates</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of stored equate associations.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumMatrixCols516">GetNumMatrixCols</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of actual columns in <span class="variablename">matrix</span>. This number is equal to <span class="variablename">nchar</span>, but can be smaller than  <span class="variablename">ncharTotal</span> since the user could have eliminated some of the characters.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumMatrixRows525">GetNumMatrixRows</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of actual rows in <span class="variablename">matrix</span>. This number is equal to <span class="variablename">ntax</span>, but can be smaller than <span class="variablename">ntaxTotal</span> since the user did not have to provide data for all taxa specified in the TAXA block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumStates533">GetNumStates</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of states for taxon <span class="variablename">i</span>, character <span class="variablename">j</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>IV</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetObsNumStates546">GetObsNumStates</a></code><code>(unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of states for character <span class="variablename">j</span> over all taxa. Note: this function is rather slow, as it must walk  through each row, adding the states encountered to a set, then finally returning the size of the set. Thus, if this  function is called often, it would be advisable to initialize an array using this function, then refer to the array  subsequently.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetOrigCharIndex456">GetOrigCharIndex</a></code><code>(unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the original character index in the range [0..<span class="variablename">ncharTotal</span>). Will be equal to <span class="variablename">j</span> unless some characters  were eliminated.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetOrigCharNumber556">GetOrigCharNumber</a></code><code>(unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the original character number (used in the NEXUS data file) in the range [1..<span class="variablename">ncharTotal</span>]. Will be equal  to <span class="variablename">j</span> + 1 unless some characters were eliminated.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetOrigTaxonIndex471">GetOrigTaxonIndex</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the original taxon index in the range [0..<span class="variablename">ntaxTotal</span>). Will be equal to <span class="variablename">i</span> unless data was not provided  for some taxa listed in a preceding TAXA block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetOrigTaxonNumber566">GetOrigTaxonNumber</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the original taxon number (used in the NEXUS data file) in the range [1..<span class="variablename">ntaxTotal</span>]. Will be equal to  <span class="variablename">i</span> + 1 unless data was not provided for some taxa listed in a preceding TAXA block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetState579">GetState</a></code><code>(unsigned i, unsigned j, unsigned k)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns symbol from symbols list representing the state for taxon <span class="variablename">i</span> and character <span class="variablename">j</span>. The normal situation in  which there is only one state with no uncertainty or polymorphism is represented by <span class="variablename">k</span> = 0. If there are multiple  states, specify a number in the range [0..n) where n is the number of states returned by the GetNumStates function. Use the IsPolymorphic function to determin [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetStateLabel488">GetStateLabel</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns label for character state <span class="variablename">j</span> at character <span class="variablename">i</span>, if a label has been specified. If no label was specified,  returns string containing a single blank (i.e., " ").</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetSymbols598">*GetSymbols</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns data member <span class="variablename">symbols</span>.  Warning: returned value may be NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTaxonLabel606">GetTaxonLabel</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns label for taxon number <span class="variablename">i</span> (<span class="variablename">i</span> ranges from 0 to <span class="variablename">ntax</span> - 1).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTaxPos403">GetTaxPos</a></code><code>(unsigned origTaxonIndex)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns current index of taxon in matrix. This may differ from the original index if some taxa were listed in the  TAXA block but not in the DATA or CHARACTERS block. The parameter <span class="variablename">origTaxonIndex</span> is assumed to range from 0 to  <span class="variablename">ntaxTotal</span> - 1.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleCharlabels551">HandleCharlabels</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when CHARLABELS command needs to be parsed from within the DIMENSIONS block. Deals with everything after  the token CHARLABELS up to and including the semicolon that terminates the CHARLABELS command. If an ELIMINATE  command has been processed, labels for eliminated characters will not be stored.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleCharstatelabels600">HandleCharstatelabels</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when CHARSTATELABELS command needs to be parsed from within the CHARACTERS block. Deals with everything  after the token CHARSTATELABELS up to and including the semicolon that terminates the CHARSTATELABELS command.  Resulting <span class="variablename">charLabels</span> vector will store labels only for characters that have not been eliminated, and likewise for  <span class="variablename">charStates</span>. Specifically, `charStates[0]' refers to the vector of character s [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleDimensions728">HandleDimensions</a></code><code>(NxsToken &token, NxsString newtaxaLabel, NxsString ntaxLabel, NxsString ncharLabel)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when DIMENSIONS command needs to be parsed from within the CHARACTERS block. Deals with everything after  the token DIMENSIONS up to and including the semicolon that terminates the DIMENSIONs command. <span class="variablename">newtaxaLabel</span>,  <span class="variablename">ntaxLabel</span> and <span class="variablename">ncharLabel</span> are simply "NEWTAXA", "NTAX" and "NCHAR" for this class, but may be different for  derived classes that use <span class="variablename" [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleEliminate839">HandleEliminate</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when ELIMINATE command needs to be parsed from within the CHARACTERS block. Deals with everything after the  token ELIMINATE up to and including the semicolon that terminates the ELIMINATE command. Any character numbers  or ranges of character numbers specified are stored in the NxsUnsignedSet <span class="variablename">eliminated</span>, which remains empty until  an ELIMINATE command is processed. Note that like all sets the character ranges are adjusted so that their of [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleEndblock871">HandleEndblock</a></code><code>(NxsToken &token, NxsString charToken)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when the END or ENDBLOCK command needs to be parsed from within the CHARACTERS block. Does two things:   o checks to make sure the next token in the data file is a semicolon o eliminates character labels and character state labels for characters that have been eliminated</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleFormat907">HandleFormat</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when FORMAT command needs to be parsed from within the DIMENSIONS block. Deals with everything after the  token FORMAT up to and including the semicolon that terminates the FORMAT command.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleMatrix2139">HandleMatrix</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when MATRIX command needs to be parsed from within the CHARACTERS block. Deals with everything after the  token MATRIX up to and including the semicolon that terminates the MATRIX command.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleNextState1432">HandleNextState</a></code><code>(NxsToken &token, unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called from HandleStdMatrix or HandleTransposedMatrix function to read in the next state. Always returns true  except in the special case of an interleaved matrix, in which case it returns false if a newline character is  encountered before the next token.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleStatelabels2239">HandleStatelabels</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when STATELABELS command needs to be parsed from within the DIMENSIONS block. Deals with everything after  the token STATELABELS up to and including the semicolon that terminates the STATELABELS command. Note that the  numbers of states are shifted back one before being stored so that the character numbers in the NxsStringVectorMap  objects are 0-offset rather than being 1-offset as in the <a href="NxsReader.html">NxsReader</a> data file.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleStdMatrix1786">HandleStdMatrix</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called from HandleMatrix function to read in a standard (i.e., non-transposed) matrix. Interleaving, if  applicable, is dealt with herein.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleTaxlabels2300">HandleTaxlabels</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when TAXLABELS command needs to be parsed from within the CHARACTERS block. Deals with everything after the  token TAXLABELS up to and including the semicolon that terminates the TAXLABELS command.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleTokenState1737">HandleTokenState</a></code><code>(NxsToken &token, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called from HandleNextState to read in the next state when TOKENS was specified. Looks up state in character  states listed for the character to make sure it is a valid state, and returns state's value (0, 1, 2, ...). Note:  does NOT handle adding the state's value to matrix. Save the return value (call it k) and use the following command to add it to matrix: matrix->AddState(i, j, k);</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleTransposedMatrix1977">HandleTransposedMatrix</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called from HandleMatrix function to read in a transposed matrix. Interleaving, if applicable, is dealt with herein.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IncludeCharacter616">IncludeCharacter</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Includes character whose 0-offset current index is <span class="variablename">i</span>. If character is already active, this function has no effect.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsActiveChar626">IsActiveChar</a></code><code>(unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if character <span class="variablename">j</span> is active. If character <span class="variablename">j</span> has been excluded, returns false. Assumes <span class="variablename">j</span> is in the  range [0..<span class="variablename">nchar</span>).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsActiveTaxon639">IsActiveTaxon</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if taxon <span class="variablename">i</span> is active. If taxon <span class="variablename">i</span> has been deleted, returns false. Assumes <span class="variablename">i</span> is in the range  [0..<span class="variablename">ntax</span>).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsDeleted651">IsDeleted</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if taxon number i has been deleted, false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsEliminated506">IsEliminated</a></code><code>(unsigned origCharIndex)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if character number <span class="variablename">origCharIndex</span> was eliminated, false otherwise. Returns false immediately if  <span class="variablename">eliminated</span> set is empty.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsExcluded661">IsExcluded</a></code><code>(unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if character <span class="variablename">j</span> has been excluded. If character <span class="variablename">j</span> is active, returns false. Assumes <span class="variablename">j</span> is in the  range [0..<span class="variablename">nchar</span>).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsGapState671">IsGapState</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the state at taxon <span class="variablename">i</span>, character <span class="variablename">j</span> is the gap state, false otherwise. Assumes <span class="variablename">matrix</span> is  non-NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsInSymbols527">IsInSymbols</a></code><code>(char ch)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if <span class="variablename">ch</span> can be found in the <span class="variablename">symbols</span> array. The value of <span class="variablename">respectingCase</span> is used to determine  whether or not the search should be case sensitive. Assumes <span class="variablename">symbols</span> is non-NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsInterleave682">IsInterleave</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if INTERLEAVE was specified in the FORMAT command, false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsLabels690">IsLabels</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if LABELS was specified in the FORMAT command, false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsMissingState699">IsMissingState</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the state at taxon <span class="variablename">i</span>, character <span class="variablename">j</span> is the missing state, false otherwise. Assumes <span class="variablename">matrix</span> is  non-NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsPolymorphic712">IsPolymorphic</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if taxon <span class="variablename">i</span> is polymorphic for character <span class="variablename">j</span>, false otherwise. Assumes <span class="variablename">matrix</span> is non-NULL. Note  that return value will be false if there is only one state (i.e., one cannot tell whether there is uncertainty  using this function).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsRespectCase723">IsRespectCase</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if RESPECTCASE was specified in the FORMAT command, false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsTokens731">IsTokens</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if TOKENS was specified in the FORMAT command, false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsTranspose739">IsTranspose</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if TRANSPOSE was specified in the FORMAT command, false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsCharactersBlock30">NxsCharactersBlock</a></code><code>(NxsTaxaBlock *tb, NxsAssumptionsBlock *ab)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes <span class="variablename">id</span> to "CHARACTERS", <span class="variablename">taxa</span> to <span class="variablename">tb</span>, <span class="variablename">assumptionsBlock</span> to <span class="variablename">ab</span>, <span class="variablename">ntax</span>, <span class="variablename">ntaxTotal</span>, <span class="variablename">nchar</span> and  <span class="variablename">ncharTotal</span> to 0, <span class="variablename">newchar</span> to true, <span class="v [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsCharactersBlock58">~NxsCharactersBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Deletes any memory allocated to the arrays <span class="variablename">symbols</span>, <span class="variablename">charPos</span>, <span class="variablename">taxonPos</span>, <span class="variablename">activeChar</span>, and <span class="variablename">activeTaxon</span>.  Flushes the containers <span class="variablename">charLabels</span>, <span class="variablename">eliminated</span>, and <span class="variablename">deleted</span>. Also deletes memory allocated to <span class="varia [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="PositionInSymbols2348">PositionInSymbols</a></code><code>(char ch)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns position of <span class="variablename">ch</span> in <span class="variablename">symbols</span> array. The value of <span class="variablename">respectingCase</span> is used to determine whether the search  should be case sensitive or not. Assumes <span class="variablename">symbols</span> is non-NULL. Returns UINT_MAX if <span class="variablename">ch</span> is not found in <span class="variablename">symbols</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Read2372">Read</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function provides the ability to read everything following the block name (which is read by the <a href="NxsReader.html">NxsReader</a>  object) to the END or ENDBLOCK statement. Characters are read from the input stream <span class="variablename">in</span>. Overrides the abstract  virtual function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Report2463">Report</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function outputs a brief report of the contents of this CHARACTERS block. Overrides the abstract virtual  function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset2638">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns NxsCharactersBlock object to the state it was in when first created.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ResetSymbols2712">ResetSymbols</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Resets standard symbol set after a change in <span class="variablename">datatype</span> is made. Also flushes equates list and installs standard  equate macros for the current <span class="variablename">datatype</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="RestoreTaxon747">RestoreTaxon</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Restores taxon whose 0-offset current index is <span class="variablename">i</span>. If taxon is already active, this function has no effect.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ShowStateLabels2777">ShowStateLabels</a></code><code>(ostream &out, unsigned i, unsigned j, unsigned first_taxon)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Looks up the state(s) at row <span class="variablename">i</span>, column <span class="variablename">j</span> of matrix and writes it (or them) to out. If there is uncertainty or  polymorphism, the list of states is surrounded by the appropriate set of symbols (i.e., parentheses for  polymorphism, curly brackets for uncertainty). If TOKENS was specified, the output takes the form of the defined  state labels; otherwise, the correct symbol is looked up in <span class="variablename" [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ShowStates758">ShowStates</a></code><code>(ostream &out, unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Shows the states for taxon <span class="variablename">i</span>, character <span class="variablename">j</span>, on the stream <span class="variablename">out</span>. Uses <span class="variablename">symbols</span> array to translate the states  from the way they are stored (as integers) to the symbol used in the original data matrix. Assumes <span class="variablename">i</span> is in the  range [0..<span class="variablename">ntax</span>) and <span class="variablename">j</span> is in  [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>IV</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="TaxonLabelToNumber780">TaxonLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts a taxon label to a number corresponding to the taxon's position within the list maintained by the  <a href="NxsTaxaBlock.html">NxsTaxaBlock</a> object. This method overrides the virtual function of the same name in the <a href="NxsBlock.html">NxsBlock</a> base class. If  <span class="variablename">s</span> is not a valid taxon label, returns the value 0.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="WriteStates2878">WriteStates</a></code><code>(NxsDiscreteDatum &d, char *s, unsigned slen)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Writes out the state (or states) stored in this <a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a> object to the buffer <span class="variablename">s</span> using the symbols array  to do the necessary translation of the numeric state values to state symbols. In the case of polymorphism or  uncertainty, the list of states will be surrounded by brackets or parentheses (respectively). Assumes <span class="variablename">s</span> is  non-NULL and long enough to hold everything print [...]
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsDataBlock.html b/html/NxsDataBlock.html
new file mode 100644
index 0000000..80bc5f2
--- /dev/null
+++ b/html/NxsDataBlock.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsDataBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsDataBlock</h1>
+
+<h2>Member Functions</h2>
+<a href="#NxsDataBlock25"><span class="quickref">NxsDataBlock</span></a><a href="#Reset38"><span class="quickref">, Reset</span></a><a href="#TransferTo49"><span class="quickref">, TransferTo</span></a>
+<h2>Class Description</h2>
+
+<p>
+This class handles reading and storage for the NEXUS block DATA. It is derived from the  <a href="NxsCharactersBlock.html">NxsCharactersBlock</a>  class,  and differs from  <a href="NxsCharactersBlock.html">NxsCharactersBlock</a>  only in name and the fact that <span class="variablename">newtaxa</span> is initially true rather than false.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDataBlock25">NxsDataBlock</a></code><code>(NxsTaxaBlock *tb, NxsAssumptionsBlock *ab)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets <span class="variablename">id</span> to "DATA" and <span class="variablename">newtaxa</span> to true, and calls the base class (<a href="NxsCharactersBlock.html">NxsCharactersBlock</a>) constructor.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset38">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Calls Reset function of the parent class (<a href="NxsCharactersBlock.html">NxsCharactersBlock</a>) and resets <span class="variablename">newtaxa</span> to true in preparation for  reading another DATA block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="TransferTo49">TransferTo</a></code><code>(NxsCharactersBlock &charactersblock)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts this NxsDataBlock object into a <a href="NxsCharactersBlock.html">NxsCharactersBlock</a> object, storing the result in the supplied  <a href="NxsCharactersBlock.html">NxsCharactersBlock</a> object. This NxsDataBlock object will subsequently say it is empty when asked, and  the <span class="variablename">formerly_datablock</span> data member of <span class="variablename">charactersblock</span> will be set to true.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsDiscreteDatum.html b/html/NxsDiscreteDatum.html
new file mode 100644
index 0000000..277d19b
--- /dev/null
+++ b/html/NxsDiscreteDatum.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsDiscreteDatum Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsDiscreteDatum</h1>
+
+<h2>Friends</h2>
+class <a href="NxsDiscreteMatrix.html"><span class="quickref">NxsDiscreteMatrix</span></a>
+<h2>Data Members</h2>
+<a href="#states"><span class="quickref">states</span></a>
+<h2>Member Functions</h2>
+<a href="#CopyFrom42"><span class="quickref">CopyFrom</span></a><a href="#NxsDiscreteDatum25"><span class="quickref">, NxsDiscreteDatum</span></a><a href="#NxsDiscreteDatum33"><span class="quickref">, ~NxsDiscreteDatum</span></a>
+<h2>Class Description</h2>
+
+<p>
+Class for holding discrete states in a matrix. Note that there is no way to access the variables of this class  since they are all private and there are no public access functions. This class is designed to be manipulated by  the class  <a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a> , which is the only class that has been designated a friend of NxsDiscreteDatum.  The variable <span class="variablename">states</span> is NULL if there is missing data, and non-NULL for any other sta [...]
+ --------------------------------
+      ?              NULL
+      -              [0]
+      G              [1][2]
+ (AG) polymorphic    [2][0][2][1]
+ {AG} ambiguous      [2][0][2][0]
+ --------------------------------
+</pre>
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="states">*states</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>holds information about state for a single taxon-character combination</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="CopyFrom42">CopyFrom</a></code><code>(const NxsDiscreteDatum &other)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Makes this NxsDiscreteDatum object an exact copy of <span class="variablename">other</span>. Useful for dealing with matchchar symbols in a matrix.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDiscreteDatum25">NxsDiscreteDatum</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets <span class="variablename">states</span> to NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDiscreteDatum33">~NxsDiscreteDatum</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Deletes memory associated with <span class="variablename">states</span> (if any was allocated).</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsDiscreteMatrix.html b/html/NxsDiscreteMatrix.html
new file mode 100644
index 0000000..8fa9c92
--- /dev/null
+++ b/html/NxsDiscreteMatrix.html
@@ -0,0 +1,659 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsDiscreteMatrix Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsDiscreteMatrix</h1>
+
+<h2>Friends</h2>
+class <a href="NxsAllelesBlock.html"><span class="quickref">NxsAllelesBlock</span></a>, class <a href="NxsCharactersBlock.html"><span class="quickref">NxsCharactersBlock</span></a>
+<h2>Data Members</h2>
+<a href="#data"><span class="quickref">data</span></a>, <a href="#ncols"><span class="quickref">ncols</span></a>, <a href="#nrows"><span class="quickref">nrows</span></a>
+<h2>Member Functions</h2>
+<a href="#AddRows55"><span class="quickref">AddRows</span></a><a href="#AddState90"><span class="quickref">, AddState</span></a><a href="#AddState113"><span class="quickref">, AddState</span></a><a href="#CopyStatesFromFirstTaxon165"><span class="quickref">, CopyStatesFromFirstTaxon</span></a><a href="#DebugSaveMatrix182"><span class="quickref">, DebugSaveMatrix</span></a><a href="#DuplicateRow214"><span class="quickref">, DuplicateRow</span></a><a href="#Flush251"><span class="quickref" [...]
+<h2>Class Description</h2>
+
+<p>
+Class providing storage for the discrete data types (dna, rna, nucleotide, standard, and protein) inside a DATA or  CHARACTERS block. This class is also used to store the data for an ALLELES block. Maintains a matrix in which each  cell is an object of the class  <a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a> .  <a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a>  stores the state for a particular combination of  taxon and character as an integer. Ordinarily, there will be a singl [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="data">**data</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for the data</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="ncols">ncols</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>number of columns (characters) in the data matrix</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="nrows">nrows</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>number of rows (taxa) in the data matrix</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AddRows55">AddRows</a></code><code>(unsigned nAddRows)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Allocates memory for <span class="variablename">nAddRows</span> additional rows and updates the variable nrows. Data already stored in <span class="variablename">data</span> is not destroyed; the newly-allocated rows are added at the bottom of the existing matrix.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AddState90">AddState</a></code><code>(unsigned i, unsigned j, unsigned value)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Adds state directly to the <a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a> object at data[i][j]. Assumes <span class="variablename">data</span> is non-NULL, <span class="variablename">i</span> is in the range  [0..nrows), and <span class="variablename">j</span> is in the range [0..ncols). The <span class="variablename">value</span> argument is assumed to be either zero or a positive  integer. Calls private member function AddState to do the real work; look at the documentati [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AddState113">AddState</a></code><code>(NxsDiscreteDatum &d, unsigned value)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Adds an additional state to the array states of <span class="variablename">d</span>. If <span class="variablename">states</span> is NULL, allocates memory for two integers and  assigns 1 to the first and <span class="variablename">value</span> to the second. If <span class="variablename">states</span> is non-NULL, allocates a new int array long enough to  hold states already present plus the new one being added here, then deletes the old <span class="variablename">states</span> a [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="CopyStatesFromFirstTaxon165">CopyStatesFromFirstTaxon</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets state of taxon <span class="variablename">i</span> and character <span class="variablename">j</span> to state of first taxon for character <span class="variablename">j</span>. Assumes <span class="variablename">i</span> is in the range  [0..nrows) and <span class="variablename">j</span> is in the range [0..ncols). Also assumes <span class="variablename">data</span> is non-NULL. Calls private function CopyFrom to do the actual work.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="DebugSaveMatrix182">DebugSaveMatrix</a></code><code>(ostream &out, unsigned colwidth)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Performs a dump of the current contents of the data matrix stored in the variable <span class="variablename">data</span>. Translates missing data elements to the '?' character and gap states to '-', otherwise, calls GetState to provide the representation.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="DuplicateRow214">DuplicateRow</a></code><code>(unsigned row, unsigned count, unsigned startCol, unsigned endCol)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Duplicates columns <span class="variablename">startCol</span> to <span class="variablename">endCol</span> in row <span class="variablename">row</span> of the matrix. If additional storage is needed to accommodate the duplication, this is done automatically through the use of the AddRows method. Note that <span class="variablename">count</span> includes the  row already present, so if <span class="variablename">count</span> is 10, then 9 more rows will actually be added to the mat [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Flush251">Flush</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Deletes all cells of <span class="variablename">data</span>, setting <span class="variablename">data</span> to NULL, and resets <span class="variablename">nrows</span> and <span class="variablename">ncols</span> to 0.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetDiscreteDatum269">&GetDiscreteDatum</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Assumes that <span class="variablename">data</span> is non-NULL, <span class="variablename">i</span> is in the range [0..<span class="variablename">nrows</span>) and <span class="variablename">j</span> is in the range [0..<span class="variablename">ncols</span>). Returns  reference to the <a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a> object at row <span class="variablename">i</span>, column <span class="variablename">j</span> of matrix.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumStates287">GetNumStates</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns number of states for taxon <span class="variablename">i</span> and character <span class="variablename">j</span>. Assumes <span class="variablename">data</span> is non-NULL, <span class="variablename">i</span> is in the range  [0..<span class="variablename">nrows</span>), and <span class="variablename">j</span> is in the range [0..<span class="variablename">ncols</span>). Calls private member function GetNumStates to do the actual work.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumStates303">GetNumStates</a></code><code>(NxsDiscreteDatum &d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns total number of states assigned to <span class="variablename">d</span>. Returns 0 for both gap and missing states.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetObsNumStates320">GetObsNumStates</a></code><code>(unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns number of states for character <span class="variablename">j</span> over all taxa. Note: this function is rather slow, as it must walk  through each taxon for the specified character, adding the states encountered to a set, then finally returning the size of the set. Thus, if this function is called often, it would be advisable to initialize an array using this  function, then refer to the array subsequently. Assumes <span class="variablename">j</span> is in the range [0.. [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetState351">GetState</a></code><code>(unsigned i, unsigned j, unsigned k)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the <span class="variablename">k</span>th state possessed by taxon <span class="variablename">i</span> and character <span class="variablename">j</span>. This taxon-character combination will have more  than one state if there is ambiguity or polymorphism. Assumes that <span class="variablename">i</span> is in the range [0..<span class="variablename">nrows</span>) and <span class="variablename">j</span> is in  the range [0..<span class="variablename">ncols</span>). Also a [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetState370">GetState</a></code><code>(NxsDiscreteDatum &d, unsigned k)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the internal unsigned representation of the state stored in <span class="variablename">d</span> at position <span class="variablename">k</span> of the array <span class="variablename">d.states</span>.  Assumes that the state is not the missing or gap state. Use IsMissing and IsGap prior to calling this function to  ensure this function will succeed. Assumes that <span class="variablename">k</span> is in the range [ 0 .. <span class="variablename">d.states</span>[0]).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsGap386">IsGap</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns 1 if the state for taxon <span class="variablename">i</span>, character <span class="variablename">j</span>, is set to the gap symbol, 0 otherwise. Assumes <span class="variablename">data</span> is  non-NULL, <span class="variablename">i</span> is in the range [0..<span class="variablename">nrows</span>) and <span class="variablename">j</span> is in the range [0..<span class="variablename">ncols</span>).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsGap403">IsGap</a></code><code>(NxsDiscreteDatum &d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the gap state is stored, otherwise returns false. Note: returns false if this datum represents  missing data (often the gap state is equated with missing data, but the distinction is made here).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsMissing416">IsMissing</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns 1 if the state for taxon <span class="variablename">i</span>, character <span class="variablename">j</span>, is set to the missing data symbol, 0 otherwise. Assumes <span class="variablename">i</span> is  in the range [0..<span class="variablename">nrows</span>) and <span class="variablename">j</span> is in the range [0..<span class="variablename">ncols</span>).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsMissing433">IsMissing</a></code><code>(NxsDiscreteDatum &d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the missing state is stored, false otherwise. Note that this function returns false if the gap state is stored (often the gap state is equated with missing data, but the distinction is maintained here).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsPolymorphic446">IsPolymorphic</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns 1 if character <span class="variablename">j</span> is polymorphic in taxon <span class="variablename">i</span>, 0 otherwise. Assumes <span class="variablename">data</span> is non-NULL, <span class="variablename">i</span> is in the  range [0..<span class="variablename">nrows</span>) and <span class="variablename">j</span> is in the range [0..<span class="variablename">ncols</span>).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsPolymorphic463">IsPolymorphic</a></code><code>(NxsDiscreteDatum &d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the number of states is greater than 1 and polymorphism has been specified. Returns false if the  state stored is the missing state, the gap state, or if the number of states is 1.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDiscreteMatrix26">NxsDiscreteMatrix</a></code><code>(unsigned rows, unsigned cols)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes <span class="variablename">nrows</span> to <span class="variablename">rows</span> and <span class="variablename">ncols</span> to <span class="variablename">cols</span>. In addition, memory is allocated for <span class="variablename">data</span> (each element of  the matrix <span class="variablename">data</span> is a <a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a> object, which can do its own initialization).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDiscreteMatrix41">~NxsDiscreteMatrix</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Deletes memory allocated in the constructor for data member <span class="variablename">data</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset478">Reset</a></code><code>(unsigned rows, unsigned cols)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Deletes all cells of <span class="variablename">data</span> and reallocates memory to create a new matrix object with <span class="variablename">nrows</span> = <span class="variablename">rows</span> and <span class="variablename">ncols</span>  = <span class="variablename">cols</span>. Assumes <span class="variablename">rows</span> and <span class="variablename">cols</span> are both greater than 0.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetGap509">SetGap</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets state stored at `data[i][j]' to the gap state. Assumes <span class="variablename">i</span> is in the range [0..<span class="variablename">nrows</span>) and <span class="variablename">j</span> is in the  range [0..<span class="variablename">ncols</span>). Calls the private SetGap member function to do the actual work.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetGap526">SetGap</a></code><code>(NxsDiscreteDatum &d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Assigns the gap state to <span class="variablename">d</span>, erasing any previously stored information. The gap state is designated internally as  a states array one element long, with the single element set to the value 0.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetMissing539">SetMissing</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets state stored at `data[i][j]' to the missing state. Assumes <span class="variablename">data</span> is non-NULL, <span class="variablename">i</span> is in the range [0..<span class="variablename">nrows</span>) and <span class="variablename">j</span> is in the range [0..<span class="variablename">ncols</span>). Calls the private member function SetMissing to do the actual work.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetMissing556">SetMissing</a></code><code>(NxsDiscreteDatum &d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Assigns the missing state to <span class="variablename">d</span>, erasing any previously stored information. The missing state is stored internally as a NULL value for the states array.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetPolymorphic570">SetPolymorphic</a></code><code>(unsigned i, unsigned j, unsigned value)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Specify 1 for <span class="variablename">value</span> if taxon at row <span class="variablename">i</span> is polymorphic at character in column <span class="variablename">j</span>, 0 for <span class="variablename">value</span> if uncertain  which state applies. Sets polymorphism state of taxon <span class="variablename">i</span> and character <span class="variablename">j</span> to <span class="variablename">value</span>. Assumes <span class="variablename">data</span> is non-NULL, [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetPolymorphic589">SetPolymorphic</a></code><code>(NxsDiscreteDatum &d, unsigned value)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the polymorphism cell (last cell in <span class="variablename">d.states</span>) to <span class="variablename">value</span>. Warning: has no effect if there are fewer than 2  states stored!</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetState607">SetState</a></code><code>(unsigned i, unsigned j, unsigned value)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets state of taxon <span class="variablename">i</span> and character <span class="variablename">j</span> to <span class="variablename">value</span>. Assumes <span class="variablename">data</span> is non-NULL, <span class="variablename">i</span> is in the range [0..<span class="variablename">nrows</span>)  and <span class="variablename">j</span> is in the range [0..<span class="variablename">ncols</span>). Assumes that this function will not be called if there is missing data or  [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetState627">SetState</a></code><code>(NxsDiscreteDatum &d, unsigned value)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Assigns <span class="variablename">value</span> to the 2nd cell in <span class="variablename">d.states</span> (1st cell in <span class="variablename">d.states</span> array is set to 1 to indicate that there is  only one state). Warning: if already one or more states (including the gap state) are assigned to <span class="variablename">d</span>, they will  be forgotten. Use the function AddState if you want to preserve states already stored in <span class="variablename">d</span>. A [...]
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsDistanceDatum.html b/html/NxsDistanceDatum.html
new file mode 100644
index 0000000..8fae331
--- /dev/null
+++ b/html/NxsDistanceDatum.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsDistanceDatum Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsDistanceDatum</h1>
+
+<h2>Friends</h2>
+class <a href="NxsDistancesBlock.html"><span class="quickref">NxsDistancesBlock</span></a>
+<h2>Data Members</h2>
+<a href="#missing"><span class="quickref">missing</span></a>, <a href="#value"><span class="quickref">value</span></a>
+<h2>Member Functions</h2>
+<a href="#NxsDistanceDatum25"><span class="quickref">NxsDistanceDatum</span></a><a href="#NxsDistanceDatum34"><span class="quickref">, ~NxsDistanceDatum</span></a>
+<h2>Class Description</h2>
+
+<p>
+This class stores pairwise distance values. It has no public access functions, reflecting the fact that it is  manipulated strictly by its only friend class, the  <a href="NxsDistancesBlock.html">NxsDistancesBlock</a>  class.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="missing">missing</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if there is missing data for this pair</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> double</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="value">value</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the pairwise distance value stored</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDistanceDatum25">NxsDistanceDatum</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes value to 0.0 and missing to true.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDistanceDatum34">~NxsDistanceDatum</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Does nothing.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsDistancesBlock.html b/html/NxsDistancesBlock.html
new file mode 100644
index 0000000..5d4c066
--- /dev/null
+++ b/html/NxsDistancesBlock.html
@@ -0,0 +1,805 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsDistancesBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsDistancesBlock</h1>
+
+<h2>Enums</h2>
+<a href="#NxsDistancesBlockEnum"><span class="quickref">NxsDistancesBlockEnum</span></a>
+<h2>Data Members</h2>
+<a href="#diagonal"><span class="quickref">diagonal</span></a>, <a href="#interleave"><span class="quickref">interleave</span></a>, <a href="#labels"><span class="quickref">labels</span></a>, <a href="#matrix"><span class="quickref">matrix</span></a>, <a href="#missing"><span class="quickref">missing</span></a>, <a href="#nchar"><span class="quickref">nchar</span></a>, <a href="#newtaxa"><span class="quickref">newtaxa</span></a>, <a href="#ntax"><span class="quickref">ntax</span></a>, <a [...]
+<h2>Member Functions</h2>
+<a href="#GetDistance758"><span class="quickref">GetDistance</span></a><a href="#GetMissingSymbol774"><span class="quickref">, GetMissingSymbol</span></a><a href="#GetNchar749"><span class="quickref">, GetNchar</span></a><a href="#GetNtax741"><span class="quickref">, GetNtax</span></a><a href="#GetTriangle782"><span class="quickref">, GetTriangle</span></a><a href="#HandleDimensionsCommand61"><span class="quickref">, HandleDimensionsCommand</span></a><a href="#HandleFormatCommand134"><sp [...]
+<h2>Class Description</h2>
+
+<p>
+This class handles reading and storage for the NEXUS block DISTANCES. It overrides the member functions Read and  Reset, which are abstract virtual functions in the base class  <a href="NxsBlock.html">NxsBlock</a> . Below is a table showing the correspondence  between the elements of a DISTANCES block and the variables and member functions that can be used to access each  piece of information stored.<pre> NEXUS command   Command attribute  Data Members        Member Functions
+ ------------------------------------------------------------------------
+ DIMENSIONS      NEWTAXA            newtaxa
+
+                 NTAX               ntax                GetNtax
+
+                 NCHAR              nchar               GetNchar
+
+ FORMAT          TRIANGLE           triangle            GetTriangle
+                                                        IsUpperTriangular
+                                                        IsLowerTriangular
+                                                        IsRectangular
+
+                 [NO]DIAGONAL       diagonal            IsDiagonal
+
+                 [NO]LABELS         labels              IsLabels
+
+                 MISSING            missing             GetMissingSymbol
+
+                 INTERLEAVE         interleave          IsInterleave
+
+                 TAXLABELS          (stored in the      (access through
+ 				                    <a href="NxsTaxaBlock.html">NxsTaxaBlock</a>         data member taxa)
+ 								   object)
+
+ MATRIX                             matrix              GetDistance
+                                                        IsMissing
+                                                        SetMissing
+                                                        SetDistance
+ ------------------------------------------------------------------------
+</pre>
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Enums</span></td>
+</tr>
+</table>
+
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+  <tr><td>
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td>
+        <table border="0" width="100%" cellpadding="1">
+          <tr>
+            <td align="left" width="25%"><code class="public"><a name="NxsDistancesBlockEnum">enum NxsDistancesBlockEnum</a></code></td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>upper = 1</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>matrix is upper-triangular</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>lower = 2</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>matrix is lower-triangular</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>both = 3</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>matrix is rectangular</td>
+          </tr>
+        </table>
+      </td></tr>
+    </table>
+  </td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="diagonal">diagonal</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if diagonal elements provided when reading in DISTANCES block</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="interleave">interleave</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if interleave format used when reading in DISTANCES block</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="labels">labels</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if taxon labels were provided when reading in DISTANCES block</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsDistanceDatum.html">NxsDistanceDatum</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="matrix">**matrix</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the structure used for storing the pairwise distance matrix</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="missing">missing</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the symbol used to represent missing data (e.g. '?')</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="nchar">nchar</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the number of characters used in generating the pairwise distances</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="newtaxa">newtaxa</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if new taxa were named in this DISTANCES block</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="ntax">ntax</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>number of taxa (determines dimensions of the matrix)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsTaxaBlock.html">NxsTaxaBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="taxa">*taxa</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to NxsTaxaBlock object that stores the taxon labels</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="taxonPos">*taxonPos</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>array holding 0-offset index into the NxsTaxaBlock list of taxon labels (used to ensure that order of taxa is same for each interleaved block)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="triangle">triangle</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>indicates whether matrix is upper triangular, lower triangular, or rectangular, taking on one of the elements of the NxsDistancesBlockEnum enumeration</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>double</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetDistance758">GetDistance</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of the (<span class="variablename">i</span>, <span class="variablename">j</span>)th element of <span class="variablename">matrix</span>. Assumes <span class="variablename">i</span> and <span class="variablename">j</span> are both in the range [0..<span class="variablename">ntax</span>)  and the distance stored at `matrix[i][j]' is not missing. Also assumes <span class="variablename">matrix</span> is not NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetMissingSymbol774">GetMissingSymbol</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of <span class="variablename">missing</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNchar749">GetNchar</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of nchar.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNtax741">GetNtax</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of ntax.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTriangle782">GetTriangle</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of <span class="variablename">triangle</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleDimensionsCommand61">HandleDimensionsCommand</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when DIMENSIONS command needs to be parsed from within the DISTANCES block. Deals with everything after the  token DIMENSIONS up to and including the semicolon that terminates the DIMENSIONS command.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleFormatCommand134">HandleFormatCommand</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when FORMAT command needs to be parsed from within the DISTANCES block. Deals with everything after the  token FORMAT up to and including the semicolon that terminates the FORMAT command.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleMatrixCommand404">HandleMatrixCommand</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when MATRIX command needs to be parsed from within the DISTANCES block. Deals with everything after the  token MATRIX up to and including the semicolon that terminates the MATRIX command.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleNextPass253">HandleNextPass</a></code><code>(NxsToken &token, unsigned &offset)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called from within HandleMatrix, this function is used to deal with interleaved matrices. It is called once for  each pass through the taxa. The local variable <span class="variablename">jmax</span> records the number of columns read in the current interleaved  page and is used to determine the offset used for j in subsequent pages.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleTaxlabelsCommand478">HandleTaxlabelsCommand</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when TAXLABELS command needs to be parsed from within the DISTANCES block. Deals with everything after the  token TAXLABELS up to and including the semicolon that terminates the TAXLABELS command.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsDiagonal814">IsDiagonal</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of diagonal.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsInterleave822">IsInterleave</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of interleave.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsLabels830">IsLabels</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the value of labels.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsLowerTriangular806">IsLowerTriangular</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the value of triangle is NxsDistancesBlockEnum(lower), false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsMissing839">IsMissing</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the (<span class="variablename">i</span>,<span class="variablename">j</span>)th distance is missing. Assumes <span class="variablename">i</span> and <span class="variablename">j</span> are both in the range [0..<span class="variablename">ntax</span>) and  <span class="variablename">matrix</span> is not NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsRectangular790">IsRectangular</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the value of <span class="variablename">triangle</span> is NxsDistancesBlockEnum(both), false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsUpperTriangular798">IsUpperTriangular</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the value of triangle is NxsDistancesBlockEnum(upper), false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDistancesBlock27">NxsDistancesBlock</a></code><code>(NxsTaxaBlock *t)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets <span class="variablename">id</span> to "DISTANCES", <span class="variablename">taxa</span> to <span class="variablename">t</span>, <span class="variablename">triangle</span> to `NxsDistancesBlockEnum::lower', <span class="variablename">missing</span> to '?', <span class="variablename">matrix</span>  and <span class="variablename">taxonPos</span> to NULL, <span class="variablename">labels</span> and <span class="variablename">diagonal</span> to true, <span class="variablenam [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsDistancesBlock49">~NxsDistancesBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Deletes <span class="variablename">matrix</span> and <span class="variablename">taxonPos</span> arrays.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Read528">Read</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function provides the ability to read everything following the block name (which is read by the NEXUS object) to the end or endblock statement. Characters are read from the input stream in. Overrides the abstract virtual  function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Report627">Report</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function outputs a brief report of the contents of this taxa block. Overrides the abstract virtual function in  the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset707">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Flushes taxonLabels and sets ntax to 0 in preparation for reading a new TAXA block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetDistance856">SetDistance</a></code><code>(unsigned i, unsigned j, double d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the value of the (<span class="variablename">i</span>,<span class="variablename">j</span>)th matrix element to <span class="variablename">d</span> and <span class="variablename">missing</span> to false . Assumes <span class="variablename">i</span> and <span class="variablename">j</span> are both in  the range [0..<span class="variablename">ntax</span>) and <span class="variablename">matrix</span> is not NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetMissing875">SetMissing</a></code><code>(unsigned i, unsigned j)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the value of the (<span class="variablename">i</span>, <span class="variablename">j</span>)th <span class="variablename">matrix</span> element to missing. Assumes <span class="variablename">i</span> and <span class="variablename">j</span> are both in the range  [0..<span class="variablename">ntax</span>) and <span class="variablename">matrix</span> is not NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetNchar892">SetNchar</a></code><code>(unsigned n)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets <span class="variablename">nchar</span> to <span class="variablename">n</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsEmptyBlock.html b/html/NxsEmptyBlock.html
new file mode 100644
index 0000000..c27b9f4
--- /dev/null
+++ b/html/NxsEmptyBlock.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsEmptyBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsEmptyBlock</h1>
+
+<h2>Member Functions</h2>
+<a href="#CharLabelToNumber45"><span class="quickref">CharLabelToNumber</span></a><a href="#HandleEndblock55"><span class="quickref">, HandleEndblock</span></a><a href="#NxsEmptyBlock25"><span class="quickref">, NxsEmptyBlock</span></a><a href="#NxsEmptyBlock33"><span class="quickref">, ~NxsEmptyBlock</span></a><a href="#Read76"><span class="quickref">, Read</span></a><a href="#Report143"><span class="quickref">, Report</span></a><a href="#Reset134"><span class="quickref">, Reset</span>< [...]
+<h2>Class Description</h2>
+
+<p>
+This is a template that can be used to create a class representing a NEXUS block. Here are the steps to follow if you wish to create a new block specifically for use with your particular application. Suppose your application is called Phylome and you want to create a private block called a PHYLOME block that can appear in NEXUS data files and contains commands for your program.<ul> <li>Copy the files nxsemptyblock.h and nxsemptyblock.cpp and rename them (e.g. nxsphylomeblock.h and </li>  [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="CharLabelToNumber45">CharLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>The code here is identical to the base class version (simply returns 0), so the code here should either be modified or this derived version eliminated altogether. Under what circumstances would you need to modify the default code,  you ask? This function should be modified to something meaningful if this derived class needs to construct and run a <a href="NxsSetReader.html">NxsSetReader</a> object to read a set involving characters. The <a href="NxsSetReader.html">NxsSetReader</a [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleEndblock55">HandleEndblock</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when the END or ENDBLOCK command needs to be parsed from within the EMPTY block. Basically just checks to  make sure the next token in the data file is a semicolon.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsEmptyBlock25">NxsEmptyBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the base class data member <span class="variablename">id</span> to the name of the block (i.e. "EMPTY") in NEXUS data files.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsEmptyBlock33">~NxsEmptyBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Nothing needs to be done.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Read76">Read</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function provides the ability to read everything following the block name (which is read by the <a href="NxsReader.html">NxsReader</a>  object) to the END or ENDBLOCK statement. Characters are read from the input stream <span class="variablename">in</span>. Overrides the pure  virtual function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Report143">Report</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function outputs a brief report of the contents of this EMPTY block. Overrides the pure virtual function in  the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset134">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets <span class="variablename">isEmpty</span> to true in preparation for reading a new EMPTY block. Overrides the pure virtual function in the  base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingCommand156">SkippingCommand</a></code><code>(NxsString commandName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function is called when an unknown command named <span class="variablename">commandName</span> is about to be skipped. This version of the  function (which is identical to the base class version) does nothing (i.e., no warning is issued that a command  was unrecognized). Modify this virtual function to provide such warnings to the user (or eliminate it altogether  since the base class version already does what this does).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="TaxonLabelToNumber169">TaxonLabelToNumber</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>The code here is identical to the base class version (simply returns 0), so the code here should either be modified or this derived version eliminated altogether. Under what circumstances would you need to modify the default code, you ask? This function should be modified to something meaningful if this derived class needs to construct and run  a <a href="NxsSetReader.html">NxsSetReader</a> object to read a set involving taxa. The <a href="NxsSetReader.html">NxsSetReader</a> obje [...]
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsException.html b/html/NxsException.html
new file mode 100644
index 0000000..72508d2
--- /dev/null
+++ b/html/NxsException.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsException Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsException</h1>
+
+<h2>Data Members</h2>
+<a href="#col"><span class="quickref">col</span></a>, <a href="#line"><span class="quickref">line</span></a>, <a href="#msg"><span class="quickref">msg</span></a>, <a href="#pos"><span class="quickref">pos</span></a>
+<h2>Member Functions</h2>
+<a href="#NxsException26"><span class="quickref">NxsException</span></a><a href="#NxsException41"><span class="quickref">, NxsException</span></a>
+<h2>Class Description</h2>
+
+<p>
+Exception class that conveys a message specific to the problem encountered.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> long</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="col">col</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>column of current line</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> long</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="line">line</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>current line in file</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="msg">msg</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>NxsString to hold message</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> file_pos</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="pos">pos</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>current file position</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsException26">NxsException</a></code><code>(NxsString s, file_pos fp, long fl, long fc)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Copies 's' to msg and sets line, col and pos to the current line, column and position in the file where parsing stopped.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsException41">NxsException</a></code><code>(const NxsString &s, const NxsToken &t)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Creates a NxsException object with the specified message, getting file position information from the <a href="NxsToken.html">NxsToken</a>.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsReader.html b/html/NxsReader.html
new file mode 100644
index 0000000..95f0789
--- /dev/null
+++ b/html/NxsReader.html
@@ -0,0 +1,510 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsReader Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsReader</h1>
+
+<h2>Enums</h2>
+<a href="#NxsTolerateFlags"><span class="quickref">NxsTolerateFlags</span></a>
+<h2>Data Members</h2>
+<a href="#blockList"><span class="quickref">blockList</span></a>, <a href="#currBlock"><span class="quickref">currBlock</span></a>
+<h2>Member Functions</h2>
+<a href="#Add44"><span class="quickref">Add</span></a><a href="#BlockListEmpty125"><span class="quickref">, BlockListEmpty</span></a><a href="#DebugReportBlock142"><span class="quickref">, DebugReportBlock</span></a><a href="#Detach158"><span class="quickref">, Detach</span></a><a href="#EnteringBlock204"><span class="quickref">, EnteringBlock</span></a><a href="#Execute237"><span class="quickref">, Execute</span></a><a href="#ExecuteStarting425"><span class="quickref">, ExecuteStarting< [...]
+<h2>Class Description</h2>
+
+<p>
+This is the class that orchestrates the reading of a NEXUS data file. An object of this class should be created,  and objects of any block classes that are expected to be needed should be added to <span class="variablename">blockList</span> using the Add  member function. The Execute member function is then called, which reads the data file until encountering a block  name, at which point the correct block is looked up in <span class="variablename">blockList</span> and that object's Read [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Enums</span></td>
+</tr>
+</table>
+
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+  <tr><td>
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td>
+        <table border="0" width="100%" cellpadding="1">
+          <tr>
+            <td align="left" width="25%"><code class="public"><a name="NxsTolerateFlags">enum NxsTolerateFlags</a></code></td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>allowMissingInEquate = 0x0001</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, equate symbols are allowed for missing data symbol</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>allowPunctuationInNames = 0x0002</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, some punctuation is allowed within tokens representing labels for taxa, characters, and sets</td>
+          </tr>
+        </table>
+      </td></tr>
+    </table>
+  </td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsBlock.html">NxsBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="blockList">*blockList</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to first block in list of blocks</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsBlock.html">NxsBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="currBlock">*currBlock</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to current block in list of blocks</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Add44">Add</a></code><code>(NxsBlock *newBlock)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Adds <span class="variablename">newBlock</span> to the end of the list of <a href="NxsBlock.html">NxsBlock</a> objects growing from <span class="variablename">blockList</span>. If <span class="variablename">blockList</span> points to NULL, this function sets <span class="variablename">blockList</span> to point to <span class="variablename">newBlock</span>. Calls SetNexus method of <span class="variablename">newBlock</span> to inform <span class="variablename">newBlock</span> of t [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="BlockListEmpty125">BlockListEmpty</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>If <span class="variablename">blockList</span> data member still equals NULL, returns true; otherwise, returns false. <span class="variablename">blockList</span> will not be equal to NULL if the Add function has been called to add a block object to the list.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="DebugReportBlock142">DebugReportBlock</a></code><code>(NxsBlock &nexusBlock)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function was created for purposes of debugging a new <a href="NxsBlock.html">NxsBlock</a>. This version does nothing; to create an active DebugReportBlock function, override this version in the derived class and call the Report function of <span class="variablename">nexusBlock</span>. This function is called whenever the main NxsReader Execute function encounters the [&spillall] command comment  between blocks in the data file. The Execute function goes through all blocks an [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Detach158">Detach</a></code><code>(NxsBlock *oldBlock)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Detaches <span class="variablename">oldBlock</span> from the list of <a href="NxsBlock.html">NxsBlock</a> objects growing from <span class="variablename">blockList</span>. If <span class="variablename">blockList</span> itself points to  <span class="variablename">oldBlock</span>, this function sets <span class="variablename">blockList</span> to point to `oldBlock->next'. Note: the object pointed to by <span class="variablename">oldBlock</span>  is not deleted, it is simply detach [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="EnteringBlock204">EnteringBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called by the NxsReader object when a block named <span class="variablename">blockName</span> is entered. Allows derived class overriding this function to notify user of progress in parsing the NEXUS file. Also gives program the opportunity to ask user if it is ok to purge data currently contained in this block. If user is asked whether existing data should be deleted, and the answer comes back no, then then the overrided function should return false, otherwise it should return t [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Execute237">Execute</a></code><code>(NxsToken &token, bool notifyStartStop)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads the NxsReader data file from the input stream provided by <span class="variablename">token</span>. This function is responsible for reading  through the name of a each block. Once it has read a block name, it searches <span class="variablename">blockList</span> for a block object to  handle reading the remainder of the block's contents. The block object is responsible for reading the END or  ENDBLOCK command as well as the trailing semicolon. This function also handles read [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ExecuteStarting425">ExecuteStarting</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called just after Execute member function reads the opening "#NEXUS" token in a NEXUS data file. Override this  virtual base class function if your application needs to do anything at this point in the execution of a NEXUS data file (e.g. good opportunity to pop up a dialog box showing progress). Be sure to call the Execute function with the <span class="variablename">notifyStartStop</span> argument set to true, otherwise ExecuteStarting will not be called.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ExecuteStopping436">ExecuteStopping</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when Execute member function encounters the end of the NEXUS data file, or the special comment [&LEAVE] is found between NEXUS blocks. Override this virtual base class function if your application needs to do anything at  this point in the execution of a NEXUS data file (e.g. good opportunity to hide or destroy a dialog box showing  progress). Be sure to call the Execute function with the <span class="variablename">notifyStartStop</span> argument set to true, otherwise  Ex [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ExitingBlock217">ExitingBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called by the NxsReader object when a block named <span class="variablename">blockName</span> is being exited. Allows derived class overriding this function to notify user of progress in parsing the NEXUS file.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NCLCopyrightNotice396">*NCLCopyrightNotice</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns a string containing the copyright notice for the NxsReader Class Library, useful for reporting the use of  this library by programs that interact with the user.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NCLHomePageURL404">*NCLHomePageURL</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns a string containing the URL for the NxsReader Class Library internet home page.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NCLNameAndVersion413">*NCLNameAndVersion</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns a string containing the name and current version of the NxsReader Class Library, useful for reporting the  use of this library by programs that interact with the user.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NexusError444">NexusError</a></code><code>(NxsString msg, file_pos pos, long line, long col)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Called when an error is encountered in a NEXUS file. Allows program to give user details of the error as well as  the precise location of the error.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsReader24">NxsReader</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes both <span class="variablename">blockList</span> and <span class="variablename">currBlock</span> to NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsReader33">~NxsReader</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Nothing to be done.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="OutputComment460">OutputComment</a></code><code>(const NxsString &comment)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function may be used to report progess while reading through a file. For example, the NxsAllelesBlock class  uses this function to report the name of the population it is currently reading so the user doesn't think the  program has hung on large data sets.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="PositionInBlockList69">PositionInBlockList</a></code><code>(NxsBlock *b)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns position (first block has position 0) of block <span class="variablename">b</span> in <span class="variablename">blockList</span>. Returns UINT_MAX if <span class="variablename">b</span> cannot be found in <span class="variablename">blockList</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reassign94">Reassign</a></code><code>(NxsBlock *oldb, NxsBlock *newb)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reassign should be called if a block (<span class="variablename">oldb</span>) is about to be deleted (perhaps to make way for new data). Create  the new block (<span class="variablename">newb</span>) before deleting <span class="variablename">oldb</span>, then call Reassign to replace <span class="variablename">oldb</span> in <span class="variablename">blockList</span> with <span class="variablename">newb</span>.  Assumes <span class="variablename">oldb</span> exists and is in <s [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingBlock472">SkippingBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function is called when an unknown block named <span class="variablename">blockName</span> is about to be skipped. Override this pure virtual function to provide an indication of progress as the NEXUS file is being read.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SkippingDisabledBlock485">SkippingDisabledBlock</a></code><code>(NxsString blockName)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function is called when a disabled block named <span class="variablename">blockName</span> is encountered in a NEXUS data file being executed. Override this pure virtual function to handle this event in an appropriate manner. For example, the program may  wish to inform the user that a data block was encountered in what is supposed to be a tree file.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsSetReader.html b/html/NxsSetReader.html
new file mode 100644
index 0000000..c751ac4
--- /dev/null
+++ b/html/NxsSetReader.html
@@ -0,0 +1,292 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsSetReader Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsSetReader</h1>
+
+<h2>Enums</h2>
+<a href="#NxsSetReaderEnum"><span class="quickref">NxsSetReaderEnum</span></a>
+<h2>Data Members</h2>
+<a href="#block"><span class="quickref">block</span></a>, <a href="#max"><span class="quickref">max</span></a>, <a href="#nxsset"><span class="quickref">nxsset</span></a>, <a href="#settype"><span class="quickref">settype</span></a>, <a href="#token"><span class="quickref">token</span></a>
+<h2>Member Functions</h2>
+<a href="#AddRange47"><span class="quickref">AddRange</span></a><a href="#GetTokenValue70"><span class="quickref">, GetTokenValue</span></a><a href="#NxsSetReader26"><span class="quickref">, NxsSetReader</span></a><a href="#Run101"><span class="quickref">, Run</span></a>
+<h2>Class Description</h2>
+
+<p>
+A class for reading NEXUS set objects and storing them in a set of int values. The NxsUnsignedSet <span class="variablename">nxsset</span> will be  cleared, and <span class="variablename">nxsset</span> will be built up as the set is read, with each element in the list storing a  member of the set (ranges are stored as individual elements). This class handles set descriptions of the following  form:<pre> 4-7 15 20-.3;
+</pre> The above set includes every number from 4 to 7 (inclusive), 15 and every third number from 20 to max, where <span class="variablename">max</span>  would ordinarily be set to either the last character (if <span class="variablename">settype</span> is `NxsSetReaderEnum::charset') or the last  taxon (if <span class="variablename">settype</span> is `NxsSetReaderEnum::taxset'). If <span class="variablename">max</span> equaled 30, the example above would be stored as follows (remember t [...]
+</pre> The following example of how NxsSetReader is used comes from the  <a href="NxsCharactersBlock.html">NxsCharactersBlock</a> ::HandleEliminate function:<pre> NxsSetReader(token, ncharTotal, eliminated, *this, NxsSetReader::charset).Run();
+</pre> This reads in a set of eliminated characters from a NEXUS data file, storing the resulting set in the data member <span class="variablename">eliminated</span>. In this case <span class="variablename">max</span> is set to <span class="variablename">ncharTotal</span> (the total number of characters), and the block reference is set to the  <a href="NxsCharactersBlock.html">NxsCharactersBlock</a>  object, which provides a
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Enums</span></td>
+</tr>
+</table>
+
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+  <tr><td>
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td>
+        <table border="0" width="100%" cellpadding="1">
+          <tr>
+            <td align="left" width="25%"><code class="public"><a name="NxsSetReaderEnum">enum NxsSetReaderEnum</a></code></td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>generic = 1</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>means expect a generic set (say, characters weights)</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>charset = 2</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>means expect a character set</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>taxset = 3</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>means expect a taxon set</td>
+          </tr>
+        </table>
+      </td></tr>
+    </table>
+  </td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsBlock.html">NxsBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="block">&block</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>reference to the block object used for looking up labels</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="max">max</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>maximum number of elements in the set</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsUnsignedSet</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="nxsset">&nxsset</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>reference to the NxsUnsignedSet set being read</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="settype">settype</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the type of set being read (see the NxsSetReaderEnum enumeration)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsToken.html">NxsToken</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="token">&token</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>reference to the token being used to parse the NEXUS data file</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AddRange47">AddRange</a></code><code>(unsigned first, unsigned last, unsigned modulus)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Adds the range specified by <span class="variablename">first</span>, <span class="variablename">last</span>, and <span class="variablename">modulus</span> to the set. If <span class="variablename">modulus</span> is zero it is ignored. The  parameters <span class="variablename">first</span> and <span class="variablename">last</span> refer to numbers found in the data file itself, and thus have range [1..<span class="variablename">max</span>]. They  are stored in <span class="varia [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTokenValue70">GetTokenValue</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Tries to interpret <span class="variablename">token</span> as a number. Failing that, tries to interpret <span class="variablename">token</span> as a character or taxon label,  which it then converts to a number. Failing that, it throws a <a href="NxsException.html">NxsException</a> exception.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsSetReader26">NxsSetReader</a></code><code>(NxsToken &t, unsigned maxValue, NxsUnsignedSet &iset, NxsBlock &nxsblk, unsigned type)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes <span class="variablename">max</span> to maxValue, <span class="variablename">settype</span> to <span class="variablename">type</span>, <span class="variablename">token</span> to <span class="variablename">t</span>, <span class="variablename">block</span> to <span class="variablename">nxsblk</span> and <span class="variablename">nxsset</span> to <span class="variablename">iset</span>,  then clears <span class="variablename">nxsset</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Run101">Run</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads in a set from a NEXUS data file. Returns true if the set was terminated by a semicolon, false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsString.html b/html/NxsString.html
new file mode 100644
index 0000000..3e9c4b0
--- /dev/null
+++ b/html/NxsString.html
@@ -0,0 +1,1186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsString Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsString</h1>
+
+<h2>Friends</h2>
+<a href="#operator598"><span class="quickref">operator <<</span></a>
+<h2>Exceptions</h2>
+<span class="quickref">NxsX_NotANumber</span>
+<h2>Enums</h2>
+<a href="#CmpEnum"><span class="quickref">CmpEnum</span></a>
+<h2>Member Functions</h2>
+<a href="#Abbreviates391"><span class="quickref">Abbreviates</span></a><a href="#AddQuotes81"><span class="quickref">, AddQuotes</span></a><a href="#AddTail63"><span class="quickref">, AddTail</span></a><a href="#BlanksToUnderscores437"><span class="quickref">, BlanksToUnderscores</span></a><a href="#BreakPipeSeparatedList856"><span class="quickref">, BreakPipeSeparatedList</span></a><a href="#Capitalize382"><span class="quickref">, Capitalize</span></a><a href="#clear267"><span class="q [...]
+<h2>Class Description</h2>
+
+<p>
+A string class for use with the Nexus Class Library. NxsString inherits most of its functionality from the standard template library class string, adding certain abilities needed for use in NCL, such as the ability to discern  whether a short string represents an abbreviation for the string currently stored. Another important addition is the member function PrintF, which accepts a format string and an arbitrary number of arguments, allowing a string to be built in a manner similar to the [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Enums</span></td>
+</tr>
+</table>
+
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+  <tr><td>
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td>
+        <table border="0" width="100%" cellpadding="1">
+          <tr>
+            <td align="left" width="25%"><code class="public"><a name="CmpEnum">enum CmpEnum</a></code></td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>respect_case = 0</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>no_respect_case = 1</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>abbrev = 2</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+    </table>
+  </td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Abbreviates391">Abbreviates</a></code><code>(const NxsString &s, NxsString::CmpEnum mode)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the stored string is an abbreviation (or complete copy) of the supplied string <span class="variablename">s</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AddQuotes81">&AddQuotes</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Replaces the stored string with a copy of itself surrounded by single quotes (single quotes inside the string are  converted to the '' pair of characters that signify a single quote). Returns a reference to itself.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AddTail63">&AddTail</a></code><code>(char c, unsigned n)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Adds <span class="variablename">n</span> copies of the character <span class="variablename">c</span> to the end of the stored string and returns a reference to itself.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="BlanksToUnderscores437">&BlanksToUnderscores</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts any blank spaces found in the stored string to the underscore character.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>F</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsStringVector</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="BreakPipeSeparatedList856">BreakPipeSeparatedList</a></code><code>(const NxsString &strList)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Written to make it easy to initialize a vector of strings. Similar to the perl split function. Converts a string like this -- "A|bro|ken strin|g" -- to a vector of strings with four elements:  "A", "bro", "ken string", and "g".</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Capitalize382">&Capitalize</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Capitalizes all lower case letters in the stored string by calling ToUpper.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="clear267">clear</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Most containers in the standard template library can be completely erased using the clear function, but none is  provided for the class string and hence is provided here.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>double</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ConvertToDouble699">ConvertToDouble</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts the stored string to a double using the standard C function strtod, throwing NxsX_NotANumber if the conversion fails. Returns DBL_MAX or -DBL_MAX if the number is out of bounds.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ConvertToInt669">ConvertToInt</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts the stored string to an int using the standard C function strtol, throwing NxsX_NotANumber if the conversion  fails. Returns INT_MAX if the number is too large to fit in an int or -INT_MAX if it is too small.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>long</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ConvertToLong683">ConvertToLong</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts the stored string to a long using the standard C function strtol, throwing NxsX_NotANumber if the conversion  fails.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ConvertToUnsigned657">ConvertToUnsigned</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts the stored string to an unsigned int using the standard C function strtol, throwing NxsX_NotANumber if the  conversion fails. Returns UINT_MAX if the number is too large to fit in an unsigned (or was a negative number).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>IF</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="endl589">&endl</a></code><code>(NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Appends a newline character to the string <span class="variablename">s</span> and the returns a reference to <span class="variablename">s</span>. Used with << operator to allow  strings to be written to like ostreams.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Equals441">Equals</a></code><code>(const NxsString &s, NxsString::CmpEnum mode)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Uses the mode argument to call (and return the result of) the correct string comparison function.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="EqualsCaseInsensitive601">EqualsCaseInsensitive</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the stored string is a non-case-sensitive copy of the argument <span class="variablename">s</span>. Note: will return true if both the stored string and <span class="variablename">s</span> are empty strings.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetQuoted255">GetQuoted</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns a single-quoted version of the NxsString. The calling object is not altered. Written for ease of use. Simply  copies the stored string, then returns the copy after calling its AddQuotes function.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>F</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsStringVector</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetVecOfPossibleAbbrevMatches839">GetVecOfPossibleAbbrevMatches</a></code><code>(const NxsString &testStr, const NxsStringVector &possMatches)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns a vector of NxsString objects that match the entire <span class="variablename">testStr</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsADouble506">IsADouble</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the stored string can be interpreted as a double value, and returns false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsALong574">IsALong</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if stored string can be interpreted as a long integer.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsCapAbbreviation220">IsCapAbbreviation</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the stored string is a case-insensitive abbreviation (or complete copy) of <span class="variablename">s</span> and the stored string  	has all of the characters that are in the initial capitalized portion of <span class="variablename">s</span>. For example if <span class="variablename">s</span> is "KAPpa" then  "kappa", "kapp", or "kap" (with any capitalization pattern) will return true and all other strings will return false.  Always returns false if the stored s [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsInVector275">IsInVector</a></code><code>(const NxsStringVector &s, NxsString::CmpEnum mode)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the Equals comparison function is true for this or any element in the vector <span class="variablename">s</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsNexusPunctuation475">IsNexusPunctuation</a></code><code>(const char c)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if <span class="variablename">c</span> is any Nexus punctuation character:<pre> ()[]{}/,;:=*'"`-+<>
+</pre></dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsStdAbbreviation176">IsStdAbbreviation</a></code><code>(const NxsString &s, bool respectCase)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the string is a abbreviation (or complete copy) of the argument <span class="variablename">s</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NumberThenWord488">&NumberThenWord</a></code><code>(unsigned i, const NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Creates a new string (and returns a reference to the new string) composed of the integer <span class="variablename">i</span> followed by a space and then the string <span class="variablename">s</span>. If <span class="variablename">i</span> is not 1, then an 's' character is appended to make <span class="variablename">s</span> plural. For example, if <span class="variablename">i</span> were 0, 1, or 2, and <span class="variablename">s</span> is "character", then the returned stri [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>CI</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsString246">NxsString</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>The default constructor.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>CI</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsString291">NxsString</a></code><code>(const char *s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>A copy constructor taking a C-string argument.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>CI</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsString300">NxsString</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>A copy constructor taking a NxsString reference argument.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator35">&operator+=</a></code><code>(const double d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Appends a string representation of the supplied double to the stored string and returns a reference to itself.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator326">&operator+=</a></code><code>(const char *s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Appends the supplied C-string <span class="variablename">s</span> to the stored string.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator336">&operator+=</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Appends the characters in the supplied NxsString reference <span class="variablename">s</span> to the stored string.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator346">&operator+=</a></code><code>(const char c)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Appends the character <span class="variablename">c</span> to the stored string.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator370">&operator+=</a></code><code>(const int i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Uses the standard C sprintf function to append the character representation of the supplied integer i' to the stored string (format code %d). For example, if the stored string is "taxon" and <span class="variablename">i</span> is 9, the result is "taxon9".</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator405">&operator+=</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Uses standard C function sprintf to append the unsigned integer <span class="variablename">i</span> to the stored string (format code %u).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator417">&operator+=</a></code><code>(const long l)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Uses standard C function sprintf to append the long integer <span class="variablename">l</span> to the stored string (format code %ld).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator429">&operator+=</a></code><code>(const unsigned lon)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Uses standard C function sprintf to append the unsigned long integer <span class="variablename">l</span> to the stored string (format code %lu).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator463">&operator<<</a></code><code>(NxsString &(*funcPtr)(NxsStrin)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Allows functions that take and return references to NxsString strings to be placed in a series of << operators. See the NxsString endl function.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator502">&operator<<</a></code><code>(int i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Another way to call the += operator (written to make it possible to use a NxsString like an ostream)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator511">&operator<<</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Another way to call the += operator (written to make it possible to use a NxsString like an ostream)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator520">&operator<<</a></code><code>(long l)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Another way to call the += operator (written to make it possible to use a NxsString like an ostream)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator529">&operator<<</a></code><code>(unsigned lon)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Another way to call the += operator (written to make it possible to use a NxsString like an ostream)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator538">&operator<<</a></code><code>(double d)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Another way to call the += operator (written to make it possible to use a NxsString like an ostream)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator547">&operator<<</a></code><code>(const char *c)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Another way to call the += operator (written to make it possible to use a NxsString like an ostream)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator556">&operator<<</a></code><code>(char c)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Another way to call the += operator (written to make it possible to use a NxsString like an ostream)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator565">&operator<<</a></code><code>(const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Another way to call the += operator (written to make it possible to use a NxsString like an ostream)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>IF</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>ostream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator598">&operator<<</a></code><code>(ostream &out, const NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Writes the string <span class="variablename">s</span> to the ostream <span class="variablename">out</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator309">&operator=</a></code><code>(const char *s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the stored string equal to the supplied C-string <span class="variablename">s</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator359">&operator=</a></code><code>(char c)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the stored string to the supplied character 'c'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="PrintF108">PrintF</a></code><code>(const char *formatStr,  ...)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Appends a printf-style formatted string onto the end of this NxsString and returns the number of characters added to the  string. For example, the following code would result in the string s being set to "ts-tv rate ratio = 4.56789":<pre> double kappa = 4.56789;
+ NxsString s;
+ s.PrintF("ts-tv rate ratio = %.5f", kappa);
+</pre></dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="p_str574">*p_str</a></code><code>(unsigned cha)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns string as a Pascal string (array of unsigned characters with the length in the first byte).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="QuotesNeeded393">QuotesNeeded</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the string needs to be surrounded by single-quotes to make it a single nexus token.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="RightJustifyDbl343">&RightJustifyDbl</a></code><code>(double x, unsigned w, unsigned p, bool clear_first)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Right-justifies <span class="variablename">x</span> in a field <span class="variablename">w</span> characters wide with precision <span class="variablename">p</span>, using blank spaces to fill in unused  portions on the left-hand side of the field. Specify true for <span class="variablename">clear_first</span> to first empty the string. Assumes that the specified width is enough to accommodate the string representation of <span class="variablename">x</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="RightJustifyLong305">&RightJustifyLong</a></code><code>(long x, unsigned in, bool clear_first)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Right-justifies <span class="variablename">x</span> in a field <span class="variablename">w</span> characters wide, using blank spaces to fill in unused portions on the left-hand  side of the field. Specify true for <span class="variablename">clear_first</span> to first empty the string. Assumes <span class="variablename">w</span> is large enough to  accommodate the string representation of <span class="variablename">x</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="RightJustifyString372">&RightJustifyString</a></code><code>(const NxsString &s, unsigned w, bool clear_first)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Right-justifies <span class="variablename">s</span> in a field <span class="variablename">w</span> characters wide, using blank spaces to fill in unused portions on the left-hand side of the field. Specify true for <span class="variablename">clear_first</span> to first empty the string. Assumes that the specified width is  enough to accommodate <span class="variablename">s</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>F</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetToShortestAbbreviation729">SetToShortestAbbreviation</a></code><code>(NxsStringVector &strVec, bool allowTooShort)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Transforms the vector of NxsString objects by making them all lower case and then capitalizing the first portion of  them so that the capitalized portion is enough to uniquely specify each. Returns true if the strings are long enough  to uniquely specify each. Horrendously bad algorithm, but shouldn't be called often.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ShortenTo470">&ShortenTo</a></code><code>(unsigned n)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Shortens stored string to <span class="variablename">n</span> - 3 characters, making the last three characters "...". If string is already less than  <span class="variablename">n</span> characters in length, this function has no effect. This is useful when it is desirable to show some of the contents of a string, even when the string will not fit in its entirety into the space available for displaying it. Assumes that <span class="variablename">n</span> is at least 4.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>S</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ToHex625">ToHex</a></code><code>(long p, unsigned nFours)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Creates a string representation of the hexadecimal version of the long integer <span class="variablename">p</span>. For example, if <span class="variablename">p</span> equals 123, and if 2 was specified for <span class="variablename">nFours</span>, the resulting string would be "7B". If 4 was specified for <span class="variablename">nFours</span>, then the resulting string would be "007B".</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ToLower493">&ToLower</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts every character in the stored string to its lower case equivalent.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ToUpper25">&ToUpper</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Capitalizes every character in the stored string.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="UnderscoresToBlanks452">&UnderscoresToBlanks</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts any underscore characters found in the stored string to blank spaces.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>NxsString</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="UpperCasePrefix644">UpperCasePrefix</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Checks to see if the stored string begins with upper case letters and, if so, returns all of the contiguous capitalized prefix. If the stored string begins with lower case letters, an empty string is returned.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsStringEqual.html b/html/NxsStringEqual.html
new file mode 100644
index 0000000..47534d0
--- /dev/null
+++ b/html/NxsStringEqual.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsStringEqual Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsStringEqual</h1>
+
+<h2>Member Functions</h2>
+<a href="#operator233"><span class="quickref">operator()</span></a>
+<h2>Class Description</h2>
+
+<p>
+Binary function class that performs case-Insensitive string compares.
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="operator233">operator()</a></code><code>(const NxsString &x, const NxsString &y)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the strings <span class="variablename">x</span> and <span class="variablename">y</span> are identical (NOT case sensitive)</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsTaxaBlock.html b/html/NxsTaxaBlock.html
new file mode 100644
index 0000000..6c7e643
--- /dev/null
+++ b/html/NxsTaxaBlock.html
@@ -0,0 +1,373 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsTaxaBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsTaxaBlock</h1>
+
+<h2>Friends</h2>
+class <a href="NxsAllelesBlock.html"><span class="quickref">NxsAllelesBlock</span></a>, class <a href="NxsCharactersBlock.html"><span class="quickref">NxsCharactersBlock</span></a>, class <a href="NxsDataBlock.html"><span class="quickref">NxsDataBlock</span></a>, class <a href="NxsDistancesBlock.html"><span class="quickref">NxsDistancesBlock</span></a>
+<h2>Exceptions</h2>
+<span class="quickref">NxsX_NoSuchTaxon</span>
+<h2>Data Members</h2>
+<a href="#needsQuotes"><span class="quickref">needsQuotes</span></a>, <a href="#ntax"><span class="quickref">ntax</span></a>, <a href="#taxonLabels"><span class="quickref">taxonLabels</span></a>
+<h2>Member Functions</h2>
+<a href="#AddTaxonLabel230"><span class="quickref">AddTaxonLabel</span></a><a href="#ChangeTaxonLabel247"><span class="quickref">, ChangeTaxonLabel</span></a><a href="#FindTaxon319"><span class="quickref">, FindTaxon</span></a><a href="#GetMaxTaxonLabelLength265"><span class="quickref">, GetMaxTaxonLabelLength</span></a><a href="#GetNumTaxonLabels340"><span class="quickref">, GetNumTaxonLabels</span></a><a href="#GetTaxonLabel282"><span class="quickref">, GetTaxonLabel</span></a><a href= [...]
+<h2>Class Description</h2>
+
+<p>
+This class handles reading and storage for the  <a href="NxsReader.html">NxsReader</a>  block TAXA. It overrides the member functions Read and  Reset, which are abstract virtual functions in the base class  <a href="NxsBlock.html">NxsBlock</a> . The taxon names are stored in an vector of strings (taxonLabels) that is accessible through the member functions GetTaxonLabel(int), AddTaxonLabel( <a href="NxsString.html">NxsString</a> ),  ChangeTaxonLabel(int,  <a href="NxsString.html">NxsStri [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsBoolVector</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="needsQuotes">needsQuotes</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>needsQuotes[i] true if label i needs to be quoted when output</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="ntax">ntax</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>number of taxa</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsStringVector</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="protected"><a name="taxonLabels">taxonLabels</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for list of taxon labels</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AddTaxonLabel230">AddTaxonLabel</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Adds taxon label 's' to end of list of taxon labels and increments ntax by 1. Returns index of taxon label just  added.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ChangeTaxonLabel247">ChangeTaxonLabel</a></code><code>(unsigned i, NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Changes the label for taxon 'i' to 's'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="FindTaxon319">FindTaxon</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns index of taxon named 's' in taxonLabels list. If taxon named 's' cannot be found, or if there are no  labels currently stored in the taxonLabels list, throws NxsX_NoSuchTaxon exception.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetMaxTaxonLabelLength265">GetMaxTaxonLabelLength</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the length of the longest taxon label stored. Useful for formatting purposes in outputting the data matrix  (i.e., you want the left edge of the matrix to line up).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumTaxonLabels340">GetNumTaxonLabels</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns number of taxon labels currently stored.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTaxonLabel282">GetTaxonLabel</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the label for taxon 'i'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsAlreadyDefined307">IsAlreadyDefined</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if taxon label equal to 's' can be found in the taxonLabels list, and returns false otherwise.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NeedsQuotes295">NeedsQuotes</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if taxonLabels[i] contains embedded spaces and thus should be surrounded by single quotes if output is NEXUS format.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsTaxaBlock25">NxsTaxaBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes id to "TAXA" and ntax to 0.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsTaxaBlock35">~NxsTaxaBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Erases taxonLabels vector.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Read45">Read</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function provides the ability to read everything following the block name (which is read by the <a href="NxsReader.html">NxsReader</a>  object) to the end or endblock statement. Characters are read from the input stream in. Overrides the abstract  virtual function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Report187">Report</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function outputs a brief report of the contents of this taxa block. Overrides the abstract virtual function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset214">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Flushes taxonLabels and sets ntax to 0 in preparation for reading a new TAXA block.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetNtax348">SetNtax</a></code><code>(unsigned n)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets ntax to n.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsToken.html b/html/NxsToken.html
new file mode 100644
index 0000000..0611cfd
--- /dev/null
+++ b/html/NxsToken.html
@@ -0,0 +1,1191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsToken Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsToken</h1>
+
+<h2>Enums</h2>
+<a href="#NxsTokenFlags"><span class="quickref">NxsTokenFlags</span></a>
+<h2>Data Members</h2>
+<a href="#atEOF"><span class="quickref">atEOF</span></a>, <a href="#atEOL"><span class="quickref">atEOL</span></a>, <a href="#comment"><span class="quickref">comment</span></a>, <a href="#errormsg"><span class="quickref">errormsg</span></a>, <a href="#filecol"><span class="quickref">filecol</span></a>, <a href="#fileline"><span class="quickref">fileline</span></a>, <a href="#filepos"><span class="quickref">filepos</span></a>, <a href="#in"><span class="quickref">in</span></a>, <a href="# [...]
+<h2>Member Functions</h2>
+<a href="#Abbreviation280"><span class="quickref">Abbreviation</span></a><a href="#AppendToComment144"><span class="quickref">, AppendToComment</span></a><a href="#AppendToToken153"><span class="quickref">, AppendToToken</span></a><a href="#AtEOF284"><span class="quickref">, AtEOF</span></a><a href="#AtEOL293"><span class="quickref">, AtEOL</span></a><a href="#Begins337"><span class="quickref">, Begins</span></a><a href="#BlanksToUnderscores302"><span class="quickref">, BlanksToUnderscor [...]
+<h2>Class Description</h2>
+
+<p>
+NxsToken objects are used by  <a href="NxsReader.html">NxsReader</a>  to extract words (tokens) from a NEXUS data file. NxsToken objects know to correctly skip NEXUS comments and understand NEXUS punctuation, making reading a NEXUS file as simple as repeatedly calling the GetNextToken() function and then interpreting the token returned. If the token object is not attached  to an input stream, calls to GetNextToken() will have no effect. If the token object is not attached to an output st [...]
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Enums</span></td>
+</tr>
+</table>
+
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+  <tr><td>
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td>
+        <table border="0" width="100%" cellpadding="1">
+          <tr>
+            <td align="left" width="25%"><code class="public"><a name="NxsTokenFlags">enum NxsTokenFlags</a></code></td>
+            <td></td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>saveCommandComments = 0x0001</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, command comments of the form [&X] are not ignored but are instead saved as regular tokens (without the square brackets, however)</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>parentheticalToken = 0x0002</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, and if next character encountered is a left parenthesis, token will include everything up to the matching right parenthesis</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>curlyBracketedToken = 0x0004</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, and if next character encountered is a left curly bracket, token will include everything up to the matching right curly bracket</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>doubleQuotedToken = 0x0008</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, grabs entire phrase surrounded by double quotes</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>singleCharacterToken = 0x0010</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, next non-whitespace character returned as token</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>newlineIsToken = 0x0020</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, newline character treated as a token and atEOL set if newline encountered</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>tildeIsPunctuation = 0x0040</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, tilde character treated as punctuation and returned as a separate token</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>useSpecialPunctuation = 0x0080</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, character specified by the data member special is treated as punctuation and returned as a separate token</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>hyphenNotPunctuation = 0x0100</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, the hyphen character is not treated as punctutation (it is normally returned as a separate token)</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>preserveUnderscores = 0x0200</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, underscore characters inside tokens are not converted to blank spaces (normally, all underscores are automatically converted to blanks)</td>
+          </tr>
+        </table>
+      </td></tr>
+      <tr><td>
+        <table border="0" width="100%" cellpadding="0" cellspacing="0">
+          <tr>
+            <td width="15%"> </td>
+            <td align="left" colspan="2"><code>ignorePunctuation = 0x0400</code></td>
+          </tr>
+          <tr>
+            <td width="15%"> </td>
+            <td width="10%"> </td>
+            <td>if set, the normal punctuation symbols are treated the same as any other darkspace characters</td>
+          </tr>
+        </table>
+      </td></tr>
+    </table>
+  </td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="atEOF">atEOF</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if end of file has been encountered</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="atEOL">atEOL</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>true if newline encountered while newlineIsToken labile flag set</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="comment">comment</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>temporary buffer used to store output comments while they are being built</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="errormsg">errormsg</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd></dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> long</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="filecol">filecol</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>current column in current line (refers to column immediately following token just read)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> long</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="fileline">fileline</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>current file line</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> file_pos</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="filepos">filepos</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>current file position (for Metrowerks compiler, type is streampos rather than long)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> istream</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="in">&in</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>reference to input stream from which tokens will be read</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="labileFlags">labileFlags</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for flags in the NxsTokenFlags enum</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="punctuation[21]">punctuation[21]</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>stores the 20 NEXUS punctuation characters</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="saved">saved</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>either ' ' or is last character read from input stream</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="special">special</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>ad hoc punctuation character; default value is ' '</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="token">token</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>the character buffer used to store the current token</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="private"><a name="whitespace[4]">whitespace[4]</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>stores the 3 whitespace characters: blank space, tab and newline</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Abbreviation280">Abbreviation</a></code><code>(NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if token begins with the capitalized portion of <span class="variablename">s</span> and, if token is longer than <span class="variablename">s</span>, the remaining  characters match those in the lower-case portion of <span class="variablename">s</span>. The comparison is case insensitive. This function should be used instead of the Begins function if you wish to allow for abbreviations of commands and also want to ensure that  user does not type in a word that does n [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AppendToComment144">AppendToComment</a></code><code>(char ch)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Adds <span class="variablename">ch</span> to end of comment <a href="NxsString.html">NxsString</a>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AppendToToken153">AppendToToken</a></code><code>(char ch)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Adds <span class="variablename">ch</span> to end of current token.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AtEOF284">AtEOF</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if and only if last call to GetNextToken encountered the end-of-file character (or for some reason the  input stream is now out of commission).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="AtEOL293">AtEOL</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if and only if last call to GetNextToken encountered the newline character while the newlineIsToken  labile flag was in effect.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Begins337">Begins</a></code><code>(NxsString s, bool respect_case)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if token <a href="NxsString.html">NxsString</a> begins with the <a href="NxsString.html">NxsString</a> <span class="variablename">s</span>. This function should be used instead of the Equals  function if you wish to allow for abbreviations of commands.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="BlanksToUnderscores302">BlanksToUnderscores</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts all blanks in token to underscore characters. Normally, underscores found in the tokens read from a NEXUS file are converted to blanks automatically as they are read; this function reverts the blanks back to underscores.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Equals372">Equals</a></code><code>(NxsString s, bool respect_case)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if token <a href="NxsString.html">NxsString</a> exactly equals <span class="variablename">s</span>. If abbreviations are to be allowed, either Begins or  Abbreviation should be used instead of Equals.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetComment81">GetComment</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads rest of comment (starting '[' already input) and acts accordingly. If comment is an output comment, and if  an output stream has been attached, writes the output comment to the output stream. Otherwise, output comments are  simply ignored like regular comments. If the labileFlag bit saveCommandComments is in effect, the comment (without  the square brackets) will be stored in token.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetCurlyBracketedToken151">GetCurlyBracketedToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads rest of a token surrounded with curly brackets (the starting '{' has already been input) up to and including the matching '}' character. All nested curly-bracketed phrases will be included.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetDoubleQuotedToken185">GetDoubleQuotedToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Gets remainder of a double-quoted NEXUS word (the first double quote character was read in already by GetNextToken). This function reads characters until the next double quote is encountered. Tandem double quotes within a  double-quoted NEXUS word are not allowed and will be treated as the end of the first word and the beginning of the  next double-quoted NEXUS word. Tandem single quotes inside a double-quoted NEXUS word are saved as two separate  single quote characters; to embe [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>long</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetFileColumn311">GetFileColumn</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns value stored in <span class="variablename">filecol</span>, which keeps track of the current column in the data file (i.e., number of  characters since the last new line was encountered).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>long</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetFileLine330">GetFileLine</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns value stored in <span class="variablename">fileline</span>, which keeps track of the current line in the data file (i.e., number of new  lines encountered thus far).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>file_pos</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetFilePosition321">GetFilePosition</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns value stored in filepos, which keeps track of the current position in the data file (i.e., number of  characters since the beginning of the file).  Note: for Metrowerks compiler, you must use the offset() method of  the streampos class to use the value returned.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>char</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNextChar179">GetNextChar</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads next character from in and does all of the following before returning it to the calling function:<ul> <li>if character read is either a carriage return or line feed, the variable line is incremented by one and the</li>   variable col is reset to zero</li> <li>if character read is a carriage return, and a peek at the next character to be read reveals that it is a line</li>   feed, then the next (line feed) character is read</li> <li>if either a carriage return or line feed i [...]
+' if </li>   character read is neither a carriage return nor a line feed, col is incremented by one and the character is</li>   returned as is to the calling function</li> <li>in all cases, the variable filepos is updated using a call to the tellg function of istream.</li></ul></dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNextToken426">GetNextToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads characters from in until a complete token has been read and stored in token. GetNextToken performs a number  of useful operations in the process of retrieving tokens:  o any underscore characters encountered are stored as blank spaces (unless the labile flag bit preserveUnderscores   is set) o if the first character of the next token is an isolated single quote, then the entire quoted <a href="NxsString.html">NxsString</a> is saved    as the next token o paired single quote [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetParentheticalToken248">GetParentheticalToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Reads rest of parenthetical token (starting '(' already input) up to and including the matching ')' character.  All nested parenthetical phrases will be included.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetQuoted208">GetQuoted</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Gets remainder of a quoted NEXUS word (the first single quote character was read in already by GetNextToken). This function reads characters until the next single quote is encountered. An exception occurs if two single quotes occur one after the other, in which case the function continues to gather characters until an isolated single quote is found. The tandem quotes are stored as a single quote character in the token <a href="NxsString.html">NxsString</a>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetToken340">GetToken</a></code><code>(bool respect_case)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the data member <span class="variablename">token</span>. Specifying false for<span class="variablename">respect_case</span> parameter causes all characters in <span class="variablename">token</span> to be converted to upper case before <span class="variablename">token</span> is returned. Specifying true results in GetToken returning exactly  what it read from the file.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>const</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTokenAsCStr354">*GetTokenAsCStr</a></code><code>(bool respect_case)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the data member <span class="variablename">token</span> as a C-style string. Specifying false for<span class="variablename">respect_case</span> parameter causes all  characters in <span class="variablename">token</span> to be converted to upper case before the <span class="variablename">token</span> C-string is returned. Specifying true  results in GetTokenAsCStr returning exactly what it read from the file.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>int</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTokenLength366">GetTokenLength</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns token.size().</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>const</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTokenReference123">&GetTokenReference</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the token for functions that only need read only access - faster than GetToken.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsPlusMinusToken374">IsPlusMinusToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if current token is a single character and this character is either '+' or '-'.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsPunctuation237">IsPunctuation</a></code><code>(char ch)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if character supplied is considered a punctuation character. The following twenty characters are  considered punctuation characters:<pre> ()[]{}/,;:=*'"`+-<>
+</pre> Exceptions:<ul> <li>The tilde character ('~') is also considered punctuation if the tildeIsPunctuation labile flag is set</li> <li>The special punctuation character (specified using the SetSpecialPunctuationCharacter) is also considered </li>   punctuation if the useSpecialPunctuation labile flag is set</li> <li>The hyphen (i.e., minus sign) character ('-') is not considered punctuation if the hyphenNotPunctuation </li>   labile flag is set</li></ul> Use the SetLabileFlagBit metho [...]
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsPunctuationToken386">IsPunctuationToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if current token is a single character and this character is a punctuation character (as defined in  IsPunctuation function).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsWhitespace261">IsWhitespace</a></code><code>(char ch)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if character supplied is considered a whitespace character. Note: treats '
+' as darkspace if labile flag newlineIsToken is in effect.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsWhitespaceToken398">IsWhitespaceToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if current token is a single character and this character is a whitespace character (as defined in  IsWhitespace function).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsToken26">NxsToken</a></code><code>(istream &i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets atEOF and atEOL to false, comment and token to the empty string, filecol and fileline to 1, filepos to 0,  labileFlags to 0 and saved and special to the null character. Initializes the istream reference data  member in to the supplied istream <span class="variablename">i</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsToken71">~NxsToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Nothing needs to be done; all objects take care of deleting themselves.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>IV</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="OutputComment133">OutputComment</a></code><code>(const NxsString &msg)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function is called whenever an output comment (i.e., a comment beginning with an exclamation point) is found  in the data file. This version of OutputComment does nothing; override this virtual function to display the output  comment in the most appropriate way for the platform you are supporting.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ReplaceToken409">ReplaceToken</a></code><code>(const NxsString s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Replaces current token <a href="NxsString.html">NxsString</a> with s.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ResetToken418">ResetToken</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets token to the empty <a href="NxsString.html">NxsString</a> ("").</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetLabileFlagBit438">SetLabileFlagBit</a></code><code>(int bit)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the bit specified in the variable <span class="variablename">labileFlags</span>. The available bits are specified in the NxsTokenFlags enum. All bits in <span class="variablename">labileFlags</span> are cleared after each token is read.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="SetSpecialPunctuationCharacter428">SetSpecialPunctuationCharacter</a></code><code>(char c)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Sets the special punctuation character to <span class="variablename">c</span>. If the labile bit useSpecialPunctuation is set, this character will  be added to the standard list of punctuation symbols, and will be returned as a separate token like the other  punctuation characters.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="StoppedOn456">StoppedOn</a></code><code>(char ch)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Checks character stored in the variable saved to see if it matches supplied character <span class="variablename">ch</span>. Good for checking such  things as whether token stopped reading characters because it encountered a newline (and labileFlags bit  newlineIsToken was set):<pre> StoppedOn('
+');
+</pre> or whether token stopped reading characters because of a punctuation character such as a comma:<pre> StoppedOn(',');
+</pre></dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="StripWhitespace602">StripWhitespace</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Strips whitespace from currently-stored token. Removes leading, trailing, and embedded whitespace characters.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ToUpper617">ToUpper</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Converts all alphabetical characters in token to upper case.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Write469">Write</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Simply outputs the current <a href="NxsString.html">NxsString</a> stored in <span class="variablename">token</span> to the output stream <span class="variablename">out</span>. Does not send a newline to the  output stream afterwards.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>I</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Writeln479">Writeln</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Simply outputs the current <a href="NxsString.html">NxsString</a> stored in <span class="variablename">token</span> to the output stream <span class="variablename">out</span>. Sends a newline to the output  stream afterwards.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/NxsTreesBlock.html b/html/NxsTreesBlock.html
new file mode 100644
index 0000000..8bc544a
--- /dev/null
+++ b/html/NxsTreesBlock.html
@@ -0,0 +1,472 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head><title>NEXUS CLASS LIBRARY: NxsTreesBlock Class</title>
+
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.quickref {font-family: Arial, sans-serif}
+.public {font-weight: bold; color: black; background: white;}
+.protected {font-weight: bold; color: teal; background: white;}
+.private {font-weight: bold; color: red; background: white;}
+.groupheading {font-size: large; font-weight: bold;}
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+
+<h1>Class NxsTreesBlock</h1>
+
+<h2>Data Members</h2>
+<a href="#defaultTree"><span class="quickref">defaultTree</span></a>, <a href="#ntrees"><span class="quickref">ntrees</span></a>, <a href="#rooted"><span class="quickref">rooted</span></a>, <a href="#taxa"><span class="quickref">taxa</span></a>, <a href="#translateList"><span class="quickref">translateList</span></a>, <a href="#treeDescription"><span class="quickref">treeDescription</span></a>, <a href="#treeName"><span class="quickref">treeName</span></a>
+<h2>Member Functions</h2>
+<a href="#BriefReport542"><span class="quickref">BriefReport</span></a><a href="#GetNumDefaultTree371"><span class="quickref">, GetNumDefaultTree</span></a><a href="#GetNumTrees379"><span class="quickref">, GetNumTrees</span></a><a href="#GetTranslatedTreeDescription402"><span class="quickref">, GetTranslatedTreeDescription</span></a><a href="#GetTreeDescription461"><span class="quickref">, GetTreeDescription</span></a><a href="#GetTreeName388"><span class="quickref">, GetTreeName</span> [...]
+<h2>Class Description</h2>
+
+<p>
+This class handles reading and storage for the NEXUS block TREES. It overrides the member functions Read and Reset, which are abstract virtual functions in the base class  <a href="NxsBlock.html">NxsBlock</a> . The translation table (if one is supplied) is  stored in the <span class="variablename">translateList</span>. The tree names are stored in <span class="variablename">treeName</span> and the tree descriptions in  <span class="variablename">treeDescription</span>. Information about  [...]
+ -----------------------------------------------------
+ TRANSLATE         translateList
+
+ TREE              treeName        GetTreeName
+                                   GetTreeDescription
+                                   GetNumTrees
+                                   GetNumDefaultTree
+                                   IsDefaultTree
+
+                   rooted          IsRootedTree
+ -----------------------------------------------------
+</pre>
+
+
+<h3>Key to symbols and colors</h3>
+
+<p><span class="public">public</span>, <span class="protected">protected</span>, <span class="private">private</span>, <code>A</code> = abstract, <code>C</code> = constructor, <code>D</code> = destructor, <code>I</code> = inline, <code>S</code> = static, <code>V</code> = virtual, <code>F</code> = friend</p>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Data Members</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="defaultTree">defaultTree</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>0-offset index of default tree specified by user, or 0 if user failed to specify a default tree using an asterisk in the NEXUS data file</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ntrees">ntrees</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>number of trees stored</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsBoolVector</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="rooted">rooted</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>stores information about rooting for each tree</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> <a href="NxsTaxaBlock.html">NxsTaxaBlock</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="taxa">*taxa</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>pointer to existing NxsTaxaBlock object</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsStringMap</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="translateList">translateList</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for translation table (if any)</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsStringVector</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="treeDescription">treeDescription</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for tree descriptions</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table  width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code> NxsStringVector</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="treeName">treeName</a></code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>storage for tree names</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
+<p> </p>
+<center>
+<table border="5" cellpadding="1" cellspacing="0" width="95%">
+<tr bgcolor="#CCCCFF">
+<td><span class="groupheading">Member Functions</span></td>
+</table>
+<table border="1" cellpadding="3" cellspacing="0" width="95%">
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="BriefReport542">BriefReport</a></code><code>(NxsString &s)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Outputs a brief description of this block's contents to the referenced <a href="NxsString.html">NxsString</a>. An example of the output of this  command is shown below:<pre> TREES block contains 102 trees
+</pre></dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumDefaultTree371">GetNumDefaultTree</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the 0-offset index of the default tree, which will be 0 if there is only one tree stored or no trees  stored. If more than one tree is stored, the default tree will be the one specifically indicated by the user (using an asterisk in the data file), or 0 if the user failed to specify.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>unsigned</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetNumTrees379">GetNumTrees</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the number of trees stored in this NxsTreesBlock object.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTranslatedTreeDescription402">GetTranslatedTreeDescription</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the description of the tree stored at position <span class="variablename">i</span> in <span class="variablename">treeName</span>. Assumes that <span class="variablename">i</span> will be in the range  [0..ntrees). Node numbers will be translated to names in the resulting tree description. Use GetTreeDescription if  translation is not desired.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTreeDescription461">GetTreeDescription</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the description of the tree stored at position <span class="variablename">i</span> in <span class="variablename">treeDescription</span>. Assumes that <span class="variablename">i</span> will be in the  range [0..<span class="variablename">ntrees</span>).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code><a href="NxsString.html">NxsString</a></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="GetTreeName388">GetTreeName</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns the name of the tree stored at position <span class="variablename">i</span> in <span class="variablename">treeName</span>. Assumes that <span class="variablename">i</span> will be in the range  [0..<span class="variablename">ntrees</span>).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="HandleTreeDescription65">HandleTreeDescription</a></code><code>(NxsToken &token, bool utree)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Takes control from the Read member function when a TREE or UTREE command is encountered. If a TREE command is found, the HandleTreeDescription member function is called with <span class="variablename">utree</span> equal to false. If a UTREE command is found,  <span class="variablename">utree</span> equals true.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsDefaultTree474">IsDefaultTree</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the <span class="variablename">i</span>th tree (0-offset) is the default tree, false otherwise. Assumes that <span class="variablename">i</span> will be in the  range [0..ntrees).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>bool</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="IsRootedTree490">IsRootedTree</a></code><code>(unsigned i)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Returns true if the <span class="variablename">i</span>th tree (0-offset) is rooted, false otherwise. Assumes that <span class="variablename">i</span> will be in the  range [0..ntrees).</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>C</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsTreesBlock25">NxsTreesBlock</a></code><code>(NxsTaxaBlock *tb)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Initializes <span class="variablename">id</span> to "TREES", <span class="variablename">ntrees</span> to 0, <span class="variablename">defaultTree</span> to 0, and <span class="variablename">taxa</span> to <span class="variablename">tb</span>. Assumes <span class="variablename">tb</span> is non-NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>D</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code></code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="NxsTreesBlock40">~NxsTreesBlock</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Clears <span class="variablename">translateList</span>, <span class="variablename">rooted</span>, <span class="variablename">treeName</span> and <span class="variablename">treeDescription</span>.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Read185">Read</a></code><code>(NxsToken &token)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function provides the ability to read everything following the block name (which is read by the <a href="NxsReader.html">NxsReader</a>  object) to the END or ENDBLOCK command. Characters are read from the input stream <span class="variablename">in</span>. Overrides the abstract  virtual function in the base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td> </td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="ReplaceTaxaBlockPtr52">ReplaceTaxaBlockPtr</a></code><code>(NxsTaxaBlock *tb)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Makes data member <span class="variablename">taxa</span> point to <span class="variablename">tb</span> rather than the <a href="NxsTaxaBlock.html">NxsTaxaBlock</a> object it was previously pointing to. Assumes  <span class="variablename">tb</span> is non-NULL.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Report503">Report</a></code><code>(ostream &out)</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>This function outputs a brief report of the contents of this block. Overrides the abstract virtual function in the  base class.</dd></td>
+</tr>
+</table>
+</td></tr>
+<tr><td>
+<table width="100%" border="0" cellpadding="1">
+<tr>
+<td>V</td>
+<td> </td>
+<td align="right" valign="top" width="15%"><code>void</code></td>
+<td> </td>
+<td align="left" valign="top" width="82%"><code class="public"><a name="Reset348">Reset</a></code><code>()</code></td>
+</tr>
+<tr>
+<td> </td>
+<td> </td>
+<td> </td>
+<td> </td>
+<td><dd>Flushes <span class="variablename">treeName</span>, <span class="variablename">treeDescription</span>, <span class="variablename">translateList</span> and <span class="variablename">rooted</span>, and sets <span class="variablename">ntrees</span> and <span class="variablename">defaultTree</span> both to 0 in preparation for reading a new TREES block.</dd></td>
+</tr>
+</table>
+</td></tr>
+</table>
+</center>
diff --git a/html/classes.html b/html/classes.html
new file mode 100644
index 0000000..9338f35
--- /dev/null
+++ b/html/classes.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+<head>
+<title>NEXUS CLASS LIBRARY: Index of Classes</title>
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+<h1>NCL Classes</h1>
+<ul>
+<li><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></li>
+<li><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></li>
+<li><a href="NxsBlock.html">NxsBlock</a></li>
+<li><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></li>
+<li><a href="NxsException.html">NxsException</a></li>
+<li><a href="NxsString.html">NxsString</a></li>
+<li><a href="NStrCaseInsensitiveEquals.html">NStrCaseInsensitiveEquals</a></li>
+<li><a href="NStrCaseSensitiveEquals.html">NStrCaseSensitiveEquals</a></li>
+<li><a href="NxsStringEqual.html">NxsStringEqual</a></li>
+<li><a href="NxsToken.html">NxsToken</a></li>
+<li><a href="NxsDataBlock.html">NxsDataBlock</a></li>
+<li><a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a></li>
+<li><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></li>
+<li><a href="NxsDistanceDatum.html">NxsDistanceDatum</a></li>
+<li><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></li>
+<li><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></li>
+<li><a href="NxsSetReader.html">NxsSetReader</a></li>
+<li><a href="NxsTreesBlock.html">NxsTreesBlock</a></li>
+<li><a href="NxsReader.html">NxsReader</a></li>
+<li><a href="MyToken.html">MyToken</a></li>
+<li><a href="MyNexusFileReader.html">MyNexusFileReader</a></li>
+<li><a href="MyCharactersBlock.html">MyCharactersBlock</a></li>
+<li><a href="MyDataBlock.html">MyDataBlock</a></li>
+<li><a href="MyAssumptionsBlock.html">MyAssumptionsBlock</a></li>
+<li><a href="BASICCMDLINE.html">BASICCMDLINE</a></li>
+<li><a href="MyNexusToken.html">MyNexusToken</a></li>
+</ul>
+</body>
+</html>
diff --git a/html/contents.html b/html/contents.html
new file mode 100644
index 0000000..7f902a8
--- /dev/null
+++ b/html/contents.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+<head>
+<title>NEXUS CLASS LIBRARY: Main Index</title>
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+<h1>NCL Classes</h1>
+<a href="classes.html">Alphabetical</a>
+<h1>NCL Member Functions</h1>
+<a href="functions.html">Alphabetical</a>
+</body>
+</html>
diff --git a/html/footer.html b/html/footer.html
new file mode 100644
index 0000000..dcf9b77
--- /dev/null
+++ b/html/footer.html
@@ -0,0 +1,16 @@
+<div class="linkstrip">
+<a href="http://lewis.eeb.uconn.edu/lewishome/">Lewis Labs</a> ~ 
+<a href="http://www.eeb.uconn.edu/">EEB</a> ~ 
+<a href="http://www.uconn.edu/">UConn</a>
+</div>
+
+<p> </p>
+<p class="footer">© 2003 Paul O. Lewis</p>
+<p class="footer">Comments and suggestions are welcome, and should be directed to 
+<a href="mailto:paul.lewis at uconn.edu">Paul O. Lewis</a></p>
+<p class="footer">Best viewed using Opera 5.x, Explorer 5.x and Netscape 6.x.</p>
+<p class="footer"><?php echo "Last modified: ".date( "F d Y H:i:s.", getlastmod() ); ?></p>
+<p class="footer">
+  <a href="http://validator.w3.org/check/referer"><img style="border:0;width:88px;height:31px" src="http://hydrodictyon.eeb.uconn.edu/people/images/valid-html401.gif" alt="Valid HTML 4.01!"></a>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img style="border:0;width:88px;height:31px" src="http://hydrodictyon.eeb.uconn.edu/people/images/valid-css.gif" alt="Valid CSS!"></a>
+  </p>
diff --git a/html/functions.html b/html/functions.html
new file mode 100644
index 0000000..a8e3434
--- /dev/null
+++ b/html/functions.html
@@ -0,0 +1,429 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+<head>
+<title>NEXUS CLASS LIBRARY: Index of Member Functions</title>
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+.classy {font-family: Arial, sans-serif; color: navy;}
+.variablename {font-weight: bold; color: maroon;}
+-->
+</style>
+</head>
+<body>
+
+
+<table border="1" width="100%">
+<tr><td>
+<table border="0" width="100%">
+<tr>
+<td align="left"><span class="classy">NEXUS CLASS LIBRARY</span></td>
+<td align="right"><span class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a></span></td>
+</tr>
+</table>
+</td></tr>
+</table>
+<h1>NCL Member Functions</h1>
+<table border="0">
+<tr><td><a href="NxsString.html#Abbreviates391">Abbreviates</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsToken.html#Abbreviation280">Abbreviation</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsReader.html#Add44">Add</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsString.html#AddQuotes81">AddQuotes</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsSetReader.html#AddRange47">AddRange</a></td><td><a href="NxsSetReader.html">NxsSetReader</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#AddRows55">AddRows</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#AddState90">AddState</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#AddState113">AddState</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsString.html#AddTail63">AddTail</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#AddTaxonLabel230">AddTaxonLabel</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#AppendToComment144">AppendToComment</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#AppendToToken153">AppendToToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#ApplyDelset72">ApplyDelset</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#ApplyExSet170">ApplyExSet</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#ApplyExset104">ApplyExset</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#ApplyIncludeset135">ApplyIncludeset</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#ApplyRestoreset167">ApplyRestoreset</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#AtEOF284">AtEOF</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#AtEOL293">AtEOL</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#BASICCMDLINE49">BASICCMDLINE</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#BASICCMDLINE71">~BASICCMDLINE</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsToken.html#Begins337">Begins</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsString.html#BlanksToUnderscores437">BlanksToUnderscores</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsToken.html#BlanksToUnderscores302">BlanksToUnderscores</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsReader.html#BlockListEmpty125">BlockListEmpty</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsString.html#BreakPipeSeparatedList856">BreakPipeSeparatedList</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#BriefReport542">BriefReport</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#BuildCharPosArray201">BuildCharPosArray</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsString.html#Capitalize382">Capitalize</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#ChangeTaxonLabel247">ChangeTaxonLabel</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#CharLabelToNumber223">CharLabelToNumber</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#CharLabelToNumber51">CharLabelToNumber</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#CharLabelToNumber45">CharLabelToNumber</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#CharLabelToNumber88">CharLabelToNumber</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsString.html#clear267">clear</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#Consume244">Consume</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsString.html#ConvertToDouble699">ConvertToDouble</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#ConvertToInt669">ConvertToInt</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#ConvertToLong683">ConvertToLong</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#ConvertToUnsigned657">ConvertToUnsigned</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsDiscreteDatum.html#CopyFrom42">CopyFrom</a></td><td><a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#CopyStatesFromFirstTaxon165">CopyStatesFromFirstTaxon</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsReader.html#DebugReportBlock142">DebugReportBlock</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#DebugReportBlock172">DebugReportBlock</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#DebugSaveMatrix182">DebugSaveMatrix</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#DebugShowMatrix348">DebugShowMatrix</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#DeleteTaxon323">DeleteTaxon</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsReader.html#Detach158">Detach</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsBlock.html#Disable66">Disable</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#DuplicateRow214">DuplicateRow</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsBlock.html#Enable77">Enable</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsString.html#endl589">endl</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsReader.html#EnteringBlock204">EnteringBlock</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#EnteringBlock82">EnteringBlock</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#EnteringBlock100">EnteringBlock</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsString.html#Equals441">Equals</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsToken.html#Equals372">Equals</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsString.html#EqualsCaseInsensitive601">EqualsCaseInsensitive</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#ExcludeCharacter333">ExcludeCharacter</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsReader.html#Execute237">Execute</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsReader.html#ExecuteStarting425">ExecuteStarting</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsReader.html#ExecuteStopping436">ExecuteStopping</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsReader.html#ExitingBlock217">ExitingBlock</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#ExitingBlock94">ExitingBlock</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#ExitingBlock115">ExitingBlock</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#FactoryDefaults126">FactoryDefaults</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#FileExists121">FileExists</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#FileExists184">FileExists</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#FindTaxon319">FindTaxon</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#Flush251">Flush</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetActiveCharArray345">GetActiveCharArray</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetActiveTaxonArray356">GetActiveTaxonArray</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetCharLabel365">GetCharLabel</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetCharPos380">GetCharPos</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetCharSet74">GetCharSet</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetCharSetNames62">GetCharSetNames</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#GetComment81">GetComment</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#GetCurlyBracketedToken151">GetCurlyBracketedToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetDataType416">GetDataType</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetDefCharSetName84">GetDefCharSetName</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetDefExSetName160">GetDefExSetName</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetDefTaxSetName122">GetDefTaxSetName</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#GetDiscreteDatum269">GetDiscreteDatum</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#GetDistance758">GetDistance</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#GetDoubleQuotedToken185">GetDoubleQuotedToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetExSet150">GetExSet</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetExSetNames138">GetExSetNames</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#GetFileColumn311">GetFileColumn</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#GetFileLine330">GetFileLine</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#GetFileName209">GetFileName</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsToken.html#GetFilePosition321">GetFilePosition</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetGapSymbol393">GetGapSymbol</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#GetID117">GetID</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetInternalRepresentation443">GetInternalRepresentation</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetMatchcharSymbol424">GetMatchcharSymbol</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetMaxObsNumStates406">GetMaxObsNumStates</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#GetMaxTaxonLabelLength265">GetMaxTaxonLabelLength</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetMissingSymbol459">GetMissingSymbol</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#GetMissingSymbol774">GetMissingSymbol</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNChar467">GetNChar</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#GetNchar749">GetNchar</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNCharTotal475">GetNCharTotal</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#GetNextChar179">GetNextChar</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#GetNextToken426">GetNextToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNTax483">GetNTax</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#GetNtax741">GetNtax</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNTaxTotal491">GetNTaxTotal</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNumActiveChar423">GetNumActiveChar</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNumActiveTaxa439">GetNumActiveTaxa</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetNumCharSets54">GetNumCharSets</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#GetNumDefaultTree371">GetNumDefaultTree</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNumEliminated499">GetNumEliminated</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNumEquates507">GetNumEquates</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetNumExSets130">GetNumExSets</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNumMatrixCols516">GetNumMatrixCols</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNumMatrixRows525">GetNumMatrixRows</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetNumStates533">GetNumStates</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#GetNumStates287">GetNumStates</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#GetNumStates303">GetNumStates</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#GetNumTaxonLabels340">GetNumTaxonLabels</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetNumTaxSets92">GetNumTaxSets</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#GetNumTrees379">GetNumTrees</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetObsNumStates546">GetObsNumStates</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#GetObsNumStates320">GetObsNumStates</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetOrigCharIndex456">GetOrigCharIndex</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetOrigCharNumber556">GetOrigCharNumber</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetOrigTaxonIndex471">GetOrigTaxonIndex</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetOrigTaxonNumber566">GetOrigTaxonNumber</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#GetParentheticalToken248">GetParentheticalToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsString.html#GetQuoted255">GetQuoted</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsToken.html#GetQuoted208">GetQuoted</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetState579">GetState</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#GetState351">GetState</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#GetState370">GetState</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetStateLabel488">GetStateLabel</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetSymbols598">GetSymbols</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetTaxonLabel606">GetTaxonLabel</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#GetTaxonLabel282">GetTaxonLabel</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#GetTaxPos403">GetTaxPos</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetTaxSet112">GetTaxSet</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#GetTaxSetNames100">GetTaxSetNames</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#GetToken340">GetToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#GetTokenAsCStr354">GetTokenAsCStr</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#GetTokenLength366">GetTokenLength</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#GetTokenReference123">GetTokenReference</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsSetReader.html#GetTokenValue70">GetTokenValue</a></td><td><a href="NxsSetReader.html">NxsSetReader</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#GetTranslatedTreeDescription402">GetTranslatedTreeDescription</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#GetTreeDescription461">GetTreeDescription</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#GetTreeName388">GetTreeName</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#GetTriangle782">GetTriangle</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsString.html#GetVecOfPossibleAbbrevMatches839">GetVecOfPossibleAbbrevMatches</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleCharlabels551">HandleCharlabels</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#HandleCharset180">HandleCharset</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleCharstatelabels600">HandleCharstatelabels</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleDimensions728">HandleDimensions</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#HandleDimensionsCommand61">HandleDimensionsCommand</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleEliminate839">HandleEliminate</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#HandleEndblock226">HandleEndblock</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleEndblock871">HandleEndblock</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#HandleEndblock55">HandleEndblock</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#HandleEndblock235">HandleEndblock</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#HandleExecute255">HandleExecute</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#HandleExset247">HandleExset</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleFormat907">HandleFormat</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#HandleFormatCommand134">HandleFormatCommand</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#HandleHelp331">HandleHelp</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#HandleLog444">HandleLog</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleMatrix2139">HandleMatrix</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#HandleMatrixCommand404">HandleMatrixCommand</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#HandleNextCommand596">HandleNextCommand</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#HandleNextPass253">HandleNextPass</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleNextState1432">HandleNextState</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#HandleShow368">HandleShow</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleStatelabels2239">HandleStatelabels</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleStdMatrix1786">HandleStdMatrix</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleTaxlabels2300">HandleTaxlabels</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#HandleTaxlabelsCommand478">HandleTaxlabelsCommand</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#HandleTaxset295">HandleTaxset</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleTokenState1737">HandleTokenState</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#HandleTransposedMatrix1977">HandleTransposedMatrix</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#HandleTreeDescription65">HandleTreeDescription</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IncludeCharacter616">IncludeCharacter</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsActiveChar626">IsActiveChar</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsActiveTaxon639">IsActiveTaxon</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsString.html#IsADouble506">IsADouble</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#IsALong574">IsALong</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#IsAlreadyDefined307">IsAlreadyDefined</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsString.html#IsCapAbbreviation220">IsCapAbbreviation</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#IsDefaultTree474">IsDefaultTree</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsDeleted651">IsDeleted</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#IsDiagonal814">IsDiagonal</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsEliminated506">IsEliminated</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#IsEmpty109">IsEmpty</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#IsEnabled88">IsEnabled</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsExcluded661">IsExcluded</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#IsGap386">IsGap</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#IsGap403">IsGap</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsGapState671">IsGapState</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsInSymbols527">IsInSymbols</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsInterleave682">IsInterleave</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#IsInterleave822">IsInterleave</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsString.html#IsInVector275">IsInVector</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsLabels690">IsLabels</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#IsLabels830">IsLabels</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#IsLowerTriangular806">IsLowerTriangular</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#IsMissing416">IsMissing</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#IsMissing433">IsMissing</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#IsMissing839">IsMissing</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsMissingState699">IsMissingState</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsString.html#IsNexusPunctuation475">IsNexusPunctuation</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsToken.html#IsPlusMinusToken374">IsPlusMinusToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsPolymorphic712">IsPolymorphic</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#IsPolymorphic446">IsPolymorphic</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#IsPolymorphic463">IsPolymorphic</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsToken.html#IsPunctuation237">IsPunctuation</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#IsPunctuationToken386">IsPunctuationToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#IsRectangular790">IsRectangular</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsRespectCase723">IsRespectCase</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#IsRootedTree490">IsRootedTree</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsString.html#IsStdAbbreviation176">IsStdAbbreviation</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsTokens731">IsTokens</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#IsTranspose739">IsTranspose</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#IsUpperTriangular798">IsUpperTriangular</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#IsUserSupplied99">IsUserSupplied</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#IsWhitespace261">IsWhitespace</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#IsWhitespaceToken398">IsWhitespaceToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="MyAssumptionsBlock.html#MyAssumptionsBlock263">MyAssumptionsBlock</a></td><td><a href="MyAssumptionsBlock.html">MyAssumptionsBlock</a></td></tr>
+<tr><td><a href="MyCharactersBlock.html#MyCharactersBlock217">MyCharactersBlock</a></td><td><a href="MyCharactersBlock.html">MyCharactersBlock</a></td></tr>
+<tr><td><a href="MyDataBlock.html#MyDataBlock240">MyDataBlock</a></td><td><a href="MyDataBlock.html">MyDataBlock</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#MyNexusFileReader53">MyNexusFileReader</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#MyNexusFileReader72">~MyNexusFileReader</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="MyNexusToken.html#MyNexusToken27">MyNexusToken</a></td><td><a href="MyNexusToken.html">MyNexusToken</a></td></tr>
+<tr><td><a href="MyToken.html#MyToken27">MyToken</a></td><td><a href="MyToken.html">MyToken</a></td></tr>
+<tr><td><a href="NxsReader.html#NCLCopyrightNotice396">NCLCopyrightNotice</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsReader.html#NCLHomePageURL404">NCLHomePageURL</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsReader.html#NCLNameAndVersion413">NCLNameAndVersion</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#NeedsQuotes295">NeedsQuotes</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsReader.html#NexusError444">NexusError</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#NexusError188">NexusError</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#NexusError615">NexusError</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NStrCaseInsensitiveEquals.html#NStrCaseInsensitiveEquals182">NStrCaseInsensitiveEquals</a></td><td><a href="NStrCaseInsensitiveEquals.html">NStrCaseInsensitiveEquals</a></td></tr>
+<tr><td><a href="NStrCaseSensitiveEquals.html#NStrCaseSensitiveEquals211">NStrCaseSensitiveEquals</a></td><td><a href="NStrCaseSensitiveEquals.html">NStrCaseSensitiveEquals</a></td></tr>
+<tr><td><a href="NxsString.html#NumberThenWord488">NumberThenWord</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#NxsAssumptionsBlock25">NxsAssumptionsBlock</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#NxsAssumptionsBlock37">~NxsAssumptionsBlock</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#NxsBlock26">NxsBlock</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#NxsBlock41">~NxsBlock</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#NxsCharactersBlock30">NxsCharactersBlock</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#NxsCharactersBlock58">~NxsCharactersBlock</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsDataBlock.html#NxsDataBlock25">NxsDataBlock</a></td><td><a href="NxsDataBlock.html">NxsDataBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteDatum.html#NxsDiscreteDatum25">NxsDiscreteDatum</a></td><td><a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a></td></tr>
+<tr><td><a href="NxsDiscreteDatum.html#NxsDiscreteDatum33">~NxsDiscreteDatum</a></td><td><a href="NxsDiscreteDatum.html">NxsDiscreteDatum</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#NxsDiscreteMatrix26">NxsDiscreteMatrix</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#NxsDiscreteMatrix41">~NxsDiscreteMatrix</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDistanceDatum.html#NxsDistanceDatum25">NxsDistanceDatum</a></td><td><a href="NxsDistanceDatum.html">NxsDistanceDatum</a></td></tr>
+<tr><td><a href="NxsDistanceDatum.html#NxsDistanceDatum34">~NxsDistanceDatum</a></td><td><a href="NxsDistanceDatum.html">NxsDistanceDatum</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#NxsDistancesBlock27">NxsDistancesBlock</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#NxsDistancesBlock49">~NxsDistancesBlock</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#NxsEmptyBlock25">NxsEmptyBlock</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#NxsEmptyBlock33">~NxsEmptyBlock</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="NxsException.html#NxsException26">NxsException</a></td><td><a href="NxsException.html">NxsException</a></td></tr>
+<tr><td><a href="NxsException.html#NxsException41">NxsException</a></td><td><a href="NxsException.html">NxsException</a></td></tr>
+<tr><td><a href="NxsReader.html#NxsReader24">NxsReader</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsReader.html#NxsReader33">~NxsReader</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsSetReader.html#NxsSetReader26">NxsSetReader</a></td><td><a href="NxsSetReader.html">NxsSetReader</a></td></tr>
+<tr><td><a href="NxsString.html#NxsString246">NxsString</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#NxsString291">NxsString</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#NxsString300">NxsString</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#NxsTaxaBlock25">NxsTaxaBlock</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#NxsTaxaBlock35">~NxsTaxaBlock</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#NxsToken26">NxsToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#NxsToken71">~NxsToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#NxsTreesBlock25">NxsTreesBlock</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#NxsTreesBlock40">~NxsTreesBlock</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NStrCaseInsensitiveEquals.html#operator194">operator()</a></td><td><a href="NStrCaseInsensitiveEquals.html">NStrCaseInsensitiveEquals</a></td></tr>
+<tr><td><a href="NStrCaseSensitiveEquals.html#operator221">operator()</a></td><td><a href="NStrCaseSensitiveEquals.html">NStrCaseSensitiveEquals</a></td></tr>
+<tr><td><a href="NxsStringEqual.html#operator233">operator()</a></td><td><a href="NxsStringEqual.html">NxsStringEqual</a></td></tr>
+<tr><td><a href="NxsString.html#operator35">operator+=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator326">operator+=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator336">operator+=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator346">operator+=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator370">operator+=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator405">operator+=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator417">operator+=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator429">operator+=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator463">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator502">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator511">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator520">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator529">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator538">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator547">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator556">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator565">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator598">operator<<</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator309">operator=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#operator359">operator=</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsToken.html#OutputComment133">OutputComment</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsReader.html#OutputComment460">OutputComment</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="MyToken.html#OutputComment39">OutputComment</a></td><td><a href="MyToken.html">MyToken</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#OutputComment106">OutputComment</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="MyNexusToken.html#OutputComment38">OutputComment</a></td><td><a href="MyNexusToken.html">MyNexusToken</a></td></tr>
+<tr><td><a href="NxsReader.html#PositionInBlockList69">PositionInBlockList</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#PositionInSymbols2348">PositionInSymbols</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#PreprocessNextCommand643">PreprocessNextCommand</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsString.html#PrintF108">PrintF</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#PrintMessage686">PrintMessage</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#PurgeBlocks705">PurgeBlocks</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsString.html#p_str574">p_str</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#QuotesNeeded393">QuotesNeeded</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#Read340">Read</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#Read2372">Read</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#Read129">Read</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#Read45">Read</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#Read528">Read</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#Read76">Read</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#Read185">Read</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#Read744">Read</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsReader.html#Reassign94">Reassign</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#ReplaceTaxaBlockPtr44">ReplaceTaxaBlockPtr</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#ReplaceTaxaBlockPtr52">ReplaceTaxaBlockPtr</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#ReplaceToken409">ReplaceToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#Report423">Report</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#Report2463">Report</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#Report149">Report</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#Report187">Report</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#Report627">Report</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#Report143">Report</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#Report503">Report</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#Report827">Report</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#Reset405">Reset</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#Reset2638">Reset</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#Reset142">Reset</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#Reset214">Reset</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsDataBlock.html#Reset38">Reset</a></td><td><a href="NxsDataBlock.html">NxsDataBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#Reset478">Reset</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#Reset707">Reset</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#Reset134">Reset</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="NxsTreesBlock.html#Reset348">Reset</a></td><td><a href="NxsTreesBlock.html">NxsTreesBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#Reset819">Reset</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#ResetSymbols2712">ResetSymbols</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsToken.html#ResetToken418">ResetToken</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#RestoreTaxon747">RestoreTaxon</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsString.html#RightJustifyDbl343">RightJustifyDbl</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#RightJustifyLong305">RightJustifyLong</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#RightJustifyString372">RightJustifyString</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsSetReader.html#Run101">Run</a></td><td><a href="NxsSetReader.html">NxsSetReader</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#Run843">Run</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#SetCallback510">SetCallback</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#SetDistance856">SetDistance</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#SetGap509">SetGap</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#SetGap526">SetGap</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsToken.html#SetLabileFlagBit438">SetLabileFlagBit</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#SetMissing539">SetMissing</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#SetMissing556">SetMissing</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#SetMissing875">SetMissing</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsDistancesBlock.html#SetNchar892">SetNchar</a></td><td><a href="NxsDistancesBlock.html">NxsDistancesBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#SetNexus160">SetNexus</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsTaxaBlock.html#SetNtax348">SetNtax</a></td><td><a href="NxsTaxaBlock.html">NxsTaxaBlock</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#SetPolymorphic570">SetPolymorphic</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#SetPolymorphic589">SetPolymorphic</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsToken.html#SetSpecialPunctuationCharacter428">SetSpecialPunctuationCharacter</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#SetState607">SetState</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsDiscreteMatrix.html#SetState627">SetState</a></td><td><a href="NxsDiscreteMatrix.html">NxsDiscreteMatrix</a></td></tr>
+<tr><td><a href="NxsString.html#SetToShortestAbbreviation729">SetToShortestAbbreviation</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#ShortenTo470">ShortenTo</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#ShowStateLabels2777">ShowStateLabels</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#ShowStates758">ShowStates</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsReader.html#SkippingBlock472">SkippingBlock</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#SkippingBlock146">SkippingBlock</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#SkippingBlock900">SkippingBlock</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsBlock.html#SkippingCommand171">SkippingCommand</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#SkippingCommand156">SkippingCommand</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="MyCharactersBlock.html#SkippingCommand229">SkippingCommand</a></td><td><a href="MyCharactersBlock.html">MyCharactersBlock</a></td></tr>
+<tr><td><a href="MyDataBlock.html#SkippingCommand252">SkippingCommand</a></td><td><a href="MyDataBlock.html">MyDataBlock</a></td></tr>
+<tr><td><a href="MyAssumptionsBlock.html#SkippingCommand274">SkippingCommand</a></td><td><a href="MyAssumptionsBlock.html">MyAssumptionsBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#SkippingCommand915">SkippingCommand</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsReader.html#SkippingDisabledBlock485">SkippingDisabledBlock</a></td><td><a href="NxsReader.html">NxsReader</a></td></tr>
+<tr><td><a href="MyNexusFileReader.html#SkippingDisabledBlock160">SkippingDisabledBlock</a></td><td><a href="MyNexusFileReader.html">MyNexusFileReader</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#SkippingDisabledBlock929">SkippingDisabledBlock</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsToken.html#StoppedOn456">StoppedOn</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#StripWhitespace602">StripWhitespace</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsAssumptionsBlock.html#TaxonLabelToNumber521">TaxonLabelToNumber</a></td><td><a href="NxsAssumptionsBlock.html">NxsAssumptionsBlock</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#TaxonLabelToNumber780">TaxonLabelToNumber</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+<tr><td><a href="NxsBlock.html#TaxonLabelToNumber185">TaxonLabelToNumber</a></td><td><a href="NxsBlock.html">NxsBlock</a></td></tr>
+<tr><td><a href="NxsEmptyBlock.html#TaxonLabelToNumber169">TaxonLabelToNumber</a></td><td><a href="NxsEmptyBlock.html">NxsEmptyBlock</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#TaxonLabelToNumber942">TaxonLabelToNumber</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsString.html#ToHex625">ToHex</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#ToLower493">ToLower</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#ToUpper25">ToUpper</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsToken.html#ToUpper617">ToUpper</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsDataBlock.html#TransferTo49">TransferTo</a></td><td><a href="NxsDataBlock.html">NxsDataBlock</a></td></tr>
+<tr><td><a href="NxsString.html#UnderscoresToBlanks452">UnderscoresToBlanks</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="NxsString.html#UpperCasePrefix644">UpperCasePrefix</a></td><td><a href="NxsString.html">NxsString</a></td></tr>
+<tr><td><a href="BASICCMDLINE.html#UserQuery954">UserQuery</a></td><td><a href="BASICCMDLINE.html">BASICCMDLINE</a></td></tr>
+<tr><td><a href="NxsToken.html#Write469">Write</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsToken.html#Writeln479">Writeln</a></td><td><a href="NxsToken.html">NxsToken</a></td></tr>
+<tr><td><a href="NxsCharactersBlock.html#WriteStates2878">WriteStates</a></td><td><a href="NxsCharactersBlock.html">NxsCharactersBlock</a></td></tr>
+</table>
+</body>
+</html>
diff --git a/html/index.html b/html/index.html
new file mode 100644
index 0000000..9026f06
--- /dev/null
+++ b/html/index.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>NEXUS CLASS LIBRARY: Home Page</title>
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+  <tr>
+    <td> <table border="0" width="100%">
+        <tr>
+          <td align="left" class="classy">NEXUS CLASS LIBRARY</td>
+          <td align="right" class="classy"><a href="index.html">home</a> | <a href="classes.html">classes</a>
+            | <a href="functions.html">functions</a></td>
+        </tr>
+      </table></td>
+  </tr>
+</table>
+<h1><a name="top">Nexus Class Library (version 2.1)</a></h1>
+<h3>by Paul O. Lewis and Mark Holder</h3>
+<p>The NEXUS Class Library is a C++ library for parsing NEXUS files.  Paul Lewis
+originally wrote the library and did a very nice job of documenting its interface.
+That is the version 2.0 that is documented <a href="v2.0index.html">here</a>.
+</p>
+<p>Mark Holder has extended NCL and currently does most of the maintenance work.
+Version 2.1 strives to be backward compatible with v2.0.
+The features that are specific to version 2.1 are not very well documented, but we are
+working on documentation <a href="v2.1/index.html">here</a>
+</p>
+</body>
+</html>
+
diff --git a/html/link_topol_and_mth_index.html b/html/link_topol_and_mth_index.html
new file mode 100644
index 0000000..9a7ba52
--- /dev/null
+++ b/html/link_topol_and_mth_index.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>NEXUS CLASS LIBRARY: Soureforge Home Page</title>
+<style type="text/css">
+</style>
+</head>
+<body>
+<h1><a name="top">Nexus Class Library (version 2.1)</a></h1>
+<h3>by Paul O. Lewis and Mark Holder</h3>
+<p>The NEXUS Class Library is a C++ library for parsing NEXUS files.  Paul Lewis
+originally wrote the library and did a very nice job of documenting its interface.
+That is the version 2.0 that is documented at <a href="http://hydrodictyon.eeb.uconn.edu/ncl/">http://hydrodictyon.eeb.uconn.edu/ncl/</a>.
+</p>
+<p>Mark Holder has extended NCL and currently does most of the maintenance work.
+Version 2.1 strives to be backward compatible with v2.0.
+The documentation for v2.1-specific features is not as good as v2.0 docs, but we are
+working on them.
+They improved a great deal on March 27, 2010.
+Those docs are posted at <a href="http://phylo.bio.ku.edu/ncldocs/v2.1/funcdocs/index.html">http://phylo.bio.ku.edu/ncldocs/v2.1/funcdocs/index.html</a>.
+They refer to some functions that were just added, so you'll need the latest version of NCL.
+</p>
+<div id="projectinfo">
+		<div class="left">
+				<p><strong><a href="http://sourceforge.net/projects/ncl">sourceforge project page for NCL.</a></strong></p>
+				<p><strong>
+						<a href="http://sourceforge.net/projects/ncl/files">
+								Download NEXUS Class Library (NCL) files</a>
+				</strong></p>
+				<p><strong>
+						<a href="http://sourceforge.net/project/project_donations.php?group_id=181257" class="donate" title="Donate to this project">
+								Donate money</a>
+				</strong></p>
+				<p><strong>
+						<a href="http://sourceforge.net/projects/ncl/">
+								Project detail and discuss</a>
+				</strong></p>
+				<p><strong>
+						<a href="http://sourceforge.net/projects/ncl/support">
+								Get support</a>
+			</strong></p>
+				<h3>
+						Not what you're looking for?
+				</h3>
+				<p>
+						SourceForge.net hosts over 100,000 Open Source projects. You may find what you're looking for by
+						<a href="https://sourceforge.net/search/">
+								searching our site
+						</a>
+						or using our
+						<a href="https://sourceforge.net/softwaremap/">
+								Software Map</a>.
+				</p>
+				<ul>
+
+				</ul>
+		</div>
+</div>
+
+
+</body>
+</html>
+
diff --git a/html/ncl.css b/html/ncl.css
new file mode 100644
index 0000000..7c6d47f
--- /dev/null
+++ b/html/ncl.css
@@ -0,0 +1,39 @@
+DIV.linkstrip {
+	MARGIN-TOP: 1em; FONT-SIZE: large; TEXT-ALIGN: center
+}
+
+P.footer {
+	CLEAR: left; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: x-small; PADDING-BOTTOM: 0px; MARGIN: 1ex 15% 0px; LINE-HEIGHT: 0.6; PADDING-TOP: 0px; FONT-FAMILY: Arial, Chicago, sans-serif; TEXT-ALIGN: center
+}
+
+A:hover {
+	COLOR: #a00; BACKGROUND-COLOR: white; TEXT-DECORATION: none
+}
+
+.quickref {
+	font-family: Arial, sans-serif
+}
+
+.public {
+	font-weight: bold; color: black; background: white;
+}
+
+.protected {
+	font-weight: bold; color: teal; background: white;
+}
+
+.private {
+	font-weight: bold; color: red; background: white;
+}
+
+.groupheading {
+	font-size: large; font-weight: bold;
+}
+
+.classy {
+	font-family: Arial, sans-serif; color: navy;
+}
+
+.variablename {
+	font-weight: bold; color: maroon;
+}
diff --git a/html/roadmap.html b/html/roadmap.html
new file mode 100644
index 0000000..9f8f0e4
--- /dev/null
+++ b/html/roadmap.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+	<link rel="stylesheet" type="text/css" href="stylesheets/styleguide.css">
+<style type="text/css"> 
+<!--
+ at import url(stylesheets/styleguidextra.css);
+-->
+</style> <title>NCL Roadmap</title> 
+</head>
+<body>
+<h1>NCL Roadmap</h1> 
+<h2><a name="topofpage">Index</a></h2> 
+<p>
+	<br>
+	<a href="#v2.0"> Version 2.0 </a> 
+	<br>
+	<a href="#v2.1"> Version 2.1 </a> 
+	<br>
+	<a href="#v3.0"> Version 3.0 </a> 
+</p>
+<h2><a name="v2.0">Version 2.0</a></h2> 
+	Version 2.0 has been posted at <a href="http://hydrodictyon.eeb.uconn.edu/people/plewis/software.php">Paul Lewis' software site</a> for years.
+	Bugs in this version are being fixed in the svn repository at <tt>https://svn.sourceforge.net/svnroot/ncl/branches/v2-stable</tt>
+
+<h2><a name="v2.1">Version 2.1</a></h2> 
+<p>
+	A minor upgrade to version 2.1 is found at <tt>https://svn.sourceforge.net/svnroot/ncl/branches/v2.1</tt>.
+	This version will change the original API as little as possible.
+</p>
+<p>
+	Programmers that do not have code that depends on the details of version 2.0 are encouraged to use 2.1
+</p>
+<p>
+	We will try to make the migration from 2.0 to 2.1 easy for code that already depends on NCL.
+</p>
+<h2><a name="v3.0">Version 3.0</a></h2> 
+<p>
+	The next major upgrade will primarily be a merging of functionality from previously forked versions of NCL.
+	This is not ready for prime time yet.
+</p>
+
+</body>
+</html>
diff --git a/html/styleguide.html b/html/styleguide.html
new file mode 100644
index 0000000..f4b3891
--- /dev/null
+++ b/html/styleguide.html
@@ -0,0 +1,292 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+<link rel="stylesheet" type="text/css" href="stylesheets/styleguide.css">
+<style type="text/css"> 
+<!--
+ at import url(stylesheets/styleguidextra.css);
+-->
+</style>
+<title>NCL/Phorest Source Code Style Guide</title>
+</head>
+
+<body>
+
+<h1>NCL/Phorest Source Code Style Guide</h1>
+
+<a name="topofpage">
+<h2>Index</h2>
+</a>
+
+<p>
+<br><a href="#primedirectives"> Prime Directives		</a>
+<br><a href="#largespecial">    Large special comments	</a>
+<br><a href="#smallspecial">    Small special comments	</a>
+<br><a href="#uncaptured">      Uncaptured comments		</a>
+<br><a href="#accessors">		Accessor Functions		</a>
+<br><a href="#"></a>
+<br><a href="#"></a>
+<br><a href="#"></a>
+</p>
+
+<a name="primedirectives">
+<!-- ******************************************************************************************************************* -->
+<h2> The Prime Directives </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+The following prime directives have been used to establish this style guide.
+
+<ul>
+<li>As much as possible, documentation should be done automatically by gleaning information from the source code itself.
+It is so easy to forget to update a comment when the function arguments change names, types, default values, etc. that
+we deemed it best to not even specify such things in comments to begin with. The only information included in the 
+special documentation comments is information that cannot be gleaned from the actual source code itself, such as the
+reasoning that went into designing the function or using the data member.</li>
+<li></li>
+</ul>
+
+<a name="largespecial">
+<!-- ******************************************************************************************************************* -->
+<h2> Large special comments </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p>Large special comments precede class declarations (in header files) and function bodies (in source code files).
+They should be C-style comments formatted exactly like the example below from NxsToken::AppendToToken:</p>
+
+<pre>
+/*----------------------------------------------------------------------------------------------------------------------
+|	Adds `ch' to end of current token.
+*/
+</pre>
+
+<p>Specific instructions:</p>
+
+<ul>
+<li>Comment should begin with <code>/*</code> followed by hyphens out to a total width of 120 characters. 
+    The only thing on this line should be these 120 characters, followed by an EOL.</li>
+<li>Each line of comment should begin with vertical bar character followed by a tab character. 
+    The characters on each of these lines should not extend past the 120 character boundary established 
+    by the first line of the comment.</li>
+<li>Comment should end with the <code>*/</code> that normally closes a C-style comment, but this should be the only
+    two chcaraters on this line except for the terminating EOL.</li>
+<li>Data members and function arguments mentioned by name in the comment should be surrounded by paired
+    single quotes, like <code>`this'</code>. Note that the opening quote is different than the closing quote. 
+    The reason for the initial backquote is that it is often necessary to surround text that does not
+    represent a function argument or data member in single quotes (e.g. <code>'\n'</code>).</li>
+<li>If the special comment is documenting a member function, and that member function uses asserts to catch
+    problems in debugging mode, used the phrase "Assumes ..." to let the reader know everything that is being 
+    assumed when using this member function. For example, if <code>assert(i >= 0 && i < ncols);</code> appears at the 
+    beginning of the function body to test whether the argument <code>i</code> has been specified correctly,
+    write "Assumes `i' is in the range [0..`ncols')." in your explanatory special comment.</li>
+</ul>
+
+<p>If it is necessary to include a source code example (or other pre-formatted text that should be 
+displayed in a fixed-width font), bracket this section of the comment using the special string <code>|></code> 
+(vertical bar followed by the greater than symbol). The example below is from UniformDistribution::GetRelativeLnPDF:</p>
+
+<pre>
+/*------------------------------------------------------------------------------------------------------------------------------------------------------------------
+|	The probability density function of the uniform distribution is 
+|>
+|		f(y) = 1 / (b - a)
+|>
+|	This function returns the natural log of the non-normalized density function at x, which is just 0.0 because the denominator is the normalizing factor and is 
+|	ignored. Assumes `x' is in the interval [a, b].
+*/
+</pre>
+
+<p>If it is necessary to include an itemized list, bracket this section of the comment using lines containing only 
+the special string <code>|~</code> (vertical bar followed by a tilde). Each item in the itemized list should begin 
+with a lower-case letter O (<code>o</code>), followed immediately by a single space (not a tab), but otherwise these lines 
+are exactly as they are for other comment lines (e.g. beginning with the upright bar followed by a tab). The example below 
+is from NxsToken::GetNextChar:</p>
+
+<pre>
+/*----------------------------------------------------------------------------------------------------------------------
+|	Reads next character from in and does all of the following before returning it to the calling function:
+|~
+|	o if character read is either a carriage return or line feed, the variable line is incremented by one and the
+|	  variable col is reset to zero
+|	o if character read is a carriage return, and a peek at the next character to be read reveals that it is a line
+|	  feed, then the next (line feed) character is read
+|	o if either a carriage return or line feed is read, the character returned to the calling function is '\n' if 
+|	  character read is neither a carriage return nor a line feed, col is incremented by one and the character is
+|	  returned as is to the calling function
+|	o in all cases, the variable filepos is updated using a call to the tellg function of istream.
+|~
+*/
+</pre>
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<a name="uncaptured">
+<!-- ******************************************************************************************************************* -->
+<h2> Uncaptured comments </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p>Uncaptured comments are C++-style comments within the body of a function that are not intended to be
+made part of the published documentation. These should be complete sentences, starting with a capitalized
+word and ending with a period. An empty comment line should follow the last line of the comment to provide
+visual separation of the comment from subsequent source code. The following example is from NxsToken::GetComment:</p>
+
+<pre>
+if (printing)
+	{
+	// Allow output comment to be printed or displayed in most appropriate
+	// manner for target operating system.
+	//
+	OutputComment(comment);
+
+	// Now that we are done with it, free the memory used to store the comment.
+	//
+	comment = "";
+	}
+</pre>
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<a name="smallspecial">
+<!-- ******************************************************************************************************************* -->
+<h2> Small special comments </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p>Small special comments are short comments used to document data members, enums and enum items (in class declarations
+in header files), and function arguments (in source code files). These are C-style comments that are entirely contained on
+a single line, regardless of how long that line needs to be in order to accommodate the comment. These comments are 
+set off from the object they document by at least one tab, and comments should be aligned vertically using extra preceding
+tab characters if necessry. The following example of small special comments used to document function arguments is from
+NxsToken::Equals:</p>
+
+<pre>
+bool NxsToken::Equals(
+  NxsString s,			/* the string for comparison to the string currently stored in this token */
+  bool respect_case)	/* if true, comparison will be case-sensitive */
+	{
+	...
+	}
+</pre>
+
+<p>Note that even though the respect_case argument has a default value specified in the class declaration, 
+the default value should not be mentioned in the comment because default argument values are 
+documented automatically. Note also how the arguments are indented two spaces from the left edge and
+their comments are aligned vertically using tab characters.</p>
+
+<p>The next example shows the comments describing data members of the class NxsException:</p>
+
+<pre>
+class NxsException
+	{
+	public:
+		NxsString	msg;	/* NxsString to hold message */
+		file_pos	pos;	/* current file position */
+		long		line;	/* current line in file */
+		long		col;	/* column of current line */
+
+		NxsException(NxsString s, file_pos fp = 0, long fl = 0L, long fc = 0L);
+		NxsException(const NxsString &s, const NxsToken &t);
+	};
+</pre>
+
+<p>Note that the data member names are aligned vertically (using tabs) as are the left edges of the
+comments describing these data members.
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<a name="accessors">
+<!-- ******************************************************************************************************************* -->
+<h2> Accessor Functions</h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p>Accessor functions are tiny public const member functions that do nothing but return the value of a private or protected
+data member. TODO: COMMENT ON COMMENTS</p>
+
+<pre>
+</pre>
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<a name="template">
+<!-- ******************************************************************************************************************* -->
+<h2> Template </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p></p>
+
+<pre>
+</pre>
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<a name="template">
+<!-- ******************************************************************************************************************* -->
+<h2> Template </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p></p>
+
+<pre>
+</pre>
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<a name="template">
+<!-- ******************************************************************************************************************* -->
+<h2> Template </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p></p>
+
+<pre>
+</pre>
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<a name="template">
+<!-- ******************************************************************************************************************* -->
+<h2> Template </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p></p>
+
+<pre>
+</pre>
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<a name="template">
+<!-- ******************************************************************************************************************* -->
+<h2> Template </h2>
+<!-- ******************************************************************************************************************* -->
+</a>
+
+<p></p>
+
+<pre>
+</pre>
+
+<p><a href="#topofpage">Back to the index</a></p>
+
+<p>&nbsp</p>
+<p class="footer">© 2002 The Phoresters</p>
+<p class="footer">Comments and suggestions are welcome, and should be directed to 
+<a href="mailto:paul.lewis at uconn.edu">Paul O. Lewis</a></p>
+<p class="footer">Best viewed using Opera 5.x, Explorer 5.x and Netscape 6.x.</p>
+<p class="footer">Last modified: December 30, 2002</p>
+<p class="footer">
+  <a href="http://validator.w3.org/check/referer"><img style="border:0;width:88px;height:31px" src="images/valid-html401.gif" alt="Valid HTML 4.01!"></a>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img style="border:0;width:88px;height:31px" src="images/valid-css.gif"     alt="Valid CSS!"></a>
+  </p>
+
+</body>
+</html>
+
diff --git a/html/v2.0index.html b/html/v2.0index.html
new file mode 100644
index 0000000..65cd20e
--- /dev/null
+++ b/html/v2.0index.html
@@ -0,0 +1,765 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>NEXUS CLASS LIBRARY: Home Page</title>
+<style type="text/css">
+<!--
+ at import url(ncl.css);
+-->
+</style>
+</head>
+<body>
+
+<table border="1" width="100%">
+  <tr>
+    <td> <table border="0" width="100%">
+        <tr>
+          <td align="left" class="classy">NEXUS CLASS LIBRARY</td>
+          <td align="right" class="classy"><a href="v2.0index.html">home</a> | <a href="classes.html">classes</a>
+            | <a href="functions.html">functions</a></td>
+        </tr>
+      </table></td>
+  </tr>
+</table>
+<h1><a name="top">Nexus Class Library (version 2.0)</a></h1>
+<h3>by Paul O. Lewis</h3>
+<h3>
+	For information on the current (v2.1) API see <a href="v2.1/index.html">v2.1/index.html</a>!
+</h3>
+<p>The documentation below reflects the "classic" v2.0 API.</p>
+<h2>Contents</h2>
+<ul>
+  <li><a href="#introduction">What is the NCL?</a></li>
+  <li><a href="COPYING">Licence and Warranty</a></li>
+  <li><a href="#download">Obtaining the NCL</a></li>
+  <li><a href="#characterisitics">Characteristics of the NCL</a>
+  <ul>
+    <li><a href="#portability">Portability</a></li>
+    <li><a href="#crossplatform">Cross-platform features</a></li>
+    <li><a href="#extensibility">Extensibility</a></li>
+  </ul></li>
+  <li><a href="#limitations">Current limitations</a></li>
+  <li><a href="#reader">Building a NEXUS File Reader</a>
+  <ul>
+    <li><a href="#readermain">The Main Function</a></li>
+    <li><a href="#readernexus">Deriving From the NEXUS Class</a></li>
+    <li><a href="#readertoken">Deriving From the NxsToken Class</a></li>
+    <li><a href="#readerall">Putting It All Together</a></li>
+    <li><a href="#readerdata">A Sample Data File</a></li>
+  </ul></li>
+  <li><a href="#rollown">Creating Your Own NEXUS Block</a></li>
+  <li><a href="#advice">General Advice</a></li>
+  <li><a href="#bugz">Reporting Bugs</a></li>
+  <li><a href="#whatyoucando">What You Can Do For Me</a></li>
+  <li><a href="#future">Future Of The NCL Project</a></li>
+  <li><a href="#contactinfo">Contact Information</a></li>
+</ul>
+
+<h2><a name="introduction">What is the NCL?</a></h2>
+
+<p><b>Note: This documentation was written for version 2.0</b>.
+We have tried to maintain the API described here, but new APIs are poorly documented.
+See the ChangeLog and the example programs (in particular the "normalizer" example)
+for examples of the usage of the new APIs.
+</p>
+<p>The NEXUS Class Library (NCL) is an integrated collection of C++ classes designed
+  to allow the user to quickly write a program that reads NEXUS-formatted data
+  files. It also allows easy extension of the NEXUS format to include new blocks
+  of your own design.</p>
+<p>A word about the intended audience is in order before we get too far along
+  (no need to waste your time if the NCL will not be helpful to you). The intended
+  audience for both this documentation and the accompanying class library comprises
+  computer programmers who wish to endow their C++ programs with the ability to
+  read NEXUS data files. If you are not a programmer and simply use NEXUS files
+  as a means of inputting data to the programs you use for analyzing your data,
+  the NCL is not something that will be useful to you. The NCL is also not for
+  you if you are a programmer but do not use the C++ language, since the NCL depends
+  heavily on the object oriented programming features built into C++. There is
+  no Java version of the NCL, nor is one planned. This is simply a reflection
+  of the fact that I primarily program in C++ and only have time to write the
+  library once.</p>
+<p>The NEXUS data file format was specified in the publication cited below. Please
+  read this paper for further information about the format specification itself;
+  the documentation for the NCL does not attempt to explain the structure of a
+  NEXUS data file.</p>
+<p>Maddison, D. R., D. L. Swofford, and Wayne P. Maddison. 1997. NEXUS: an extensible
+  file format for systematic information. <i>Systematic Biology</i> 46(4): 590-621.</p>
+<p>The basic goal of the NCL is to provide a relatively easy way to endow a C++
+  program with the ability to read NEXUS data files. The steps necessary to use
+  the NCL to create a bare-bones program that can read a NEXUS data file are simple
+  and few (see the section entitled <a href="#reader">Building a NEXUS File Reader</a>
+  below), and it is hoped that the availability of this class library will encourage
+  the use of the NEXUS format. This will in turn encourage consistency in how
+  programs read NEXUS files and how programs respond to errors in data files.</p>
+<p>There are a large number of special data file formats in use. This places an
+  extra burden on the end user, who must deal with an increasing number of file
+  formats all differing in a number of ways. To convert one's data file to another
+  file format often involves manual manipulation of the data, an activity that
+  is inherently dangerous and probably has resulted in the corruption of many
+  data files. At the very least, the large number of formats in existance has
+  led to a proliferation of data file variants. With many copies of a given data
+  file on a hard disk, each formatted differently for various analysis programs,
+  it becomes very easy to change one (say, correct a datum found to be in error)
+  and then fail to correct the other versions. The NEXUS file format provides
+  a means for keeping one master copy of the data and using it with several programs
+  without modification. The NCL provides a means for encouraging programmers to
+  use the NEXUS file format in future programs they write.</p>
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="download">Obtaining the NCL?</a></h2>
+
+<p>The current version of the NCL is available in the following formats:</p>
+<ul>
+  <li><a href="http://hydrodictyon.eeb.uconn.edu/ncl/ncl-2.0.tar.gz">ncl-2.0.tar.gz</a> (gzipped tar archive)<br /></li>
+  <li><a href="http://hydrodictyon.eeb.uconn.edu/ncl/ncl-2.0.zip">ncl-2.0.zip</a> (zip archive)</li>
+</ul>
+The zip file contains everything in the tar file as well as project files for
+the Microsoft Visual C++ 6 IDE. Other archive formats will be added as they become
+available.
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="characterisitics">Characteristics of the NCL</a></h2>
+
+<h3><a name="portability">Portability</a></h3>
+
+<p>The NCL has been designed to be as portable as possible for a C++ class library.
+  The NCL <i>does</i> make use of the ANSI Standard C++ Library (STL), but use
+  of the STL is now common and should not cause problems for modern compilers/platforms.</p>
+
+<h3><a name="crossplatform">Cross-platform features</a></h3>
+
+<p>I have attempted to create the NCL in such a way that one is not limited in
+  the type of platform targeted. For example, NEXUS files can contain "output
+  comments" that are supposed to be displayed in the output of the program reading
+  the NEXUS file. Such comments are handled automatically by the NCL, and are
+  sent to a virtual function that can be overridden by you in a derived class.
+  This provides a means for you to tailor the output of such comments to the platform
+  of your choice. For example, if you are writing a standard Linux console application
+  (i.e., not a graphical X-Windows application), you might want such output comments
+  to simply be sent to standard output or to an ofstream object. For a graphical
+  Windows, MacIntosh or X-Windows application, you might deem it more user-friendly
+  to pop up a message box with the output comment as the message. This would ensure
+  that the user noticed the output comment. You also have the option of having
+  your program completely ignore such comments in the data file.</p>
+<p>The NCL provides similar hooks for noting the progress in reading the data
+  file. For example, the virtual function  <a href="NxsReader.html#EnteringBlock204">EnteringBlock</a>  is called and
+  provided with the name of the block about to be read. You can override  <a href="NxsReader.html#EnteringBlock204">EnteringBlock</a>
+  in your derived class to allow, for example, a message to be displayed in a
+  status bar at the bottom of your program's main window (in a graphical application)
+  indicating which block is currently being read. Other such virtual functions
+  include  <a href="NxsReader.html#SkippingBlock472">SkippingBlock</a>  (to allow users to be warned that your program
+  is ignoring a block in the data file),  <a href="NxsBlock.html#SkippingCommand171">SkippingCommand</a>  (to allow users
+  to be warned about particular commands being skipped within a block), and  <a href="NxsReader.html#NexusError444">NexusError</a> ,
+  which is the function called whenever anything unexpected happens when reading
+  the file.</p>
+
+<h3><a name="extensibility">Extensibility</a></h3>
+
+<p>The basic tools provided in the NCL allow you to create your own NEXUS blocks
+and use them in your program. This makes it easy to define a private block to
+contain commands that only your program recognizes, allowing your users to run
+your program in batch mode (see the section below entitled <a href="#advice">
+General Advice</a> for more information on this topic).</p>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="limitations">Current limitations</a></h2>
+
+<p>The main current limitation is that the NCL is incomplete. Some standard NEXUS
+  blocks have been provided with this distribution, but because the NEXUS format
+  is so extensive, even some of the standard blocks described in the paper cited
+  above have not been implemented (or have been only incompletely implemented).
+  Here is a summary table showing what has been implemented thus far:</p>
+<table width=600>
+  <tr>
+    <th align="left" valign="bottom">Block<br>
+      <hr>
+    <th align="left" valign="bottom">Current Limitations<br>
+      <hr>
+  <tr>
+    <td valign="top">ASSUMPTIONS
+    <td valign="top">Only TAXSETS, CHARSETS, and EXSETS have been implemented
+      thus far.
+  <tr>
+    <td valign="top">ALLELES
+    <td valign="top">Cannot yet handle transposed MATRIX, and only DATAPOINT=STANDARD
+      is implemented.
+  <tr>
+    <td valign="top">CHARACTERS
+    <td valign="top">Only ITEMS=STATES and STATESFORMAT=STATESPRESENT has been
+      implemented thus far, and DATATYPE=CONTINUOUS has not been implemented.
+  <tr>
+    <td valign="top">DISTANCES
+    <td valign="top">No limitations, completely implemented
+  <tr>
+    <td valign="top">DATA
+    <td valign="top">Since the DATA block is essentially the same as a CHARACTERS
+      block, the same limitations apply.
+  <tr>
+    <td valign="top">TAXA
+    <td valign="top">No limitations, completely implemented
+  <tr>
+    <td valign="top">TREES
+    <td valign="top">No limitations, completely implemented
+</table>
+<p>While the limitations for the CHARACTERS block may seem a bit extreme, this
+  block is nevertheless implemented to the point where almost all existing morphological
+  and molecular data sets can be read.</p>
+<p>The ALLELES block has not yet been used in any program to my knowledge. It
+  is very similar to the GDADATA block used in my program GDA, but differs in
+  requiring NEWPOPS to be specified if a TAXA block does not precede the ALLELES
+  block (this is to make the ALLELES block more like the CHARACTERS block.</p>
+<p>Some recent modifications of the NEXUS format implemented in <a href="http://mesquiteproject.org/mesquite/mesquite.html">Mesquite</a>
+  (e.g. LINK statements in the CHARACTERS block) and <a href="http://morphbank.ebc.uu.se/mrbayes/">MrBayes</a>
+  (e.g. DATATYPE=MIXED in the DATA block) are not supported in the NCL at this
+  time.</p>
+<p>The NCL has been designed to be portable, easy-to-use, and informative in the
+  error messages produced. It will be apparent to anyone who looks very closely
+  at the code that some efficiency (both in executable size and speed) has been
+  sacrificed to meet these goals.</p>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="reader">Building a NEXUS File Reader</a></h2>
+
+<p>This section illustrates how you could build a simple NEXUS file reader application
+  capable of reading in a TAXA and a TREES block. Note that the file <span class="filename">nclsimplest.cpp</span>
+  contains all of the code for this example. To keep things simple, we will just
+  write output to an ofstream object (nothing graphical here).</p>
+<p>As you work through this example, feel free to look into the NCL classes in
+  more detail. A <a href="classes.html">class index</a> as well as a <a href="functions.html">member
+  function index</a> is provided at the <a href="#top">top of this document</a>
+  for quick access.</p>
+
+<h3><a name="readermain">The Main Function</a></h3>
+<pre>
+int main(int argc, char *argv[])
+	{
+	taxa = new NxsTaxaBlock();
+	trees = new NxsTreesBlock(taxa);
+
+	MyReader nexus(argv[1], argv[2]);
+	nexus.Add(taxa);
+	nexus.Add(trees);
+
+	MyToken token(nexus.inf, nexus.outf);
+	nexus.Execute(token);
+
+	taxa->Report(nexus.outf);
+	trees->Report(nexus.outf);
+
+	return 0;
+	}
+</pre>
+<h4>Creating block objects</h4>
+<p>The first two lines of the main function involve the creation of objects corresponding
+  to the two types of NEXUS blocks we want our program to recognize. NxsTaxaBlock
+  is declared in the header file <span class="filename">nxstaxablock.h</span>
+  and defined in the source code file <span class="filename">nxstaxablock.cpp</span>,
+  whereas the NxsTreesBlock class is declared in <span class="filename">nxstreesblock.h</span>
+  and defined in <span class="filename">nxstreesblock.cpp</span>. Note that the
+  NxsTreesBlock constructor requires a reference to an object of type NxsTaxaBlock.
+  This is because the taxa labels in a TREES block should correspond to any taxa
+  previously defined in a TAXA block. If no TAXA block precedes the TREES block,
+  taxon labels defined in the TREES block will be used to populate the TAXA block.
+  In the NCL, any block that defines taxon labels stores this information in the
+  NxsTaxaBlock object, and any block that needs such information requires a reference
+  to the NxsTaxaBlock object in its constructor.</p>
+<h4>Adding the block objects to the NxsReader object</h4>
+<p>The next three lines involve creating a NxsReader object and adding our two
+  block objects to a linked list maintained by the NxsReader object. The MyNexusReader
+  class is derived from the NxsReader class, which is declared in <span class="filename">nxsreader.h</span>
+  and defined in <span class="filename">nxsreader.cpp</span>. Although a NxsReader
+  object can be created and used, you will probably wish to derive a class from
+  it (as I did in this example) and override some of the NxsReader virtual functions,
+  such as  <a href="NxsReader.html#EnteringBlock204">EnteringBlock</a> ,  <a href="NxsReader.html#SkippingBlock472">SkippingBlock</a> , and  <a href="NxsReader.html#NexusError444">NexusError</a>
+  (the NxsReader version of these functions does nothing, and it is important
+  to at least report errors in some way to your program's users).</p>
+<p>The reason the NxsReader object must maintain a list of block ojects is so
+  that it can figure out which one is responsible for reading each block found
+  in the data file. The block objects <span class="variablename">taxa</span> and
+  <span class="variablename">trees</span> have each inherited an <span class="variablename">id</span>
+  variable of type <span class="variablename">char *</span> that stores their
+  block name (i.e., "TAXA" for the TaxaBlock and "TREES" for the TreesBlock).
+  When the  <a href="NxsReader.html#Execute237">Execute</a>  member function encounters a block name, it searches
+  its linked list of block objects until it finds one whose <span class="variablename">id</span>
+  variable is identical to the name of the block encountered. It then calls the
+   <a href="NxsBlock.html#Read129">Read</a>  function of that block object to do the work of reading the block
+  from the data file and storing its contents. It is possible of course that a
+  block name will appear in a data file for which there is no corresponding block
+  object. In this case, the  <a href="NxsReader.html#Execute237">Execute</a>  method calls the  <a href="NxsReader.html#SkippingBlock472">SkippingBlock</a>
+  method to report the fact that it is skipping over the contents of the unknown
+  block.</p>
+<h4>Reading the data file</h4>
+<p>The next two lines create a token object (MyToken is derived from the NxsToken
+  class), and initiate the reading of the NEXUS data file using the  <a href="NxsReader.html#Execute237">Execute</a>
+  function. The input and output files are created within the MyNexusReader class.
+  While this is not required, it facilitates handling messages generated while
+  the data file is being read. The NxsToken class has one virtual member function
+  ( <a href="NxsToken.html#OutputComment133">OutputComment</a> ) which enables you to control how output comments are
+  displayed. The NxsToken version of  <a href="NxsToken.html#OutputComment133">OutputComment</a>  does nothing, so
+  you must derive your own token class from NxsToken and override the  <a href="NxsToken.html#OutputComment133">OutputComment</a>
+  method in order for the output comments in the data file to be displayed. The
+  main function of the NxsToken class is to provide a means for grabbing separate
+  NEXUS tokens (words separated by blank spaces or punctuation) one by one from
+  the data file. Calling the  <a href="NxsToken.html#GetNextToken426">GetNextToken</a>  function reads and stores
+  the next token found in the data file, correctly handling any comments found
+  along the way. This automatic comment handling greatly simplifies reading a
+  NEXUS data file.</p>
+<h4>Reporting on block objects' contents</h4>
+<p>The last two lines call the  <a href="NxsBlock.html#Report149">Report</a>  functions of each of the blocks.
+  This just spits out a summary of any data contained in these objects that has
+  been read from the data file.</p>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h3><a name="readernexus">Deriving From the Nexus Class</a></h3>
+
+<p>Note that the <span class="variablename">ifstream</span> is opened in binary
+  mode. You should always open your input file in binary mode so that the file
+  can be read properly regardless of the platform on which it was created. For
+  example, suppose someone created a NEXUS data file on a MacIntosh and wanted
+  to read it with your program, which is running on a Windows XP machine. Opening
+  the file in binary mode allows the NxsToken object you are using to recognize
+  the newline character in the Mac file as such, even though MacIntosh computers
+  use a different symbol (ASCII 13) to represent the newline character than computers
+  running Windows (which use the ASCII 13, ASCII 10 combination for newlines).</p>
+<pre>
+class MyReader : public NxsReader
+	{
+	public:
+		ifstream inf;
+		ofstream outf;
+
+		MyReader(char *infname, char *outfname) : NxsReader()
+			{
+			inf.open(infname, ios::binary);
+			outf.open(outfname);
+			}
+
+		~MyReader()
+			{
+			inf.close();
+			outf.close();
+			}
+
+	void ExecuteStarting() {}
+	void ExecuteStopping() {}
+
+	bool EnteringBlock(NxsString blockName)
+		{
+		cout << "Reading \"" << blockName << "\" block..." << endl;
+		outf << "Reading \"" << blockName << "\" block..." << endl;
+
+		// Returning true means it is ok to delete any data associated with
+		// blocks of this type read in previously
+		//
+		return true;
+		}
+
+	void SkippingBlock(NxsString blockName)
+		{
+		cout << "Skipping unknown block (" << blockName << ")..." << endl;
+		outf << "Skipping unknown block (" << blockName << ")..." << endl;
+		}
+
+	void SkippingDisabledBlock(NxsString blockName) {}
+
+	void OutputComment(const NxsString &msg)
+		{
+		outf << msg;
+		}
+
+	void NexusError(NxsString msg, file_pos pos, unsigned line, unsigned col)
+		{
+		cerr << endl;
+		cerr << "Error found at line " << line;
+		cerr << ", column " << col;
+		cerr << " (file position " << pos << "):" << endl;
+		cerr << msg << endl;
+
+		outf << endl;
+		outf << "Error found at line " << line;
+		outf << ", column " << col;
+		outf << " (file position " << pos << "):" << endl;
+		outf << msg << endl;
+
+		exit(0);
+		}
+	};
+</pre>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h3><a name="readertoken">Deriving From the NxsToken Class</a></h3>
+
+<p>We derive our own token reader from the NxsToken class in order to display the
+output comments present in the data file (if any). The virtual function  <a href="NxsToken.html#OutputComment133">OutputComment</a>
+in the base class is overridden to accomplish this.</p>
+<pre>
+class MyToken : public NxsToken
+	{
+	public:
+
+		MyToken(istream &is, ostream &os) : out(os), NxsToken(is) {}
+
+		void OutputComment(const NxsString &msg)
+			{
+			cout << msg << endl;
+			out << msg << endl;
+			}
+
+	private:
+		ostream &out;
+	};
+</pre>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h3><a name="readerall">Putting It All Together</a></h3>
+
+<p>Here is the entire program. Note that in order for this to link properly, you
+will need to also compile the following files included with the NCL (and instruct
+your linker to link them into your main executable): <span class="filename">nxsblock.cpp</span>,
+<span class="filename">nxsexception.cpp</span>, <span class="filename">nxsreader.cpp</span>,
+<span class="filename">nxsstring.cpp</span>, <span class="filename">nxstaxablock.cpp</span>,
+<span class="filename">nxstreesblock.cpp</span> and <span class="filename">nxstoken.cpp</span>.</p>
+<pre>
+#include "ncl.h"
+
+NxsTaxaBlock	*taxa	= NULL;
+NxsTreesBlock	*trees	= NULL;
+
+class MyReader : public NxsReader
+	{
+	public:
+		ifstream inf;
+		ofstream outf;
+
+		MyReader(char *infname, char *outfname) : NxsReader()
+			{
+			inf.open(infname, ios::binary);
+			outf.open(outfname);
+			}
+
+		~MyReader()
+			{
+			inf.close();
+			outf.close();
+			}
+
+	void ExecuteStarting() {}
+	void ExecuteStopping() {}
+
+	bool EnteringBlock(NxsString blockName)
+		{
+		cout << "Reading \"" << blockName << "\" block..." << endl;
+		outf << "Reading \"" << blockName << "\" block..." << endl;
+
+		// Returning true means it is ok to delete any data associated with
+		// blocks of this type read in previously
+		//
+		return true;
+		}
+
+	void SkippingBlock(NxsString blockName)
+		{
+		cout << "Skipping unknown block (" << blockName << ")..." << endl;
+		outf << "Skipping unknown block (" << blockName << ")..." << endl;
+		}
+
+	void SkippingDisabledBlock(NxsString blockName) {}
+
+	void OutputComment(const NxsString &msg)
+		{
+		outf << msg;
+		}
+
+	void NexusError(NxsString msg, file_pos pos, unsigned line, unsigned col)
+		{
+		cerr << endl;
+		cerr << "Error found at line " << line;
+		cerr << ", column " << col;
+		cerr << " (file position " << pos << "):" << endl;
+		cerr << msg << endl;
+
+		outf << endl;
+		outf << "Error found at line " << line;
+		outf << ", column " << col;
+		outf << " (file position " << pos << "):" << endl;
+		outf << msg << endl;
+
+		exit(0);
+		}
+	};
+
+class MyToken : public NxsToken
+	{
+	public:
+
+		MyToken(istream &is, ostream &os) : out(os), NxsToken(is) {}
+
+		void OutputComment(const NxsString &msg)
+			{
+			cout << msg << endl;
+			out << msg << endl;
+			}
+
+	private:
+		ostream &out;
+	};
+
+int main(int argc, char *argv[])
+	{
+	taxa = new NxsTaxaBlock();
+	trees = new NxsTreesBlock(taxa);
+
+	MyReader nexus(argv[1], argv[2]);
+	nexus.Add(taxa);
+	nexus.Add(trees);
+
+	MyToken token(nexus.inf, nexus.outf);
+	nexus.Execute(token);
+
+	taxa->Report(nexus.outf);
+	trees->Report(nexus.outf);
+
+	return 0;
+	}
+</pre>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h3><a name="readerdata">A Sample Data File</a></h3>
+
+<p>Here is a sample data file that exercises a lot of the features of the NEXUS
+  file reader we have just created. First, there are both output and regular comments
+  scattered around. Some are between tokens, some occur at the beginning of a
+  token, and still others begin right after a token. Some comments even have nested
+  within them words surrounded by square brackets. There are also blocks in this
+  data file (i.e., the paup block) that are not recognized by the NEXUS file reader
+  we have created. The NEXUS reader handles all of these situations with very
+  minimal effort on your part. Note that you can remove the TAXA block without
+  ill effects because the taxon labels are specified in the TREES block.</p>
+<pre>
+#nexus
+
+[!Output comment before first block]
+
+begin paup; [this is an unknown block]
+	lset nst=2 basefreq=empirical tratio=estimate rates=gamma shape=estimate;
+end;
+
+[!Let's see if we can deal with [nested] comments]
+
+[!
+What happens if we do this!
+]
+
+begin [comment at beginning of token]taxa;
+	dimensions[comment at end of token] ntax=11;
+	taxlabels  [comment between tokens]
+		P._fimbriata
+		'P. robusta'
+		'P. americana'
+		'P. myriophylla'
+		'P. articulata'
+		'P. parksii'
+		'P. gracilis'
+		'P. macrophylla'
+		'P. polygama'
+		'P. basiramia'
+		'P. ciliata'
+		[!output comment in TAXLABELS command]
+	;
+end;
+
+begin trees;
+	translate
+		1  P._fimbriata,
+		2  P._robusta,
+		3  P._americana,
+		4  P._myriophylla,
+		5  P._articulata,
+		6  P._parksii,
+		7  P._polygama,
+		8  P._macrophylla,
+		9  P._gracilis,
+		10  P._basiramia,
+		11  P._ciliata
+	;
+	utree unrooted =      (1,2,((4,3,(5,6)),((7,8),(9,(10,11)))));
+	tree  rooted   =      ((1,2),((4,3,(5,6)),(7,(8,(9,(10,11))))));
+	utree u_to_r   = [&R] ((1,2),((4,3,(5,6)),(7,(8,(9,(10,11))))));
+	tree  r_to_u   = [&U] (1,2,((4,3,(5,6)),((7,8),(9,(10,11)))));
+end;
+</pre>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="rollown">Creating Your Own NEXUS Block</a></h2>
+
+<p>Creating your own NEXUS block involves deriving a class from the NxsBlock base
+  class and overriding the three virtual functions  <a href="NxsBlock.html#Read129">Read</a> ,  <a href="NxsBlock.html#Reset142">Reset</a> ,
+  and  <a href="NxsBlock.html#Report149">Report</a> . Use the files <span class="filename">emptyblock.cpp</span>
+  and <span class="filename">emptyblock.h</span> as templates for your own source
+  code and header files. While creating your own block class is not a complicated
+  endeavor, here are some things to watch out for:</p>
+<ul>
+  <li> Be sure to write the  <a href="NxsBlock.html#Reset142">Reset</a>  function in such a way that all heap
+    memory is cleaned up (deleted). This means whenever you use the <span class="variablename">new</span>
+    keyword to allocate memory for an object that will potentially persist until
+    the  <a href="NxsBlock.html#Reset142">Reset</a>  method is called, you need to put code in the  <a href="NxsBlock.html#Reset142">Reset</a>
+    function to delete it. Also, it is important to delete such objects in the
+    destructor for the class as well.<br /></li>
+  <li> When writing the  <a href="NxsBlock.html#Read129">Read</a>  function, put <span class="variablename">assert</span>
+    macros everywhere you make an assumption, however insignificant this assumption
+    seems at the time of writing. This tremendously speeds up the task of finding
+    bugs when one of your assumptions turns out to not always be true!<br /></li>
+  <li> When writing the  <a href="NxsBlock.html#Read129">Read</a>  function, put in a lot of tests of the
+    form:
+    <pre>
+if (!token.Equals(";"))
+	{
+	errormsg.PrintF("Expecting ';' after TREES block name, but found %s instead.", token.GetTokenAsCStr());
+	throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+</pre>
+    Such checks will give your users some hope of finding where they have made
+    a mistake in constructing their data file. We all know how frustrating it
+    can be to have a program exit with an uninformative error message.</li>
+</ul>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="advice">General Advice</a></h2>
+
+<p>A typical program making use of this library might have the following two general
+  characteristics:</p>
+<ul>
+  <li> The program is structured so that it can be compiled either as a command-line
+    driven, console program or as a graphical application (with a Windows, MacIntosh,
+    or XWindows Graphical User Interface, or GUI)<br /></li>
+  <li> Handles a private NEXUS block that contains commands identical to those
+    that can be entered on the command line, enabling the program to be run in
+    batch mode</li>
+</ul>
+<p>After developing several programs like this, I have come up with the following
+  strategy that makes efficient use of the object-oriented nature of the NCL.
+  I will assume your non-graphical program will be called simply "Phylome" and
+  will read a private NEXUS block named "PHYLOME". I will further assume that
+  the GUI version will be targeted for the Windows platform, and will be colled
+  "PhylomeWin".</p>
+<ul>
+  <li> Create a class (call it PhylomeBase) that performs all the (non-graphical)
+    core functionality of the program. Be careful not to place any GUI code in
+    this class. This class should be derived (publicly) from <span class="makeconspicuous">both</span>
+    the NxsBlock class (this class will encapsulate your program's private NEXUS
+    block) and the NxsReader class (which encapsulates your program's NEXUS file
+    reading capability).<br />
+  </li>
+  <li> In class PhylomeBase, override the NxsBlock virtual functions  <a href="NxsBlock.html#Read129">Read</a> ,
+     <a href="NxsBlock.html#Reset142">Reset</a>  and  <a href="NxsBlock.html#Report149">Report</a>  and any other handler functions needed
+    to process the commands in the private block.<br />
+  </li>
+  <li> In the PhylomeBase constructor, create all the NxsBlock-derived objects
+    needed (i.e., a NxsCharactersBlock object, a NxsTaxaBlock object, etc.) and
+    add these to PhylomeBase using the  <a href="NxsReader.html#Add44">Add</a>  function. Don't forget to
+    Add(this) too so that your program can read the private block. Note that "this"
+    is both a NxsReader object as well as a NxsBlock object, so it is able to
+    add itself to the list of blocks processed upon execution of a NEXUS data
+    file.<br />
+  </li>
+  <li> Now create a class PhylomeWin that handles the Windows GUI interface, deriving
+    publicly from PhylomeBase. In class PhylomeWin, override the NxsReader virtual
+    functions  <a href="NxsReader.html#EnteringBlock204">EnteringBlock</a> ,  <a href="NxsReader.html#SkippingBlock472">SkippingBlock</a> , and  <a href="NxsReader.html#NexusError444">NexusError</a> .
+    For instance, within  <a href="NxsReader.html#NexusError444">NexusError</a> , you might put up a MessageBox
+    telling the user about an error encountered in the data file.<br />
+  </li>
+  <li> For the command-driven version, create a class Phylome that is derived
+    from PhylomeBase, overrides the NxsReader and NxsBlock virtual functions (like
+    its GUI counterpart, PhylomeWin), and provides a means for users to enter
+    commands (you should create a mechanism in PhylomeBase so that you can use
+    the same machinery to process commands typed in from the keyboard as you use
+    to process commands contained in a private block). The <span class="filename">basiccmdline.h</span>
+    and <span class="filename">basiccmdline.cpp</span> files are provided as an
+    example of how to create a basic console program with an interactive command
+    line interface.</li>
+</ul>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="bugz">Reporting Bugs</a></h2>
+
+<p>Please report bugs by email directly to <a href="mailto:paul.lewis at uconn.edu">Paul O. Lewis</a>.
+Please include "NCL bug" in the subject line to ensure that my mail filter catches it.
+Your bug has a better chance of getting fixed if you can attach to your email a NEXUS data file that
+causes the problem you have noticed.</p>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="whatyoucando">What You Can Do For Me</a></h2>
+
+<p>I hope this library is useful to you, and note that it is free software under
+  the <a href="COPYING">Gnu General Public License.</a></p>
+<p>Although you are not obligated in any way to me as a result of using this library
+  to create programs, there are a few things that you can do to help encourage
+  me to continue improving this library. Please make use of any of the following
+  means of support that you feel comfortable with:</p>
+<ul>
+  <li> Cite the NCL! If you publish an announcement of a program of yours that
+    includes the NCL, please acknowledge that your program includes the NCL.<br /></li>
+
+  <li> Advertise the NCL! If your program produces output either on the screen
+    or in the form of a file, mention that your program uses the NCL in your program's
+    output.<br /></li>
+
+  <li> Help me fix bugs. If you discover a bug, please let me know about it so that I can
+    get it fixed. Scroll up to the section entitled "Reporting Bugs" for the (simple)
+    instructions for reporting a bug.</li>
+
+  <li> Give me suggestions. I welcome suggestions for improving the library and
+    making it more convenient to use. I can't guarantee that I will have time
+    to honor all requests, but I will try my best.</li>
+</ul>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="future">Future Of The NCL Project</a></h2>
+
+<p>The current capabilities of the NCL are best illustrated by taking a look at
+  some of the data files that it can successfully read. For example, the NCL can
+  successfully read data files available on the <a href="http://ucjeps.herb.berkeley.edu/bryolab/greenplantpage.html">"Green
+  Plant Phylogeny Research Coordination Group"</a> website, which have a reasonably
+  compicated structure.Included with the NCL are data files containing multiple
+  DISTANCES blocks (<span class="filename">distances.nex</span>) or multiple CHARACTERS
+  blocks (<span class="filename">characters.nex</span>) to illustrate some of
+  the formatting options available with these two NEXUS block types. These examples
+  amply demonstrate the capabilities of the NCL as it now stands, however the
+  NCL will continue to grow as code for recognizing more and more NEXUS blocks
+  are added. I welcome both suggestions for improvement as well as bug reports,
+  of course.</p>
+
+<p><a href="#top">Back to Table of Contents</a></p>
+
+<h2><a name="contactinfo">Contact Information</a></h2>
+
+<p>My current mail and email addresses as well as my phone and fax numbers are
+  given below:</p>
+<pre>
+Paul O. Lewis, Assistant Professor
+Department of Ecology and Evolutionary Biology
+The University of Connecticut
+75 North Eagleville Road, Unit 3043
+Storrs, CT 06269-3043 U.S.A.
+
+Ph:    +1-860-486-2069
+FAX:   +1-860-486-6364 (the departmental fax machine)
+Email: <a href="mailto:paul.lewis at uconn.edu">paul.lewis at uconn.edu</a>
+URL:   <a href="http://lewis.eeb.uconn.edu/lewishome/">http://lewis.eeb.uconn.edu/lewishome/</a>
+</pre>
+
+</body>
+</html>
+
diff --git a/html/v2.1/COPYING.txt b/html/v2.1/COPYING.txt
new file mode 100644
index 0000000..960fe74
--- /dev/null
+++ b/html/v2.1/COPYING.txt
@@ -0,0 +1,280 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
diff --git a/html/v2.1/doxyfile b/html/v2.1/doxyfile
new file mode 100644
index 0000000..69a4a8d
--- /dev/null
+++ b/html/v2.1/doxyfile
@@ -0,0 +1,316 @@
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = NCL
+PROJECT_NUMBER         = 2.1
+OUTPUT_DIRECTORY       = .
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = NO
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        =
+STRIP_FROM_INC_PATH    =
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+QT_AUTOBRIEF           = YES
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = YES
+TAB_SIZE               = 4
+ALIASES                =
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+OPTIMIZE_OUTPUT_VHDL   = NO
+EXTENSION_MAPPING      =
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+SIP_SUPPORT            = NO
+IDL_PROPERTY_SUPPORT   = YES
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+TYPEDEF_HIDES_STRUCT   = NO
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = YES
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = YES
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+FORCE_LOCAL_INCLUDES   = NO
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES       = NO
+SORT_BY_SCOPE_NAME     = YES
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       =
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = NO
+SHOW_FILES             = YES
+SHOW_NAMESPACES        = YES
+FILE_VERSION_FILTER    =
+LAYOUT_FILE            =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = ../../ncl
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.vhd \
+                         *.vhdl
+RECURSIVE              = NO
+EXCLUDE                =
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       =
+EXCLUDE_SYMBOLS        =
+EXAMPLE_PATH           =
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             =
+INPUT_FILTER           =
+FILTER_PATTERNS        =
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = funcdocs
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            =
+HTML_FOOTER            =
+HTML_STYLESHEET        = ncl.css
+HTML_TIMESTAMP         = YES
+HTML_ALIGN_MEMBERS     = YES
+HTML_DYNAMIC_SECTIONS  = NO
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+GENERATE_HTMLHELP      = NO
+CHM_FILE               =
+HHC_LOCATION           =
+GENERATE_CHI           = NO
+CHM_INDEX_ENCODING     =
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+GENERATE_QHP           = NO
+QCH_FILE               =
+QHP_NAMESPACE          = org.doxygen.Project
+QHP_VIRTUAL_FOLDER     = doc
+QHP_CUST_FILTER_NAME   =
+QHP_CUST_FILTER_ATTRS  =
+QHP_SECT_FILTER_ATTRS  =
+QHG_LOCATION           =
+GENERATE_ECLIPSEHELP   = NO
+ECLIPSE_DOC_ID         = org.doxygen.Project
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+USE_INLINE_TREES       = NO
+TREEVIEW_WIDTH         = 250
+FORMULA_FONTSIZE       = 10
+SEARCHENGINE           = YES
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         =
+LATEX_HEADER           =
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    =
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             =
+XML_DTD                =
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           =
+INCLUDE_FILE_PATTERNS  =
+PREDEFINED             =
+EXPAND_AS_DEFINED      =
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES               =
+GENERATE_TAGFILE       =
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+MSCGEN_PATH            =
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+DOT_FONTNAME           = FreeSans
+DOT_FONTSIZE           = 10
+DOT_FONTPATH           =
+CLASS_GRAPH            = NO
+COLLABORATION_GRAPH    = NO
+GROUP_GRAPHS           = NO
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = NO
+INCLUDED_BY_GRAPH      = NO
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               =
+DOTFILE_DIRS           =
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
diff --git a/html/v2.1/footer.html b/html/v2.1/footer.html
new file mode 100644
index 0000000..c19480e
--- /dev/null
+++ b/html/v2.1/footer.html
@@ -0,0 +1,18 @@
+<div class="linkstrip">
+<a href="http://lewis.eeb.uconn.edu/lewishome/">Lewis Labs</a> ~
+<a href="http://www.eeb.uconn.edu/">EEB</a> ~
+<a href="http://www.uconn.edu/">UConn</a>
+<a href="http://phylo.bio.ku.edu/">Holder Lab</a> ~
+<a href="http://www2.ku.edu/~eeb/">EEB</a> ~
+<a href="http://www.ku.edu/">KU</a>
+</div>
+
+<p> </p>
+<p class="footer">© 2003 Paul O. Lewis</p>
+<p class="footer">Comments and suggestions are welcome, and should be directed to
+<a href="mailto:mtholder at ku.edu">Mark T. Holder</a> or <a href="mailto:paul.lewis at uconn.edu">Paul O. Lewis</a></p>
+<p class="footer"><?php echo "Last modified: ".date( "F d Y H:i:s.", getlastmod() ); ?></p>
+<p class="footer">
+  <a href="http://validator.w3.org/check/referer"><img style="border:0;width:88px;height:31px" src="http://hydrodictyon.eeb.uconn.edu/people/images/valid-html401.gif" alt="Valid HTML 4.01!"></a>
+  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img style="border:0;width:88px;height:31px" src="http://hydrodictyon.eeb.uconn.edu/people/images/valid-css.gif" alt="Valid CSS!"></a>
+  </p>
diff --git a/html/v2.1/funcdocs/simpleNCLClient/Makefile b/html/v2.1/funcdocs/simpleNCLClient/Makefile
new file mode 100644
index 0000000..00471e9
--- /dev/null
+++ b/html/v2.1/funcdocs/simpleNCLClient/Makefile
@@ -0,0 +1,63 @@
+# A simple (but heavily commented) Makefile for program "simpleNCLClient" that
+#	depends on NCL. The source code for this client application should be stored
+#	as "simpleNCLClient.cpp" in the same directory as this Makefile.
+
+# This Makefile can be used after you have built and installed NCL.
+# NCL_INSTALL_DIR should be the directory that you specified as the
+#	--prefix argument to NCL's configure script.  By default this
+#	is /usr/local in *NIX systems.
+# If NCL_INSTALL_DIR is not in your shell's environment, then you'll have
+#	to define it. With something like the next line.
+# NCL_INSTALL_DIR = /usr/local/lib
+
+# C preprocessor flags to include the parent of NCL's intsalled header directory.
+CPP_FLAGS = -I$(NCL_INSTALL_DIR)/include
+
+# linker flags to include the directory that hold libncl.
+LD_FLAGS = -L$(NCL_INSTALL_DIR)/lib/ncl
+
+# linker to list the ncl library as a library to include
+LIBS=-lncl
+
+# we'll use CXX is to refer to the C++ compiler
+CXX=g++
+
+# list all of the object files that are linked together to make our executable
+objects = simpleNCLClient.o
+
+# We could list headers here as DEPS so the compiler will rebuild our executable
+# 	whenever the headers are changed.
+DEPS = simpleNCLClient.h
+
+
+# A rule for how to build simpleNCLClient.
+# After the colon on the first line is a list of things that simpleNCLClient
+# 	depends on.
+# The second line (and any other indented lines) tell make how to build
+# 	simpleNCLClient.  This is where we use our LD_FLAGS and LIBS
+simpleNCLClient: $(objects)
+	$(CXX) -o $@ $^ $(LD_FLAGS) $(LIBS)
+
+
+# A rule for how to build any .o file.
+# %.o in the target name is a makefile wildcard for any file ending in .o
+# The %.cpp means that XYZ.o depends on XYZ.cpp
+# 	whatever is in DEPS is also noted as a dependency
+# The first step in the rule is a shell if statement that will generate an
+# 	error if you do not have NCL_INSTALL_DIR defined (by uncommenting
+# 	line 11 above or in your shell's env).
+# The syntax $@ in the rule indicates "the target of this rule" (what the
+# 	is trying to create, which is "simpleNCLClient.o" in this case)
+# The $< syntax means the first dependency (the .cpp file).
+# Note that this is where we use our CPP_FLAGS
+%.o: %.cpp $(DEPS)
+	if test -z $(NCL_INSTALL_DIR) ; then echo "NCL_INSTALL_DIR must be set. See comments in the Makefile." && exit 1; fi
+	$(CXX) -c -o $@  $<	$(CPP_FLAGS)
+
+# This target without dependencies can only be invoked by specifying it as the
+# 	target ("make clean" from the command line).
+# rm removes files from the filesystem
+# The -f arg to rm tells rm to not complain even if the files do not exist.
+# *.o is shell wildcard for any file that ends in .o
+clean:
+	rm -f *.o simpleNCLClient
diff --git a/html/v2.1/funcdocs/simpleNCLClient/simpleNCLClient.cpp b/html/v2.1/funcdocs/simpleNCLClient/simpleNCLClient.cpp
new file mode 100644
index 0000000..6112a4e
--- /dev/null
+++ b/html/v2.1/funcdocs/simpleNCLClient/simpleNCLClient.cpp
@@ -0,0 +1,350 @@
+#include<string>
+#include<vector>
+#include<cassert>
+#include "ncl/nxsmultiformat.h"
+
+/*!
+	Fills the `matrix` with a new encoding for the data.
+
+	This demonstrates how you can access the internal representation of the class
+		NxsCharactersBlock (the v2.1 character querying API)
+
+	In this simple example, we reject any characters block that does not have
+		a simple unadulterated.
+
+	For simplicity's sake, we will also convert any missing data, and gaps
+		to the binary code 1111 (0xF in hexadecimal) which indicates that all
+		four bases could be found.  This is easy to do because the "fundamental"
+		states will be the ones with state codes [0,nstates), in other words 0,1,2,3 will be
+		the codes for A, C, G, and T in DNA.  missing and gaps will be the only valid
+		states with negative codes, and all ambiguity codes will will have a value
+		>= nstates.
+
+	We'll recode the data using the following mapping in which each base represents
+		a different bit:
+		1 <-> A,
+		2 <-> C
+		4 <-> G
+		8 <-> T
+
+*/
+void convertToBitsForMatrix(NCL_COULD_BE_CONST NxsCharactersBlock *charBlock, std::vector<std::vector<char> > * converted)
+{
+	if (converted == 0L)
+		return;
+	converted->clear();
+	if (charBlock == 0L)
+		return;
+	const NxsDiscreteDatatypeMapper *mapper = charBlock->GetDatatypeMapperForChar(0);
+	const bool hasGaps = charBlock->GetGapSymbol() != '\0';
+
+	NxsDiscreteDatatypeMapper defaultMapper(NxsCharactersBlock::dna, hasGaps);
+	if (!mapper->IsSemanticallyEquivalent(defaultMapper))
+		{
+		std::string errormsg = "The convertToBitsForMatrix example function only supports DNA datatypes without any new combinations of states";
+		throw NxsException(errormsg);
+		}
+
+	/* First we'll create a vector that maps NCL's state codes to the appropriate
+	 binary encoding.
+
+	*/
+	std::vector<char> stateCodeToBinaryMapping;
+	const NxsDiscreteStateCell highestLegalStateCode = mapper->GetHighestStateCode();
+	assert(highestLegalStateCode < 15);// there are 15 possible states and combinations of states for dna
+	stateCodeToBinaryMapping.resize(highestLegalStateCode);
+
+	/*
+	Let's start by recording the "fundamental" (unambiguous) states which are
+	 guaranteed by NCL's api to be the state codes from 0 up to number_of_states - 1
+	*/
+	NxsDiscreteStateCell nclCode = mapper->GetStateCodeStored('A');
+	assert(nclCode >= 0 && nclCode < 4);
+	std::cerr << "Adding fundamental state "  << nclCode << " 1\n";
+	stateCodeToBinaryMapping[nclCode] = (char) 1; // ncl code for A goes to 1 in our binary coding...
+
+	nclCode = mapper->GetStateCodeStored('C');
+	assert(nclCode >= 0 && nclCode < 4);
+	std::cerr << "Adding fundamental state "  << nclCode << " 2\n";
+	stateCodeToBinaryMapping[nclCode] = (char) 2; // ncl code for C goes to 2 in our binary coding...
+
+	nclCode = mapper->GetStateCodeStored('G');
+	assert(nclCode >= 0 && nclCode < 4);
+	std::cerr << "Adding fundamental state "  << nclCode << " 4\n";
+	stateCodeToBinaryMapping[nclCode] = (char) 4; // ncl code for G goes to 4 in our binary coding...
+
+	nclCode = mapper->GetStateCodeStored('T');
+	assert(nclCode >= 0 && nclCode < 4);
+	std::cerr << "Adding fundamental state "  << nclCode << " 8\n";
+	stateCodeToBinaryMapping[nclCode] = (char) 8; // ncl code for T goes to 8 in our binary coding
+
+	std::cerr << "Adding state sets up to  "  << highestLegalStateCode << "\n";
+	/* Now we can deal with all of the ambiguity state codes by producing the binary
+		code that is the bitwise union of all states.  We'll walk through all of the number_of_states .. highest state code
+		and register the conversion of NCL code to our representation.
+	*/
+	for (NxsDiscreteStateCell currNCLCode = 4; currNCLCode <= highestLegalStateCode; ++currNCLCode)
+		{
+		const std::set<NxsDiscreteStateCell> & stateSet = mapper->GetStateSetForCode(currNCLCode);
+		char unionOfStateBits = 0;
+		std::set<NxsDiscreteStateCell>::const_iterator stateSetIt = stateSet.begin();
+		for (; stateSetIt != stateSet.end(); ++stateSetIt)
+			{
+			const NxsDiscreteStateCell fundamentalStateCode = *stateSetIt;
+			assert(fundamentalStateCode >= 0 && fundamentalStateCode < 4); // all of the states in the state set are the "fundamental" states -- never codes for sets of states
+												 // hence we can assume that they will already be added to stateCodeToBinaryMapping
+												 // when we added A,C,G,and T above.
+			char bitForCurrentState = stateCodeToBinaryMapping[(int) fundamentalStateCode];
+			unionOfStateBits |= bitForCurrentState;
+			}
+		stateCodeToBinaryMapping[currNCLCode] = unionOfStateBits;
+		std::cerr << "Adding state set" << currNCLCode <<  ' ' << highestLegalStateCode << "\n";
+
+		}
+
+	std::cerr << "stateCodeToBinaryMapping is ";
+	for (unsigned i = 0; i < highestLegalStateCode; ++i)
+		std::cerr << i << ' ' << (int) stateCodeToBinaryMapping[i] << std::endl;
+
+	/* Now we are ready to convert each row of the matrix to the binary encoding
+
+		Because the matrices can be large, we'll try to avoid creating a vector of
+		binary codes and pushing it onto the `converted` vector (that involves copying).
+
+		Instead we will:
+			1. resize `converted` to the correct size (so that it does not have to reallocate during the subsequent operations).
+			2. get a reference to the vector that makes up each row.
+			3. resize that row.
+			4. add the codes to that row.
+	*/
+	const char allBasesBinaryCode = 15; // the union of the bits for A, C, G, and T is 15
+	const unsigned nc = charBlock->GetNCharTotal();
+	const unsigned nt = charBlock->GetNTaxTotal();
+	converted->resize(nt); // create the nt rows in the converted matrix.
+	for (unsigned taxIndex = 0; taxIndex < nt; ++taxIndex)
+		{
+		std::vector<char> & binaryRow = (*converted)[taxIndex];  // make sure to store the reference here, so we don't make a copy of the row.
+		binaryRow.reserve(nc); // make the row alloc enough space
+		const NxsDiscreteStateRow & nclRow = charBlock->GetDiscreteMatrixRow(taxIndex);
+		NxsDiscreteStateRow::const_iterator nclCodeIt = nclRow.begin();
+		for (; nclCodeIt != nclRow.end(); ++nclCodeIt)
+			{
+			const NxsDiscreteStateCell & currNCLStateCode = *nclCodeIt;
+			if (currNCLStateCode < 0)
+				{ // missing or gap. We could check which one by testing for whether
+					// the code is NXS_MISSING_CODE or NXS_GAP_STATE_CODE
+					// since this scrip maps both to the allBasesCode (15)
+					// we won't bother checking here.
+				binaryRow.push_back(allBasesBinaryCode);
+				}
+			else
+				{
+				assert(currNCLStateCode <= highestLegalStateCode); // this constraint is guaranteed by NCL's API
+				const char currBinaryCode = stateCodeToBinaryMapping[currNCLStateCode];
+				binaryRow.push_back(currBinaryCode);
+				}
+			}
+		}
+
+	/* That's it!
+		We passed in the converted matrix as pointer so that we would not have to
+		copy it on return.
+
+		We created a mapping of NCL's state codes to our own.
+		Becaus we know that NCL's codes will be small integers, then a vector
+		is more efficient than a std::map<NxsDiscreteStateCell, char> (but a std::map would
+		have worked, too).
+
+		Specifically we know that:
+
+		-2 for NXS_GAP_STATE_CODE,
+		-1 for NXS_MISSING_CODE,
+		0 up to (number_of_states - 1) for the "fundamental" states (and they will be in the
+			order of the symbols string)
+		number_of_states up to and including highestLegalStateCode for ambiguous states
+
+		So we can write conversion code that exploits these facts
+	*/
+
+
+
+}
+
+
+/*!
+	writes the contents of the matrix out to `out' as NEXUS.
+
+
+	This demonstrates the "old" (the v2.0 character querying API).
+
+*/
+void printMatrixWithoutLabels(std::ostream & out, NCL_COULD_BE_CONST  NxsCharactersBlock *cb)
+{
+	const char missingChar = cb->GetMissingSymbol();
+	char gapChar = cb->GetGapSymbol();
+	const unsigned nc = cb->GetNCharTotal();
+	const unsigned nt = cb->GetNTaxTotal();
+	for (unsigned t = 0; t < nt; ++t)
+		{
+		for (unsigned c = 0; c < nc; ++c)
+			{
+			if (cb->IsMissingState(t, c))
+				out << missingChar;
+			else if (cb->IsGapState(t, c))
+				{
+				assert (gapChar != '\0'); //matrices withouth gapSymbols should not have cells with gaps!
+				out << '-';
+				}
+			else
+				{
+				const unsigned ns = cb->GetNumStates(t, c);
+				if (ns == 1)
+					{
+					out << cb->GetState(t, c, 0);
+					}
+				else
+					{
+					const bool isPoly = cb->IsPolymorphic(t, c);
+					if (isPoly)
+						out << '(';
+					else
+						out << '{';
+					for (unsigned s = 0; s < ns; ++s)
+						out << cb->GetState(t, c, s);
+					if (isPoly)
+						out << ')';
+					else
+						out << '}';
+					}
+				}
+			}
+		out<< '\n';
+		}
+}
+
+
+
+int main(int argc, char * argv[])
+{
+	/* Usually it is easiest to surround interactions with NCL in a try block
+		that catches NxsException instances.
+		Reading files can certainly generate these errors, but even queries
+		after the parse can result in these exceptions.
+	*/
+	try {
+		MultiFormatReader nexusReader(-1, NxsReader::WARNINGS_TO_STDERR);
+
+		/* See discussion in "Making NCL less strict" */
+		NxsCharactersBlock * charsB = nexusReader.GetCharactersBlockTemplate();
+		NxsDataBlock * dataB = nexusReader.GetDataBlockTemplate();
+		charsB->SetAllowAugmentingOfSequenceSymbols(true);
+		dataB->SetAllowAugmentingOfSequenceSymbols(true);
+
+		NxsTreesBlock * treesB = nexusReader.GetTreesBlockTemplate();
+		assert(treesB);
+		treesB->SetAllowImplicitNames(true);
+
+		nexusReader.cullIdenticalTaxaBlocks(true);
+
+		/* End of code related to the section on making NCL less strict */
+
+
+		for (int argn = 1; argn < argc; ++argn)
+			{
+			std::cerr << "Reading " << argv[argn] << "\n";
+			try {
+				nexusReader.DemoteBlocks();
+				nexusReader.ReadFilepath(argv[argn], MultiFormatReader::NEXUS_FORMAT);
+				}
+			catch(const NxsException &x)
+				{
+				std::cerr << "Error:\n " << x.msg << std::endl;
+				if (x.line > 0 || x.pos > 0)
+					std::cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << std::endl;
+				return 2;
+				}
+			catch(...)
+				{
+				nexusReader.DeleteBlocksFromFactories();
+				std::cerr << "Exiting with an unknown error" << std::endl;
+				return 1;
+				}
+
+			/* See discussion in "Getting information out of NCL" */
+
+			int numTaxaBlocks = nexusReader.GetNumTaxaBlocks();
+			std::cout << numTaxaBlocks << " TAXA block(s) read.\n";
+			for (int i = 0; i < numTaxaBlocks; ++i)
+				{
+				NxsTaxaBlock * taxaBlock = nexusReader.GetTaxaBlock(i);
+				std::string taxaBlockTitle = taxaBlock->GetTitle();
+				std::cout << "Taxa block index " << i << " has the Title \"" << taxaBlockTitle << "\"\n";
+
+				const unsigned nCharBlocks = nexusReader.GetNumCharactersBlocks(taxaBlock);
+				std::cout  <<  nCharBlocks << " CHARACTERS/DATA block(s) refer to this TAXA block\n";
+				for (unsigned j = 0; j < nCharBlocks; ++j)
+					{
+					NCL_COULD_BE_CONST  NxsCharactersBlock * charBlock = nexusReader.GetCharactersBlock(taxaBlock, j);
+					std::string charBlockTitle = charBlock->GetTitle();
+					std::cout << "Char block index " << j << " has the Title \"" << charBlockTitle << "\"\n";
+
+					/* call a function that uses the older 2.0 API to access data from the character block */
+
+					std::cout << "Here is its matrix (without taxon labels):\n";
+					printMatrixWithoutLabels(std::cout, charBlock);
+					std::vector<const NxsDiscreteDatatypeMapper *> mappers = charBlock->GetAllDatatypeMappers();
+					std::cout << "The charblock uses " << mappers.size() << " NxsDiscreteDatatypeMapper(s):\n";
+					for (std::vector<const NxsDiscreteDatatypeMapper *>::const_iterator mIt = mappers.begin(); mIt != mappers.end(); ++mIt)
+						{
+						std::cout << "Mapper description:\n";
+						(*mIt)->DebugWriteMapperFields(std::cout);
+						}
+
+					/* call a function that uses the new 2.1 API to convert the matrix to a binary encoding */
+					std::vector<std::vector<char> > convertedMatrix;
+					std::cout << "The matrix as binary codes:\n";
+					convertToBitsForMatrix(charBlock, &convertedMatrix);
+					for (unsigned taxIndex = 0; taxIndex < convertedMatrix.size(); ++taxIndex)
+						{
+						std::cout << taxaBlock->GetTaxonLabel(taxIndex) << " ==> ";
+						const std::vector<char> & binaryCodedRow = convertedMatrix[taxIndex];
+						std::vector<char>::const_iterator bcIt = binaryCodedRow.begin();
+						for (; bcIt != binaryCodedRow.end(); ++bcIt)
+							{
+							std::cout << ' ' <<(int) *bcIt;
+							}
+						std::cout << '\n';
+						}
+					}
+
+
+				const unsigned nTreesBlocks = nexusReader.GetNumTreesBlocks(taxaBlock);
+				std::cout  <<  nTreesBlocks << " Trees block(s) refer to this TAXA block\n";
+				for (unsigned j = 0; j < nTreesBlocks; ++j)
+					{
+					const NxsTreesBlock * treeBlock = nexusReader.GetTreesBlock(taxaBlock, j);
+					std::string treesBlockTitle = treeBlock->GetTitle();
+					std::cout << "Taxa block index " << j << " has the Title \"" << treesBlockTitle << "\"\n";
+					}
+				}
+
+				/* End of code related to "Getting information out of NCL" */
+
+			}
+
+		nexusReader.DeleteBlocksFromFactories();
+	}
+	catch(const NxsException &x)
+		{
+		std::cerr << "Error:\n " << x.msg << std::endl;
+		if (x.line > 0 || x.pos > 0)
+			std::cerr << "at line " << x.line << ", column (approximately) " << x.col << " (and file position "<< x.pos << ")" << std::endl;
+		return 2;
+		}
+	catch(...)
+		{
+		std::cerr << "Exiting with an unknown error" << std::endl;
+		return 1;
+		}
+	return 0;
+}
diff --git a/html/v2.1/index.html b/html/v2.1/index.html
new file mode 100644
index 0000000..56037eb
--- /dev/null
+++ b/html/v2.1/index.html
@@ -0,0 +1,696 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+	<title>NEXUS CLASS LIBRARY: Home Page</title> <style type="text/css">
+<!--
+ at import url(ncl.css);
+-->
+</style>
+</head>
+<body>
+<table border="1" width="100%">
+	<tr>
+		<td>
+			<table border="0" width="100%">
+				<tr>
+					<td align="left" class="classy">
+						NEXUS CLASS LIBRARY
+					</td>
+					<td align="right" class="classy">
+						<a href="index.html">home</a> | <a href="classes.html">classes</a> | <a href="functions.html">functions</a>
+					</td>
+				</tr>
+			</table>
+		</td>
+	</tr>
+</table>
+<h1><a name="top">Nexus Class Library (version 2.1)</a></h1> <h3>by Paul O. Lewis and Mark T. Holder</h3>
+<p>
+	For information on the v2.0 API see <a href="../v2.0index.html">v2.0index.html</a>. The documentation below reflects usage that will only work with version 2.1. Version 2.1 is stable.
+</p>
+<h2>Contents</h2>
+<ul>
+	<li>
+		<a href="#introduction">What is the NCL?</a>
+	</li>
+	<li>
+		<a href="#whyDiff">Why is version 2.1 so different from version 2.0?</a>
+	</li>
+	<ul>
+		<li><a href="#backward">Backward compatibility</a></li>
+		<li><a href="#v2.2">Version 2.2</a></li>
+	</ul>
+	<li><a href="COPYING.txt">License</a></li>
+	<li><a href="COPYING.txt">Lack of Warranty</a></li>
+	<li>
+		<a href="#download">Obtaining the NCL</a>
+	</li>
+	<li>
+		<a href="#characterisitics">Characteristics of the NCL</a>
+		<ul>
+			<li>
+				<a href="#portability">Portability</a>
+			</li>
+			<li>
+				<a href="#crossplatform">Cross-platform features</a>
+			</li>
+			<li>
+				<a href="#extensibility">Extensibility</a>
+			</li>
+		</ul>
+	</li>
+	<li><a href="#detailed">Detailed v2.1 documentation</a></li>
+	<!--li>
+		<a href="#limitations">Current limitations</a>
+	</li>
+	<li>
+		<a href="#reader">Building a NEXUS File Reader</a>
+		<ul>
+			<li>
+				<a href="#readermain">The Main Function</a>
+			</li>
+			<li>
+				<a href="#readernexus">Deriving From the NEXUS Class</a>
+			</li>
+			<li>
+				<a href="#readertoken">Deriving From the NxsToken Class</a>
+			</li>
+			<li>
+				<a href="#readerall">Putting It All Together</a>
+			</li>
+			<li>
+				<a href="#readerdata">A Sample Data File</a>
+			</li>
+		</ul>
+	</li>
+	<li>
+		<a href="#rollown">Creating Your Own NEXUS Block</a>
+	</li>
+	<li>
+		<a href="#advice">General Advice</a>
+	</li>
+	<li>
+		<a href="#bugz">Reporting Bugs</a>
+	</li>
+	<li>
+		<a href="#whatyoucando">What You Can Do For Me</a>
+	</li-->
+	<li>
+		<a href="#future">Future Of The NCL Project</a>
+	</li>
+	<li>
+		<a href="#contactinfo">Contact Information</a>
+	</li>
+</ul>
+<h2><a name="introduction">What is the NCL?</a></h2>
+<p>
+	The NEXUS Class Library (NCL) is an integrated collection of C++ classes designed to parse NEXUS-formatted data files. The library has recently been extended to support several simple file-formats (PHYLIP, relaxed PHYLIP, and FASTA).
+	NCL does not diagnose the file format, but if you configure a parser to read several formats, then you will be able to parse multiple formats and extract the data from NCL's data structures using the same API.
+</p>
+<p>
+	This documentation is written for C++ programmers.
+</p>
+<p>
+	The NEXUS data file format was specified in the publication cited below (<a href="http://sysbio.oxfordjournals.org/cgi/reprint/46/4/590.pdf">this is a link to pdf of that paper</a>).
+	Please read this paper for further information about the format specification itself; the documentation for the NCL does not attempt to explain the structure of a NEXUS data file.
+</p>
+<p>
+	Maddison, D. R., D. L. Swofford, and Wayne P. Maddison. 1997. NEXUS: an extensible file format for systematic information. <i>Systematic Biology</i> 46(4): 590-621.
+</p>
+<h2><a name="whyDiff">Why is version 2.1 so different from version 2.0?</a></h2>
+	<p>
+	Version 2.1 extends the functionality significantly by allowing NCL to parse files that use extended forms of NEXUS.
+	Both Mesquite and MrBayes rely on extensions to NEXUS.
+	Particularly difficult to handle are Mesquite's support for multiple blocks of the same type within a file (accompanied by linking blocks by title).
+	</p>
+	<p>
+	Version 2.0 of NCL followed a model of creating a NxsReader object and adding NxsBlock objects which handle parsing of particular types of NEXUS content.
+	Client code would typically inherit from base classes such as NxsCharactersBlock, or would extract the information when a block was completely read.
+	The NxsBlock instance would be reset (by NxsBlock::Reset call) before it was asked to handle another block.
+	</p>
+	<p>Unfortunately, not all NEXUS blocks are autonomous (for example commands in an ASSUMPTIONS block may rely on information in a CHARACTERS block).
+	Combining inter-block dependencies with the need to store information from multiple blocks of the same type means that NCL's version 2.0 API can be quite cumbersome.
+	To read a file with a single instance of a NxsCharactersBlock, the client code must carefully offload all of the information in a block before allowing parsing to proceed to the next block; later references between blocks have to be corrected so that blocks refer to the new location of the
+	information (rather than the NxsBlock instance that originally held the data).
+	</p>
+	<p>A more natural design pattern for processing files which may have multiple blocks of the same type is to use a factory method.
+	Users of NCL v2.1 can register NxsBlock factories with a NxsReader, and parse an entire file before having to pull the parsed information from the
+	blocks.</p>
+<h3><a name="backward">Backward compatibility</a></h3>
+	<p>Despite several fundamental changes in the implementation of the library, we strive to keep NCL v2.1 backward compatible with version 2.0.
+	A programmer that relied on version 2.0 should still work.
+	If you discover that your client code works with version 2.0 of NCL, but not 2.1 please let us know.</p>
+<h3><a name="v2.2">Version 2.2</a></h3>
+	<p>The svn branch for version 2.2 is very similar to 2.1.
+	It only contains changes necessary to allow NCL to be callable from other
+	languages via <a href="http://www.swig.org/">SWIG</a>.
+	Some of the changes needed to ensure this were not backward-compatible.
+	So they were added to branch 2.2.
+	</p>
+	<p>C++ programmers should probably use 2.1 (although their code will almost
+	certainly work on v2.2 as well)</p>
+
+
+<h2><a name="download">Obtaining the NCL?</a></h2>
+<p>
+	The best link to use to get the latest (stable) version of NCL is from the <a href="http://sourceforge.net/projects/ncl/">sourceforge NCL project page.</a></p>
+<h2><a name="characterisitics">Characteristics of the NCL</a></h2> <h3><a name="portability">Portability</a></h3>
+<p>
+	The NCL has been designed to be as portable as possible for a C++ class library.
+	Please let us know if you find a (reasonably modern) compiler that does not accept NCL.
+</p>
+<h3><a name="crossplatform">Cross-platform features</a></h3>
+<p>
+	NCL does not rely on any external libraries.
+	There are hooks (such as NxsToken::OutputComment) which all messages intended for the user to be displayed in the appropriate form for your application. Thus, it is possible to create an application that does not write to standard output or to write standard input/output applications with NCL.
+</p>
+<h3><a name="extensibility">Extensibility</a></h3>
+<p>
+	The basic tools provided in the NCL allow you to create your own NEXUS blocks and use them in your program. This makes it easy to define a private block to contain commands that only your program recognizes, allowing your users to run your program in batch mode (see the section below entitled <a href="#advice"> General Advice</a> for more information on this topic).
+</p>
+<h2><a name="detailed">Detailed v2.1 documentation</a></h2>
+<p>
+Mark Holder is currently documenting v2.1 (after he changed a lot of code without updating the comments).
+
+</p>
+<p>
+The <a href="./funcdocs/index.html#basicAPI">current API documentation</a> is generated
+from doxygen, but also includes high level discussion about recommended usage patterns.
+</p>
+
+<!--h2><a name="limitations">Current limitations</a></h2>
+<p>
+	The main current limitation is that the NCL is incomplete. Some standard NEXUS blocks have been provided with this distribution, but because the NEXUS format is so extensive, even some of the standard blocks described in the paper cited above have not been implemented (or have been only incompletely implemented). Here is a summary table showing what has been implemented thus far:
+</p>
+<table width="600">
+	<tr>
+		<th align="left" valign="bottom">
+			Block
+			<br>
+			<hr>
+		<th align="left" valign="bottom">
+			Current Limitations
+			<br>
+			<hr>
+	<tr>
+		<td valign="top">
+			ASSUMPTIONS
+		<td valign="top">
+			Only TAXSETS, CHARSETS, and EXSETS have been implemented thus far.
+	<tr>
+		<td valign="top">
+			ALLELES
+		<td valign="top">
+			Cannot yet handle transposed MATRIX, and only DATAPOINT=STANDARD is implemented.
+	<tr>
+		<td valign="top">
+			CHARACTERS
+		<td valign="top">
+			Only ITEMS=STATES and STATESFORMAT=STATESPRESENT has been implemented thus far, and DATATYPE=CONTINUOUS has not been implemented.
+	<tr>
+		<td valign="top">
+			DISTANCES
+		<td valign="top">
+			No limitations, completely implemented
+	<tr>
+		<td valign="top">
+			DATA
+		<td valign="top">
+			Since the DATA block is essentially the same as a CHARACTERS block, the same limitations apply.
+	<tr>
+		<td valign="top">
+			TAXA
+		<td valign="top">
+			No limitations, completely implemented
+	<tr>
+		<td valign="top">
+			TREES
+		<td valign="top">
+			No limitations, completely implemented
+</table>
+<p>
+	While the limitations for the CHARACTERS block may seem a bit extreme, this block is nevertheless implemented to the point where almost all existing morphological and molecular data sets can be read.
+</p>
+<p>
+	The ALLELES block has not yet been used in any program to my knowledge. It is very similar to the GDADATA block used in my program GDA, but differs in requiring NEWPOPS to be specified if a TAXA block does not precede the ALLELES block (this is to make the ALLELES block more like the CHARACTERS block.
+</p>
+<p>
+	Some recent modifications of the NEXUS format implemented in <a href="http://mesquiteproject.org/mesquite/mesquite.html">Mesquite</a> (e.g. LINK statements in the CHARACTERS block) and <a href="http://morphbank.ebc.uu.se/mrbayes/">MrBayes</a> (e.g. DATATYPE=MIXED in the DATA block) are not supported in the NCL at this time.
+</p>
+<p>
+	The NCL has been designed to be portable, easy-to-use, and informative in the error messages produced. It will be apparent to anyone who looks very closely at the code that some efficiency (both in executable size and speed) has been sacrificed to meet these goals.
+</p>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h2><a name="reader">Building a NEXUS File Reader</a></h2>
+<p>
+	This section illustrates how you could build a simple NEXUS file reader application capable of reading in a TAXA and a TREES block. Note that the file <span class="filename">nclsimplest.cpp</span> contains all of the code for this example. To keep things simple, we will just write output to an ofstream object (nothing graphical here).
+</p>
+<p>
+	As you work through this example, feel free to look into the NCL classes in more detail. A <a href="classes.html">class index</a> as well as a <a href="functions.html">member function index</a> is provided at the <a href="#top">top of this document</a> for quick access.
+</p>
+<h3><a name="readermain">The Main Function</a></h3> <pre>
+int main(int argc, char *argv[])
+	{
+	taxa = new NxsTaxaBlock();
+	trees = new NxsTreesBlock(taxa);
+
+	MyReader nexus(argv[1], argv[2]);
+	nexus.Add(taxa);
+	nexus.Add(trees);
+
+	MyToken token(nexus.inf, nexus.outf);
+	nexus.Execute(token);
+
+	taxa->Report(nexus.outf);
+	trees->Report(nexus.outf);
+
+	return 0;
+	}
+</pre> <h4>Creating block objects</h4>
+<p>
+	The first two lines of the main function involve the creation of objects corresponding to the two types of NEXUS blocks we want our program to recognize. NxsTaxaBlock is declared in the header file <span class="filename">nxstaxablock.h</span> and defined in the source code file <span class="filename">nxstaxablock.cpp</span>, whereas the NxsTreesBlock class is declared in <span class="filename">nxstreesblock.h</span> and defined in <span class="filename">nxstreesblock.cpp</span>. Note th [...]
+</p>
+<h4>Adding the block objects to the NxsReader object</h4>
+<p>
+	The next three lines involve creating a NxsReader object and adding our two block objects to a linked list maintained by the NxsReader object. The MyNexusReader class is derived from the NxsReader class, which is declared in <span class="filename">nxsreader.h</span> and defined in <span class="filename">nxsreader.cpp</span>. Although a NxsReader object can be created and used, you will probably wish to derive a class from it (as I did in this example) and override some of the NxsReader  [...]
+</p>
+<p>
+	The reason the NxsReader object must maintain a list of block ojects is so that it can figure out which one is responsible for reading each block found in the data file. The block objects <span class="variablename">taxa</span> and <span class="variablename">trees</span> have each inherited an <span class="variablename">id</span> variable of type <span class="variablename">char *</span> that stores their block name (i.e., "TAXA" for the TaxaBlock and "TREES" for the TreesBlock). When the [...]
+</p>
+<h4>Reading the data file</h4>
+<p>
+	The next two lines create a token object (MyToken is derived from the NxsToken class), and initiate the reading of the NEXUS data file using the <a href="NxsReader.html#Execute237">Execute</a> function. The input and output files are created within the MyNexusReader class. While this is not required, it facilitates handling messages generated while the data file is being read. The NxsToken class has one virtual member function ( <a href="NxsToken.html#OutputComment133">OutputComment</a> [...]
+</p>
+<h4>Reporting on block objects' contents</h4>
+<p>
+	The last two lines call the <a href="NxsBlock.html#Report149">Report</a> functions of each of the blocks. This just spits out a summary of any data contained in these objects that has been read from the data file.
+</p>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h3><a name="readernexus">Deriving From the Nexus Class</a></h3>
+<p>
+	Note that the <span class="variablename">ifstream</span> is opened in binary mode. You should always open your input file in binary mode so that the file can be read properly regardless of the platform on which it was created. For example, suppose someone created a NEXUS data file on a MacIntosh and wanted to read it with your program, which is running on a Windows XP machine. Opening the file in binary mode allows the NxsToken object you are using to recognize the newline character in  [...]
+</p>
+<pre>
+class MyReader : public NxsReader
+	{
+	public:
+		ifstream inf;
+		ofstream outf;
+
+		MyReader(char *infname, char *outfname) : NxsReader()
+			{
+			inf.open(infname, ios::binary);
+			outf.open(outfname);
+			}
+
+		~MyReader()
+			{
+			inf.close();
+			outf.close();
+			}
+
+	void ExecuteStarting() {}
+	void ExecuteStopping() {}
+
+	bool EnteringBlock(NxsString blockName)
+		{
+		cout << "Reading \"" << blockName << "\" block..." << endl;
+		outf << "Reading \"" << blockName << "\" block..." << endl;
+
+		// Returning true means it is ok to delete any data associated with
+		// blocks of this type read in previously
+		//
+		return true;
+		}
+
+	void SkippingBlock(NxsString blockName)
+		{
+		cout << "Skipping unknown block (" << blockName << ")..." << endl;
+		outf << "Skipping unknown block (" << blockName << ")..." << endl;
+		}
+
+	void SkippingDisabledBlock(NxsString blockName) {}
+
+	void OutputComment(const NxsString &msg)
+		{
+		outf << msg;
+		}
+
+	void NexusError(NxsString msg, file_pos pos, unsigned line, unsigned col)
+		{
+		cerr << endl;
+		cerr << "Error found at line " << line;
+		cerr << ", column " << col;
+		cerr << " (file position " << pos << "):" << endl;
+		cerr << msg << endl;
+
+		outf << endl;
+		outf << "Error found at line " << line;
+		outf << ", column " << col;
+		outf << " (file position " << pos << "):" << endl;
+		outf << msg << endl;
+
+		exit(0);
+		}
+	};
+</pre>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h3><a name="readertoken">Deriving From the NxsToken Class</a></h3>
+<p>
+	We derive our own token reader from the NxsToken class in order to display the output comments present in the data file (if any). The virtual function <a href="NxsToken.html#OutputComment133">OutputComment</a> in the base class is overridden to accomplish this.
+</p>
+<pre>
+class MyToken : public NxsToken
+	{
+	public:
+
+		MyToken(istream &is, ostream &os) : out(os), NxsToken(is) {}
+
+		void OutputComment(const NxsString &msg)
+			{
+			cout << msg << endl;
+			out << msg << endl;
+			}
+
+	private:
+		ostream &out;
+	};
+</pre>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h3><a name="readerall">Putting It All Together</a></h3>
+<p>
+	Here is the entire program. Note that in order for this to link properly, you will need to also compile the following files included with the NCL (and instruct your linker to link them into your main executable): <span class="filename">nxsblock.cpp</span>, <span class="filename">nxsexception.cpp</span>, <span class="filename">nxsreader.cpp</span>, <span class="filename">nxsstring.cpp</span>, <span class="filename">nxstaxablock.cpp</span>, <span class="filename">nxstreesblock.cpp</span>  [...]
+</p>
+<pre>
+#include "ncl.h"
+
+NxsTaxaBlock	*taxa	= NULL;
+NxsTreesBlock	*trees	= NULL;
+
+class MyReader : public NxsReader
+	{
+	public:
+		ifstream inf;
+		ofstream outf;
+
+		MyReader(char *infname, char *outfname) : NxsReader()
+			{
+			inf.open(infname, ios::binary);
+			outf.open(outfname);
+			}
+
+		~MyReader()
+			{
+			inf.close();
+			outf.close();
+			}
+
+	void ExecuteStarting() {}
+	void ExecuteStopping() {}
+
+	bool EnteringBlock(NxsString blockName)
+		{
+		cout << "Reading \"" << blockName << "\" block..." << endl;
+		outf << "Reading \"" << blockName << "\" block..." << endl;
+
+		// Returning true means it is ok to delete any data associated with
+		// blocks of this type read in previously
+		//
+		return true;
+		}
+
+	void SkippingBlock(NxsString blockName)
+		{
+		cout << "Skipping unknown block (" << blockName << ")..." << endl;
+		outf << "Skipping unknown block (" << blockName << ")..." << endl;
+		}
+
+	void SkippingDisabledBlock(NxsString blockName) {}
+
+	void OutputComment(const NxsString &msg)
+		{
+		outf << msg;
+		}
+
+	void NexusError(NxsString msg, file_pos pos, unsigned line, unsigned col)
+		{
+		cerr << endl;
+		cerr << "Error found at line " << line;
+		cerr << ", column " << col;
+		cerr << " (file position " << pos << "):" << endl;
+		cerr << msg << endl;
+
+		outf << endl;
+		outf << "Error found at line " << line;
+		outf << ", column " << col;
+		outf << " (file position " << pos << "):" << endl;
+		outf << msg << endl;
+
+		exit(0);
+		}
+	};
+
+class MyToken : public NxsToken
+	{
+	public:
+
+		MyToken(istream &is, ostream &os) : out(os), NxsToken(is) {}
+
+		void OutputComment(const NxsString &msg)
+			{
+			cout << msg << endl;
+			out << msg << endl;
+			}
+
+	private:
+		ostream &out;
+	};
+
+int main(int argc, char *argv[])
+	{
+	taxa = new NxsTaxaBlock();
+	trees = new NxsTreesBlock(taxa);
+
+	MyReader nexus(argv[1], argv[2]);
+	nexus.Add(taxa);
+	nexus.Add(trees);
+
+	MyToken token(nexus.inf, nexus.outf);
+	nexus.Execute(token);
+
+	taxa->Report(nexus.outf);
+	trees->Report(nexus.outf);
+
+	return 0;
+	}
+</pre>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h3><a name="readerdata">A Sample Data File</a></h3>
+<p>
+	Here is a sample data file that exercises a lot of the features of the NEXUS file reader we have just created. First, there are both output and regular comments scattered around. Some are between tokens, some occur at the beginning of a token, and still others begin right after a token. Some comments even have nested within them words surrounded by square brackets. There are also blocks in this data file (i.e., the paup block) that are not recognized by the NEXUS file reader we have cre [...]
+</p>
+<pre>
+#nexus
+
+[!Output comment before first block]
+
+begin paup; [this is an unknown block]
+	lset nst=2 basefreq=empirical tratio=estimate rates=gamma shape=estimate;
+end;
+
+[!Let's see if we can deal with [nested] comments]
+
+[!
+What happens if we do this!
+]
+
+begin [comment at beginning of token]taxa;
+	dimensions[comment at end of token] ntax=11;
+	taxlabels  [comment between tokens]
+		P._fimbriata
+		'P. robusta'
+		'P. americana'
+		'P. myriophylla'
+		'P. articulata'
+		'P. parksii'
+		'P. gracilis'
+		'P. macrophylla'
+		'P. polygama'
+		'P. basiramia'
+		'P. ciliata'
+		[!output comment in TAXLABELS command]
+	;
+end;
+
+begin trees;
+	translate
+		1  P._fimbriata,
+		2  P._robusta,
+		3  P._americana,
+		4  P._myriophylla,
+		5  P._articulata,
+		6  P._parksii,
+		7  P._polygama,
+		8  P._macrophylla,
+		9  P._gracilis,
+		10  P._basiramia,
+		11  P._ciliata
+	;
+	utree unrooted =      (1,2,((4,3,(5,6)),((7,8),(9,(10,11)))));
+	tree  rooted   =      ((1,2),((4,3,(5,6)),(7,(8,(9,(10,11))))));
+	utree u_to_r   = [&R] ((1,2),((4,3,(5,6)),(7,(8,(9,(10,11))))));
+	tree  r_to_u   = [&U] (1,2,((4,3,(5,6)),((7,8),(9,(10,11)))));
+end;
+</pre>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h2><a name="rollown">Creating Your Own NEXUS Block</a></h2>
+<p>
+	Creating your own NEXUS block involves deriving a class from the NxsBlock base class and overriding the three virtual functions <a href="NxsBlock.html#Read129">Read</a> , <a href="NxsBlock.html#Reset142">Reset</a> , and <a href="NxsBlock.html#Report149">Report</a> . Use the files <span class="filename">emptyblock.cpp</span> and <span class="filename">emptyblock.h</span> as templates for your own source code and header files. While creating your own block class is not a complicated endea [...]
+</p>
+<ul>
+	<li>
+		Be sure to write the <a href="NxsBlock.html#Reset142">Reset</a> function in such a way that all heap memory is cleaned up (deleted). This means whenever you use the <span class="variablename">new</span> keyword to allocate memory for an object that will potentially persist until the <a href="NxsBlock.html#Reset142">Reset</a> method is called, you need to put code in the <a href="NxsBlock.html#Reset142">Reset</a> function to delete it. Also, it is important to delete such objects in the [...]
+		<br />
+	</li>
+	<li>
+		When writing the <a href="NxsBlock.html#Read129">Read</a> function, put <span class="variablename">assert</span> macros everywhere you make an assumption, however insignificant this assumption seems at the time of writing. This tremendously speeds up the task of finding bugs when one of your assumptions turns out to not always be true!
+		<br />
+	</li>
+	<li>
+		When writing the <a href="NxsBlock.html#Read129">Read</a> function, put in a lot of tests of the form: <pre>
+if (!token.Equals(";"))
+	{
+	errormsg.PrintF("Expecting ';' after TREES block name, but found %s instead.", token.GetTokenAsCStr());
+	throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+</pre> Such checks will give your users some hope of finding where they have made a mistake in constructing their data file. We all know how frustrating it can be to have a program exit with an uninformative error message.
+	</li>
+</ul>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h2><a name="advice">General Advice</a></h2>
+<p>
+	A typical program making use of this library might have the following two general characteristics:
+</p>
+<ul>
+	<li>
+		The program is structured so that it can be compiled either as a command-line driven, console program or as a graphical application (with a Windows, MacIntosh, or XWindows Graphical User Interface, or GUI)
+		<br />
+	</li>
+	<li>
+		Handles a private NEXUS block that contains commands identical to those that can be entered on the command line, enabling the program to be run in batch mode
+	</li>
+</ul>
+<p>
+	After developing several programs like this, I have come up with the following strategy that makes efficient use of the object-oriented nature of the NCL. I will assume your non-graphical program will be called simply "Phylome" and will read a private NEXUS block named "PHYLOME". I will further assume that the GUI version will be targeted for the Windows platform, and will be colled "PhylomeWin".
+</p>
+<ul>
+	<li>
+		Create a class (call it PhylomeBase) that performs all the (non-graphical) core functionality of the program. Be careful not to place any GUI code in this class. This class should be derived (publicly) from <span class="makeconspicuous">both</span> the NxsBlock class (this class will encapsulate your program's private NEXUS block) and the NxsReader class (which encapsulates your program's NEXUS file reading capability).
+		<br />
+	</li>
+	<li>
+		In class PhylomeBase, override the NxsBlock virtual functions <a href="NxsBlock.html#Read129">Read</a> , <a href="NxsBlock.html#Reset142">Reset</a> and <a href="NxsBlock.html#Report149">Report</a> and any other handler functions needed to process the commands in the private block.
+		<br />
+	</li>
+	<li>
+		In the PhylomeBase constructor, create all the NxsBlock-derived objects needed (i.e., a NxsCharactersBlock object, a NxsTaxaBlock object, etc.) and add these to PhylomeBase using the <a href="NxsReader.html#Add44">Add</a> function. Don't forget to Add(this) too so that your program can read the private block. Note that "this" is both a NxsReader object as well as a NxsBlock object, so it is able to add itself to the list of blocks processed upon execution of a NEXUS data file.
+		<br />
+	</li>
+	<li>
+		Now create a class PhylomeWin that handles the Windows GUI interface, deriving publicly from PhylomeBase. In class PhylomeWin, override the NxsReader virtual functions <a href="NxsReader.html#EnteringBlock204">EnteringBlock</a> , <a href="NxsReader.html#SkippingBlock472">SkippingBlock</a> , and <a href="NxsReader.html#NexusError444">NexusError</a> . For instance, within <a href="NxsReader.html#NexusError444">NexusError</a> , you might put up a MessageBox telling the user about an error [...]
+		<br />
+	</li>
+	<li>
+		For the command-driven version, create a class Phylome that is derived from PhylomeBase, overrides the NxsReader and NxsBlock virtual functions (like its GUI counterpart, PhylomeWin), and provides a means for users to enter commands (you should create a mechanism in PhylomeBase so that you can use the same machinery to process commands typed in from the keyboard as you use to process commands contained in a private block). The <span class="filename">basiccmdline.h</span> and <span clas [...]
+	</li>
+</ul>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h2><a name="bugz">Reporting Bugs</a></h2>
+<p>
+	Please report bugs by email directly to <a href="mailto:paul.lewis at uconn.edu">Paul O. Lewis</a>. Please include "NCL bug" in the subject line to ensure that my mail filter catches it. Your bug has a better chance of getting fixed if you can attach to your email a NEXUS data file that causes the problem you have noticed.
+</p>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h2><a name="whatyoucando">What You Can Do For Me</a></h2>
+<p>
+	I hope this library is useful to you, and note that it is free software under the <a href="COPYING">Gnu General Public License.</a>
+</p>
+<p>
+	Although you are not obligated in any way to me as a result of using this library to create programs, there are a few things that you can do to help encourage me to continue improving this library. Please make use of any of the following means of support that you feel comfortable with:
+</p>
+<ul>
+	<li>
+		Cite the NCL! If you publish an announcement of a program of yours that includes the NCL, please acknowledge that your program includes the NCL.
+		<br />
+	</li>
+	<li>
+		Advertise the NCL! If your program produces output either on the screen or in the form of a file, mention that your program uses the NCL in your program's output.
+		<br />
+	</li>
+	<li>
+		Help me fix bugs. If you discover a bug, please let me know about it so that I can get it fixed. Scroll up to the section entitled "Reporting Bugs" for the (simple) instructions for reporting a bug.
+	</li>
+	<li>
+		Give me suggestions. I welcome suggestions for improving the library and making it more convenient to use. I can't guarantee that I will have time to honor all requests, but I will try my best.
+	</li>
+</ul>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p-->
+<h2><a name="future">Future Of The NCL Project</a></h2>
+<p>
+	NCL is stable and not expected to change API.
+	We continue adding enhancements (more forgiving parsing, additional formats, and improved data storage).
+	We welcome both suggestions for improvement as well as bug reports, of course.
+</p>
+<p>
+	Version 2.2 is now generated (by a script) from version 2.1. The two versions are not expected to diverge in functionality with the exception that version 2.2 enables SWIG bindings to non-C++ languages (while 2.1 preserves function signatures to avoid breaking client code written against 2.0 and 2.1).
+</p>
+<p>
+	<a href="#top">Back to Table of Contents</a>
+</p>
+<h2><a name="contactinfo">Contact Information</a></h2>
+<p>
+	Paul's and Mark's current mail and email addresses as well as my phone and fax numbers are given below:
+</p>
+<pre>
+Paul O. Lewis, Assoc. Professor
+Department of Ecology and Evolutionary Biology
+The University of Connecticut
+75 North Eagleville Road, Unit 3043
+Storrs, CT 06269-3043 U.S.A.
+
+Email: <a href="mailto:paul.lewis at uconn.edu">paul.lewis at uconn.edu</a>
+URL:   <a href="http://www.eeb.uconn.edu/people/plewis">http://www.eeb.uconn.edu/people/plewis/</a>
+</pre>
+<br />
+<pre>
+Mark T. Holder, Assist. Professor
+Department of Ecology and Evolutionary Biology
+The University of Kansas
+Lawrence, KS 66045 U.S.A.
+
+Email: <a href="mailto:mtholder at ku.edu">mtholder at ku.edu</a>
+URL:   <a href="http://phylo.bio.ku.edu/mark-holder">http://phylo.bio.ku.edu/mark-holder</a>
+</pre>
+<!--#include FILE="footer.html"-->
+</body>
+</html>
diff --git a/html/v2.1/ncl.css b/html/v2.1/ncl.css
new file mode 100644
index 0000000..86ffb8a
--- /dev/null
+++ b/html/v2.1/ncl.css
@@ -0,0 +1,596 @@
+
+/* The standard CSS for doxygen */
+
+body, table, div, p, dl {
+	font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
+	font-size: 12px;
+}
+
+/* @group Heading Levels */
+
+h1 {
+	text-align: center;
+	font-size: 150%;
+	background: #CCCCCC;
+	PADDING-TOP: 4px;
+}
+
+h2 {
+	font-size: 120%;
+	background: #DDDDDD;
+	PADDING-TOP: 4px;
+	border-style: solid none solid none ;
+	border-width:thin;
+}
+
+h3 {
+	font-size: 100%;
+	PADDING-TOP: 4px;
+	border-style: none none dotted none ;
+	border-width:thin;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd, p.starttd {
+	margin-top: 2px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #153788;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #1b77c5;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #6666cc;
+	color: #ffffff;
+	border: 1px double #9295C2;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code {
+	color: #3030f0;
+}
+
+a.codeRef {
+	color: #3030f0;
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+.fragment {
+	font-family: monospace, fixed;
+	font-size: 105%;
+}
+
+pre.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	padding: 4px 6px;
+	margin: 4px 8px 4px 2px;
+	overflow: auto;
+	word-wrap: break-word;
+	font-size:  9pt;
+	line-height: 125%;
+}
+
+div.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	margin-bottom: 6px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+
+td.indexkey {
+	background-color: #e8eef2;
+	font-weight: bold;
+	border: 1px solid #CCCCCC;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+}
+
+td.indexvalue {
+	background-color: #e8eef2;
+	border: 1px solid #CCCCCC;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #f0f0f0;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit {
+	color: #ff00ff
+}
+
+span.vhdlchar {
+	color: #000000
+}
+
+span.vhdlkeyword {
+	color: #700070
+}
+
+span.vhdllogic {
+	color: #ff0000
+}
+
+/* @end */
+
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #84b0c7;
+}
+
+th.dirtab {
+	background: #e8eef2;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #666;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #FAFAFA;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+	border-top: 1px solid #ccc;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memTemplParams {
+	color: #606060;
+        white-space: nowrap;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: #606060;
+	font-weight: normal;
+	margin-left: 3px;
+}
+
+.memnav {
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+}
+
+.memname {
+        white-space: nowrap;
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memproto {
+        border-top: 1px solid #84b0c7;
+        border-left: 1px solid #84b0c7;
+        border-right: 1px solid #84b0c7;
+        padding: 0;
+        background-color: #d5e1e8;
+        font-weight: bold;
+        /* firefox specific markup */
+        background-image: -moz-linear-gradient(rgba(228, 233, 245, 1.0) 0%, rgba(193, 205, 232, 1.0) 100%);
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 8px;
+        -moz-border-radius-topleft: 8px;
+        /* webkit specific markup */
+        background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(228, 233, 245, 1.0)), to(rgba(193, 205, 232, 1.0)));
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 8px;
+        -webkit-border-top-left-radius: 8px;
+
+}
+
+.memdoc {
+        border-bottom: 1px solid #84b0c7;
+        border-left: 1px solid #84b0c7;
+        border-right: 1px solid #84b0c7;
+        padding: 2px 5px;
+        background-color: #eef3f5;
+        border-top-width: 0;
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 8px;
+        -moz-border-radius-bottomright: 8px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 8px;
+        -webkit-border-bottom-right-radius: 8px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+	font-family: sans-serif;
+	margin: 0.5em;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+	font-size: 9pt;
+	font-weight: bold;
+}
+
+.directory h3 {
+	margin: 0px;
+	margin-top: 1em;
+	font-size: 11pt;
+}
+
+/*
+The following two styles can be used to replace the root node title
+with an image of your choice.  Simply uncomment the next two styles,
+specify the name of your image and be sure to set 'height' to the
+proper pixel height of your image.
+*/
+
+/*
+.directory h3.swap {
+	height: 61px;
+	background-repeat: no-repeat;
+	background-image: url("yourimage.gif");
+}
+.directory h3.swap span {
+	display: none;
+}
+*/
+
+.directory > h3 {
+	margin-top: 0;
+}
+
+.directory p {
+	margin: 0px;
+	white-space: nowrap;
+}
+
+.directory div {
+	display: none;
+	margin: 0px;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+/* these are for tree view when not used as main index */
+
+.directory-alt {
+	font-size: 100%;
+	font-weight: bold;
+}
+
+.directory-alt h3 {
+	margin: 0px;
+	margin-top: 1em;
+	font-size: 11pt;
+}
+
+.directory-alt > h3 {
+	margin-top: 0;
+}
+
+.directory-alt p {
+	margin: 0px;
+	white-space: nowrap;
+}
+
+.directory-alt div {
+	display: none;
+	margin: 0px;
+}
+
+.directory-alt img {
+	vertical-align: -30%;
+}
+
+/* @end */
+
+address {
+	font-style: normal;
+	color: #333;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #153788;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #254798;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+	text-align:left;
+}
+
+
+DIV.linkstrip {
+	MARGIN-TOP: 1em; FONT-SIZE: large; TEXT-ALIGN: center
+}
+
+P.footer {
+	CLEAR: left; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: x-small; PADDING-BOTTOM: 0px; MARGIN: 1ex 15% 0px; LINE-HEIGHT: 0.6; PADDING-TOP: 0px; FONT-FAMILY: Arial, Chicago, sans-serif; TEXT-ALIGN: center
+}
+
+A:hover {
+	COLOR: #a00; BACKGROUND-COLOR: white; TEXT-DECORATION: none
+}
+
+.quickref {
+	font-family: Arial, sans-serif
+}
+
+.public {
+	font-weight: bold; color: black; background: white;
+}
+
+.protected {
+	font-weight: bold; color: teal; background: white;
+}
+
+.private {
+	font-weight: bold; color: red; background: white;
+}
+
+.groupheading {
+	font-size: large; font-weight: bold;
+}
+
+.classy {
+	font-family: Arial, sans-serif; color: navy;
+}
+
+.variablename {
+	font-weight: bold; color: maroon;
+}
+
diff --git a/ncl/Makefile.am b/ncl/Makefile.am
new file mode 100644
index 0000000..64bdd5e
--- /dev/null
+++ b/ncl/Makefile.am
@@ -0,0 +1,51 @@
+pkglib_LTLIBRARIES = libncl.la
+libncl_ladir = $(includedir)/ncl
+libncl_la_LDFLAGS = -release @PACKAGE_VERSION@
+
+
+libncl_la_HEADERS = \
+	ncl.h \
+	nxsallocatematrix.h \
+	nxsassumptionsblock.h \
+	nxsblock.cpp \
+	nxsblock.h \
+	nxscharactersblock.h \
+	nxscdiscretematrix.h \
+	nxscxxdiscretematrix.h \
+	nxsdatablock.h \
+	nxsdefs.h \
+	nxsdiscretedatum.h \
+	nxsdistancedatum.h \
+	nxsdistancesblock.h \
+	nxsexception.h \
+	nxsmultiformat.h \
+	nxspublicblocks.h \
+	nxsreader.h \
+	nxssetreader.h \
+	nxsstring.h \
+	nxstaxablock.h \
+	nxstaxaassociationblock.h \
+	nxstoken.h \
+	nxstreesblock.h \
+	nxsunalignedblock.h \
+	nxsutilcopy.h
+
+libncl_la_SOURCES = \
+	nxsassumptionsblock.cpp \
+	nxsblock.cpp \
+	nxscharactersblock.cpp \
+	nxscxxdiscretematrix.cpp \
+	nxsdatablock.cpp \
+	nxsdistancesblock.cpp \
+	nxsexception.cpp \
+	nxsmultiformat.cpp \
+	nxspublicblocks.cpp \
+	nxsreader.cpp \
+	nxssetreader.cpp \
+	nxsstring.cpp \
+	nxstaxablock.cpp \
+	nxstaxaassociationblock.cpp \
+	nxstoken.cpp \
+	nxstreesblock.cpp \
+	nxsunalignedblock.cpp
+
diff --git a/ncl/Makefile.in b/ncl/Makefile.in
new file mode 100644
index 0000000..2c1b8e5
--- /dev/null
+++ b/ncl/Makefile.in
@@ -0,0 +1,624 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = ncl
+DIST_COMMON = $(libncl_la_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(libncl_ladir)"
+LTLIBRARIES = $(pkglib_LTLIBRARIES)
+libncl_la_LIBADD =
+am_libncl_la_OBJECTS = nxsassumptionsblock.lo nxsblock.lo \
+	nxscharactersblock.lo nxscxxdiscretematrix.lo nxsdatablock.lo \
+	nxsdistancesblock.lo nxsexception.lo nxsmultiformat.lo \
+	nxspublicblocks.lo nxsreader.lo nxssetreader.lo nxsstring.lo \
+	nxstaxablock.lo nxstaxaassociationblock.lo nxstoken.lo \
+	nxstreesblock.lo nxsunalignedblock.lo
+libncl_la_OBJECTS = $(am_libncl_la_OBJECTS)
+libncl_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(libncl_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(libncl_la_SOURCES)
+DIST_SOURCES = $(libncl_la_SOURCES)
+HEADERS = $(libncl_la_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+pkglib_LTLIBRARIES = libncl.la
+libncl_ladir = $(includedir)/ncl
+libncl_la_LDFLAGS = -release @PACKAGE_VERSION@
+libncl_la_HEADERS = \
+	ncl.h \
+	nxsallocatematrix.h \
+	nxsassumptionsblock.h \
+	nxsblock.cpp \
+	nxsblock.h \
+	nxscharactersblock.h \
+	nxscdiscretematrix.h \
+	nxscxxdiscretematrix.h \
+	nxsdatablock.h \
+	nxsdefs.h \
+	nxsdiscretedatum.h \
+	nxsdistancedatum.h \
+	nxsdistancesblock.h \
+	nxsexception.h \
+	nxsmultiformat.h \
+	nxspublicblocks.h \
+	nxsreader.h \
+	nxssetreader.h \
+	nxsstring.h \
+	nxstaxablock.h \
+	nxstaxaassociationblock.h \
+	nxstoken.h \
+	nxstreesblock.h \
+	nxsunalignedblock.h \
+	nxsutilcopy.h
+
+libncl_la_SOURCES = \
+	nxsassumptionsblock.cpp \
+	nxsblock.cpp \
+	nxscharactersblock.cpp \
+	nxscxxdiscretematrix.cpp \
+	nxsdatablock.cpp \
+	nxsdistancesblock.cpp \
+	nxsexception.cpp \
+	nxsmultiformat.cpp \
+	nxspublicblocks.cpp \
+	nxsreader.cpp \
+	nxssetreader.cpp \
+	nxsstring.cpp \
+	nxstaxablock.cpp \
+	nxstaxaassociationblock.cpp \
+	nxstoken.cpp \
+	nxstreesblock.cpp \
+	nxsunalignedblock.cpp
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ncl/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign ncl/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \
+	}
+
+uninstall-pkglibLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
+	done
+
+clean-pkglibLTLIBRARIES:
+	-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES)
+	@list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libncl.la: $(libncl_la_OBJECTS) $(libncl_la_DEPENDENCIES) 
+	$(libncl_la_LINK) -rpath $(pkglibdir) $(libncl_la_OBJECTS) $(libncl_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsassumptionsblock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsblock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxscharactersblock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxscxxdiscretematrix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsdatablock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsdistancesblock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsexception.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsmultiformat.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxspublicblocks.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsreader.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxssetreader.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsstring.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxstaxaassociationblock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxstaxablock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxstoken.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxstreesblock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nxsunalignedblock.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-libncl_laHEADERS: $(libncl_la_HEADERS)
+	@$(NORMAL_INSTALL)
+	test -z "$(libncl_ladir)" || $(MKDIR_P) "$(DESTDIR)$(libncl_ladir)"
+	@list='$(libncl_la_HEADERS)'; test -n "$(libncl_ladir)" || list=; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libncl_ladir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libncl_ladir)" || exit $$?; \
+	done
+
+uninstall-libncl_laHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libncl_la_HEADERS)'; test -n "$(libncl_ladir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(libncl_ladir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(libncl_ladir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(libncl_ladir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libncl_laHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libncl_laHEADERS uninstall-pkglibLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-pkglibLTLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libncl_laHEADERS install-man install-pdf \
+	install-pdf-am install-pkglibLTLIBRARIES install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-libncl_laHEADERS \
+	uninstall-pkglibLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ncl/ncl.h b/ncl/ncl.h
new file mode 100644
index 0000000..25a6f1c
--- /dev/null
+++ b/ncl/ncl.h
@@ -0,0 +1,97 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NCL_H
+#define NCL_NCL_H
+
+#if !defined(__DECCXX)
+#	include <cctype>
+#	include <cmath>
+#	include <cstdarg>
+#	include <cstdio>
+#	include <cstdarg>
+#	include <cstdlib>
+#	include <ctime>
+#	include <climits>
+#	include <cfloat>
+#else
+#	include <ctype.h>
+#	include <stdarg.h>
+#	include <math.h>
+#	include <stdarg.h>
+#	include <stdio.h>
+#	include <stdlib.h>
+#	include <time.h>
+#	include <float.h>
+#endif
+
+#include <algorithm>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <list>
+#include <map>
+#include <set>
+#include <stdexcept>
+#include <string>
+#if defined(__GNUC__)
+#	if __GNUC__ < 3
+#		include <strstream>
+#	else
+#		include <sstream>
+#	endif
+#endif
+#include <vector>
+
+# if ! defined (NCL_AVOID_USING_STD)
+	using namespace std;
+#endif
+
+#if defined( __BORLANDC__ )
+#	include <dos.h>
+#endif
+
+#if defined(__MWERKS__)
+#	define HAVE_PRAGMA_UNUSED
+		// mwerks (and may be other compilers) want return values even if the function throws an exception
+		//
+#	define DEMANDS_UNREACHABLE_RETURN
+
+#endif
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsstring.h"
+#include "ncl/nxsexception.h"
+#include "ncl/nxstoken.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxsreader.h"
+#include "ncl/nxssetreader.h"
+#include "ncl/nxstaxablock.h"
+#include "ncl/nxstreesblock.h"
+#include "ncl/nxsdistancedatum.h"
+#include "ncl/nxsdistancesblock.h"
+#include "ncl/nxsdiscretedatum.h"
+#include "ncl/nxscharactersblock.h"
+#include "ncl/nxsassumptionsblock.h"
+#include "ncl/nxsdatablock.h"
+#include "ncl/nxsunalignedblock.h"
+#include "ncl/nxspublicblocks.h"
+#include "ncl/nxsmultiformat.h"
+
+#endif
diff --git a/ncl/nxsallocatematrix.h b/ncl/nxsallocatematrix.h
new file mode 100644
index 0000000..ee07bb9
--- /dev/null
+++ b/ncl/nxsallocatematrix.h
@@ -0,0 +1,253 @@
+//	Copyright (C) 2008 Mark Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.1
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+// This code is based on code developed by Mark Holder for the CIPRES project
+
+#if !defined (NXS_ALLOCATE_MATRIX_H)
+# define NXS_ALLOCATE_MATRIX_H
+
+#include "ncl/nxsdefs.h"
+
+template<typename T>
+T *** NewThreeDArray(unsigned f , unsigned s , unsigned t);
+template<typename T>
+T ** NewTwoDArray(unsigned f , unsigned s);
+template<typename T>
+void DeleteThreeDArray(T ***& ptr);
+template<typename T>
+void DeleteTwoDArray(T **& ptr);
+
+/*!
+ Allocates a three dimensional array of doubles as one contiguous block of memory
+ the dimensions are f two dimensional arrays that are s by t.
+
+	The pointer should be freed by a call to DeleteThreeDArray
+
+ the array is set up so that
+ for(i = 0 ; i < f ; i++)
+	for (j = 0 ; j < s ; j++)
+		for (k = 0 ; k < t; k++)
+			array[i][j][k];
+
+ would be the same order of access as:
+
+	T *ptr = **array;
+	for (i = 0 ; i < f*s*t ; i++)
+		*ptr++;
+
+*/
+template<typename T> T *** NewThreeDArray(unsigned f , unsigned s , unsigned t)
+	{
+	NCL_ASSERT(f > 0 && s > 0 && t> 0);
+	const unsigned twoDStride = s*t;
+	T ***ptr;
+	ptr = new T **[f];
+	ptr[0] = new T *[f * s];
+	ptr[0][0] = new T[f * s * t];
+	for (unsigned sIt = 1 ; sIt < s ; sIt++)
+		ptr[0][sIt] = ptr[0][sIt-1] + t ;
+	for (unsigned fIt = 1 ; fIt < f ; fIt ++)
+		{
+		ptr[fIt] = ptr[fIt -1] +  s ;
+		ptr[fIt][0] = ptr[fIt -1][0] + twoDStride;
+		for (unsigned sIt = 1 ; sIt < s ; sIt++)
+			ptr[fIt][sIt] = ptr[fIt][sIt-1] + t ;
+		}
+	return ptr;
+	}
+
+/*!
+ Delete a Three Dimensional Array that has been allocated using NewThreeDArray and sets the pointer to NULL
+*/
+template<typename T> void DeleteThreeDArray	(T *** & ptr)
+	{
+	if (ptr)
+		{
+		if (*ptr)
+			{
+			delete [] **ptr;
+			delete [] * ptr;
+			}
+		delete [] ptr;
+		}
+	ptr = NULL;
+	}
+
+/*!
+ 	Allocates a two dimensional array of doubles as one contiguous block of memory
+ 	the dimensions are f by s.
+
+	The pointer should be freed by a call to DeleteTwoDArray
+
+ 	The array is set up so that:
+
+	for(i = 0 ; i < f ; i++)
+		for (j = 0 ; j < s ; j++)
+			array[i][j];
+
+	would be the same order of access as:
+
+  	T *ptr = **array;
+	for (i = 0 ; i < f*s*t ; i++)
+		*ptr++;
+*/
+template<typename T> T **NewTwoDArray(unsigned f , unsigned s)
+	{
+	NCL_ASSERT(f > 0 && s > 0);
+	T **ptr;
+	ptr = new T *[f];
+	*ptr = new T [f * s];
+	for (unsigned fIt = 1 ; fIt < f ; fIt ++)
+		ptr[fIt] = ptr[fIt -1] +  s ;
+	return ptr;
+	}
+
+/*!
+ Delete a 2 Dimensional Array NewTwoDArray and set the ptr to NULL
+*/
+template<typename T> inline void DeleteTwoDArray	(T ** & ptr)
+	{
+	if (ptr)
+		{
+		delete [] * ptr;
+		delete [] ptr;
+		ptr = NULL;
+		}
+	}
+
+
+template<typename T>
+class ScopedThreeDMatrix
+	{
+	public:
+		T *** ptr;
+
+		/*! returns an alias to the memory, but does not "surrender" the
+			ownership of the pointer to the caller
+		*/
+		T *** GetAlias() const
+			{
+			return ptr;
+			}
+		/*! Creates a new matrix.  See NewThreeDArray() for argument  explanation */
+		ScopedThreeDMatrix(unsigned f = 0, unsigned s = 0, unsigned t = 0)
+			:ptr(NULL)
+			{
+			Initialize(f, s, t);
+			}
+		/*! Frees the old matrix, and creates a new matrix.  See NewThreeDArray() for argument explanation  */
+		void Initialize(unsigned f = 0, unsigned s = 0, unsigned t = 0)
+			{
+			Free();
+			if (f > 0 && s > 0 && t > 0)
+				ptr = NewThreeDArray<T>(f, s, t);
+			}
+		/*! returns an alias to the memory, and "forgets" about the memory.
+			The caller is responsible for assuring that DeleteThreeDArray is
+			called on the pointer.
+		*/
+		T ***Surrender()
+			{
+			T ***temp = ptr;
+			ptr = NULL;
+			return temp;
+			}
+		~ScopedThreeDMatrix()
+			{
+			Free();
+			}
+		/*! Releases the memory. */
+		void Free()
+			{
+			if (ptr != NULL)
+				{
+				DeleteThreeDArray<T>(ptr);
+				ptr = 0L;
+				}
+			}
+	};
+
+
+/*!
+	Simple memory-management class for a 2-D array that is allocated using NewTwoDArray
+
+	Memory is deleted when the instance goes out of scope, unless Surrender is called.
+
+*/
+template<typename T>
+class ScopedTwoDMatrix
+	{
+
+	public:
+		T ** ptr;
+
+		/*! returns an alias to the memory, but does not "surrender" the
+			ownership of the pointer to the caller
+		*/
+		T ** GetAlias() const
+			{
+			return ptr;
+			}
+		/*! Creates a new matrix.  See NewTwoDArray() for argument explanation  */
+		ScopedTwoDMatrix(unsigned f = 0, unsigned s = 0)
+			:ptr(NULL)
+			{
+			Initialize(f, s);
+			}
+		/*! Frees the old matrix, and creates a new matrix.  See NewTwoDArray() for argument explanation  */
+		void Initialize(unsigned f, unsigned s)
+			{
+			Free();
+			if (f > 0 && s > 0)
+				ptr = NewTwoDArray<T>(f, s);
+			}
+		/*! returns an alias to the memory, and "forgets" about the memory.
+			The caller is responsible for assuring that DeleteTwoDArray is
+			called on the pointer.
+		*/
+		T **Surrender()
+			{
+			T** temp = ptr;
+			ptr = NULL;
+			return temp;
+			}
+
+		~ScopedTwoDMatrix()
+			{
+			Free();
+			}
+
+		/*! Releases the memory. */
+		void Free()
+			{
+			if (ptr != NULL)
+				{
+				DeleteTwoDArray<T>(ptr);
+				ptr = 0L;
+				}
+			}
+
+	};
+
+typedef ScopedTwoDMatrix<double> ScopedDblTwoDMatrix;
+typedef ScopedTwoDMatrix<unsigned> ScopedUIntTwoDMatrix;
+
+typedef ScopedThreeDMatrix<double> ScopedDblThreeDMatrix;
+typedef ScopedThreeDMatrix<unsigned> ScopedUIntThreeDMatrix;
+
+#endif
diff --git a/ncl/nxsassumptionsblock.cpp b/ncl/nxsassumptionsblock.cpp
new file mode 100644
index 0000000..6a32092
--- /dev/null
+++ b/ncl/nxsassumptionsblock.cpp
@@ -0,0 +1,2807 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <iomanip>
+#include <climits>
+
+#include "ncl/nxsassumptionsblock.h"
+#include "ncl/nxssetreader.h"
+#include "ncl/nxsreader.h"
+using namespace std;
+
+class BogusToIndMapper: public NxsLabelToIndicesMapper
+	{
+	public:
+		BogusToIndMapper()
+			:queried(false)
+			{}
+		virtual ~BogusToIndMapper(){}
+
+		virtual unsigned GetMaxIndex() const
+			{
+			return UINT_MAX;
+			}
+		virtual unsigned GetIndicesForLabel(const std::string &label, NxsUnsignedSet *) const
+			{
+			queried=true;
+			NxsString e;
+			e << "The symbol " << label << " was not recognized";
+			throw NxsException(e);
+			}
+
+		virtual unsigned GetIndexSet(const std::string &, NxsUnsignedSet * ) const
+			{
+			return 0;
+			}
+		virtual bool AddNewIndexSet(const std::string &, const NxsUnsignedSet & )
+			{
+			return false;
+			}
+		virtual bool AddNewPartition(const std::string &, const NxsPartition & )
+			{
+			return false;
+			}
+
+		/// AppendNewLabel is only overloaded in Taxa and State LabelToIndexMappers
+		virtual unsigned AppendNewLabel(std::string &label)
+			{
+			queried=true;
+			NxsString e;
+			e << "The symbol " << label << " was not recognized";
+			throw NxsException(e);
+			}
+
+		std::vector<std::string> GetLabels() const
+			{
+			queried=true;
+			NxsString e;
+			throw NxsException(e);
+			}
+		mutable bool queried;
+	};
+
+
+void NxsTransformationManager::Reset()
+	{
+	standardTypeNames.clear();
+	standardTypeNames.insert("UNORD");
+	standardTypeNames.insert("ORD");
+	standardTypeNames.insert("IRREV");
+	standardTypeNames.insert("IRREV.UP");
+	standardTypeNames.insert("IRREV.DOWN");
+	standardTypeNames.insert("DOLLO");
+	standardTypeNames.insert("DOLLO.UP");
+	standardTypeNames.insert("DOLLO.DOWN");
+	standardTypeNames.insert("STRAT");
+	standardTypeNames.insert("SQUARED"); /* new in Mesquite */
+	standardTypeNames.insert("LINEAR"); /* new in Mesquite */
+	allTypeNames.clear();
+	allTypeNames.insert(standardTypeNames.begin(), standardTypeNames.end());
+
+	userTypeNames.clear();
+	dblUserTypes.clear();
+	intUserTypes.clear();
+	dblWtSets.clear();
+	intWtSets.clear();
+	typeSets.clear();
+	def_wtset.clear();
+	def_typeset.clear();
+	def_type.clear();
+	}
+
+void NxsTransformationManager::WriteUserType(std::ostream &out) const
+	{
+	if (dblUserTypes.empty() && intUserTypes.empty())
+		return;
+	for (std::map<std::string, NxsRealStepMatrix>::const_iterator csIt = dblUserTypes.begin(); csIt != dblUserTypes.end(); ++csIt)
+		{
+		out << "    UserType ";
+		out << NexusToken::EscapeString(csIt->first) << " (Stepmatrix) = ";
+		const NxsRealStepMatrix & p = csIt->second;
+		const std::vector<std::string> & states = p.GetSymbols();
+		const NxsRealStepMatrix::DblMatrix & mat = p.GetMatrix();
+		const unsigned nStates = (const unsigned)states.size();
+		out << nStates;
+		out << "\n    ";
+		for (std::vector<std::string>::const_iterator sIt = states.begin(); sIt != states.end(); ++sIt)
+			out << "   "<< NxsString::GetEscaped(*sIt) ;
+		NxsString n;
+		std::ios::fmtflags prevflags = out.setf(std::ios::showpoint);
+		for (unsigned i = 0; i < nStates; ++i)
+			{
+			out << "\n    ";
+			for (unsigned j = 0; j < nStates; ++j)
+				{
+				const double el = mat.at(i).at(j);
+				if (i == j && el == 0.0)
+					out << "   .";
+				else
+					{
+					n.clear();
+					if (el == DBL_MAX)
+						n += "i";
+					else
+						n += el;
+					out << "   " << NxsString::GetEscaped(n);
+					}
+				}
+			}
+		out.flags(prevflags);
+		out << ";\n";
+		}
+
+	for (std::map<std::string, NxsIntStepMatrix>::const_iterator csIt = intUserTypes.begin(); csIt != intUserTypes.end(); ++csIt)
+		{
+		out << "    UserType ";
+		out << NexusToken::EscapeString(csIt->first) << " (Stepmatrix) = ";
+		const NxsIntStepMatrix & p = csIt->second;
+		const std::vector<std::string> & states = p.GetSymbols();
+		const NxsIntStepMatrix::IntMatrix & mat = p.GetMatrix();
+		const unsigned nStates = (const unsigned)states.size();
+		out << nStates;
+		out << "\n    ";
+		for (std::vector<std::string>::const_iterator sIt = states.begin(); sIt != states.end(); ++sIt)
+			out << "   "<< NxsString::GetEscaped(*sIt) ;
+		NxsString n;
+		for (unsigned i = 0; i < nStates; ++i)
+			{
+			out << "\n    ";
+			for (unsigned j = 0; j < nStates; ++j)
+				{
+				const int el = mat.at(i).at(j);
+				if (i == j && el == 0)
+					out << "   .";
+				else
+					{
+					if (el == INT_MAX)
+						n = "i";
+					else
+						{
+						n.clear();
+						n += el;
+						}
+					out << "   " << NxsString::GetEscaped(n);
+					}
+				}
+			}
+		out << ";\n";
+		}
+	}
+
+void NxsTransformationManager::WriteWtSet(std::ostream &out) const
+	{
+	if (dblWtSets.empty() && intWtSets.empty())
+		return;
+	const char * dtp = (def_wtset.empty() ? NULL : def_wtset.c_str());
+	for (std::map<std::string, ListOfDblWeights>::const_iterator csIt = dblWtSets.begin(); csIt != dblWtSets.end(); ++csIt)
+		{
+		out << "    WtSet ";
+		if (NxsString::case_insensitive_equals(csIt->first.c_str(), dtp))
+			out << "* ";
+		out << NexusToken::EscapeString(csIt->first) << " =";
+		const ListOfDblWeights & p = csIt->second;
+		bool first = true;
+		for (ListOfDblWeights::const_iterator pIt = p.begin(); pIt != p.end(); ++pIt)
+			{
+			const DblWeightToIndexSet & g = *pIt;
+			if (!first)
+				out << ',';
+			out << " \'" << g.first << "' :";
+			NxsSetReader::WriteSetAsNexusValue(g.second, out);
+			first = false;
+			}
+		out << ";\n";
+		}
+	for (std::map<std::string, ListOfIntWeights>::const_iterator csIt = intWtSets.begin(); csIt != intWtSets.end(); ++csIt)
+		{
+		out << "    WtSet ";
+		if (NxsString::case_insensitive_equals(csIt->first.c_str(), dtp))
+			out << "* ";
+		out << NexusToken::EscapeString(csIt->first) << " =";
+		const ListOfIntWeights & p = csIt->second;
+		bool first = true;
+		for (ListOfIntWeights::const_iterator pIt = p.begin(); pIt != p.end(); ++pIt)
+			{
+			const IntWeightToIndexSet & g = *pIt;
+			if (!first)
+				out << ',';
+			out << " \'" << g.first << "' :";
+			NxsSetReader::WriteSetAsNexusValue(g.second, out);
+			first = false;
+			}
+		out << ";\n";
+		}
+	}
+
+
+/*!
+	Returns -1 if `index` is not in `wtset`
+*/
+void NxsTransformationManager::SetDefaultTypeName(const std::string &n)
+	{
+	if (!(n.empty() || IsValidTypeName(n)))
+		{
+		NxsString e(n.c_str());
+		e << " is not the name of a known type (and therefore is not a valid default type)";
+		throw NxsException(e);
+		}
+	def_type = n;
+	}
+
+
+bool NxsTransformationManager::IsEmpty() const
+	{
+	return (userTypeNames.empty()
+			&& dblWtSets.empty()
+			&& intWtSets.empty()
+			&& typeSets.empty()
+			&& (def_type.empty() || !NxsString::case_insensitive_equals(def_type.c_str(), "ORD")));
+	}
+
+/*!
+	Returns -1 if `index` is not in `wtset`
+*/
+double NxsTransformationManager::GetWeightForIndex(const ListOfDblWeights & wtset, unsigned index)
+	{
+	for (ListOfDblWeights::const_iterator wIt = wtset.begin(); wIt != wtset.end(); ++wIt)
+		{
+		if (wIt->second.count(index) > 0)
+			return wIt->first;
+		}
+	return -1.0;
+	}
+
+/*!
+	Returns -1 if `index` is not in `wtset`
+*/
+int NxsTransformationManager::GetWeightForIndex(const ListOfIntWeights & wtset, unsigned index)
+	{
+	for (ListOfIntWeights::const_iterator wIt = wtset.begin(); wIt != wtset.end(); ++wIt)
+		{
+		if (wIt->second.count(index) > 0)
+			return wIt->first;
+		}
+	return -1;
+	}
+
+/*!
+	Raises an NxsNCLAPIException if the `n` is not a type name.
+*/
+bool NxsTransformationManager::IsIntType(const std::string & n) const
+	{
+	std::string capName(n.c_str());
+	NxsString::to_upper(capName);
+	if (standardTypeNames.count(capName) > 0)
+		return true;
+	if (intUserTypes.find(capName) != intUserTypes.end())
+		return true;
+	if (dblUserTypes.find(capName) != dblUserTypes.end())
+		return false;
+	NxsString errormsg = "Type name ";
+	errormsg << n << " not found.";
+	throw NxsNCLAPIException(errormsg);
+	}
+
+
+/*!
+	Returns true if `n` is the name of a known type (standard or user type) -- not case-sensitive.
+*/
+bool NxsTransformationManager::IsValidTypeName(const std::string & n) const
+	{
+	std::string capName(n.c_str());
+	NxsString::to_upper(capName);
+	return (allTypeNames.count(capName) > 0);
+	}
+
+/*!
+	Raises an NxsNCLAPIException if the `n` is not a type name.
+*/
+bool NxsTransformationManager::IsStandardType(const std::string & n) const
+	{
+	std::string capName(n.c_str());
+	NxsString::to_upper(capName);
+	return (standardTypeNames.count(capName) > 0);
+	}
+
+/*! Returns the Stepmatrix for User Type with the name `n`
+
+	Raises an NxsNCLAPIException if the `n` is not a type name or is the name of
+		a builtin type (like "ORDERED")
+*/
+const NxsIntStepMatrix & NxsTransformationManager::GetIntType(const std::string & n) const
+	{
+	std::string capName(n.c_str());
+	NxsString::to_upper(capName);
+	if (IsStandardType(n))
+		throw NxsNCLAPIException("Standard (predefined) types cannot be fetched using GetIntType.");
+
+	std::map<std::string, NxsIntStepMatrix>::const_iterator i = intUserTypes.find(capName);
+	if (i != intUserTypes.end())
+		return i->second;
+	NxsString errormsg = "Type name ";
+	errormsg << n << " not found.";
+	throw NxsNCLAPIException(errormsg);
+	}
+
+/*! Returns the Stepmatrix for User Type with the name `n`
+
+	Raises an NxsNCLAPIException if the `n` is not a type name or is the name of
+		a builtin type (like "ORDERED")
+*/
+const NxsRealStepMatrix & NxsTransformationManager::GetRealType(const std::string & n) const
+	{
+	std::string capName(n.c_str());
+	NxsString::to_upper(capName);
+	std::map<std::string, NxsRealStepMatrix>::const_iterator i = dblUserTypes.find(capName);
+	if (i != dblUserTypes.end())
+		return i->second;
+	NxsString errormsg = "Type name ";
+	errormsg << n << " not found.";
+	throw NxsNCLAPIException(errormsg);
+	}
+
+const NxsIntStepMatrix::IntMatrix NxsTransformationManager::GetOrderedType(unsigned nStates)
+	{
+	NxsIntStepMatrix::IntVec v(nStates, 1);
+	NxsIntStepMatrix::IntMatrix m(nStates, v);
+	for (unsigned i = 0; i < nStates; ++i)
+		m[i][i] = 0;
+	return m;
+	}
+
+const NxsIntStepMatrix::IntMatrix NxsTransformationManager::GetUnorderedType(unsigned nStates)
+	{
+	NxsIntStepMatrix::IntVec v(nStates, 0);
+	NxsIntStepMatrix::IntMatrix m(nStates, v);
+	for (unsigned i = 0; i < nStates; ++i)
+		{
+		for (unsigned j = 0; j < nStates; ++j)
+			{
+			if (i > j)
+				m[i][j] = j - i;
+			else
+				m[i][j] = i - j;
+			}
+		}
+	return m;
+	}
+
+
+/*!
+	Raises an NxsNCLAPIException if the `name` is the name of a "standard" type.
+	Returns true if another user type was replaced.
+*/
+bool NxsTransformationManager::AddIntType(const std::string &name, const NxsIntStepMatrix &s)
+	{
+	std::string capName(name.c_str());
+	NxsString::to_upper(capName);
+	if (standardTypeNames.count(capName) > 0)
+		{
+		NxsString errormsg(name.c_str());
+		errormsg <<  " is a predefined type which cannot be redefined";
+		throw NxsNCLAPIException(errormsg);
+		}
+	bool replacing = intUserTypes.find(capName) != intUserTypes.end();
+	if (!replacing &&  dblUserTypes.find(capName) != dblUserTypes.end())
+		{
+		replacing = true;
+		dblUserTypes.erase(capName);
+		}
+	intUserTypes.insert(pair<std::string, NxsIntStepMatrix>(capName, s));
+	userTypeNames.insert(name);
+	allTypeNames.insert(capName);
+	return replacing;
+	}
+
+/*!
+	Raises an NxsNCLAPIException if the `name` is the name of a "standard" type.
+	Returns true if another user type was replaced.
+*/
+bool NxsTransformationManager::AddRealType(const std::string &name, const NxsRealStepMatrix &s)
+	{
+	std::string capName(name.c_str());
+	NxsString::to_upper(capName);
+	if (standardTypeNames.count(capName) > 0)
+		{
+		NxsString errormsg(name.c_str());
+		errormsg <<  " is a predefined type which cannot be redefined";
+		throw NxsNCLAPIException(errormsg);
+		}
+	bool replacing = dblUserTypes.find(capName) != dblUserTypes.end();
+	if (!replacing &&  intUserTypes.find(capName) != intUserTypes.end())
+		{
+		replacing = true;
+		intUserTypes.erase(capName);
+		}
+	dblUserTypes.insert(pair<std::string, NxsRealStepMatrix>(capName, s));
+	userTypeNames.insert(capName);
+	allTypeNames.insert(capName);
+	return replacing;
+	}
+
+bool NxsTransformationManager::AddIntWeightSet(const std::string &name, const NxsTransformationManager::ListOfIntWeights &ws, bool isDefault)
+	{
+	std::string capName(name.c_str());
+	NxsString::to_upper(capName);
+	bool replacing = intWtSets.find(capName) != intWtSets.end();
+	if (!replacing &&  dblWtSets.find(capName) != dblWtSets.end())
+		{
+		replacing = true;
+		dblWtSets.erase(capName);
+		}
+	intWtSets[capName] = ws;
+	if (isDefault)
+		def_wtset = name;
+	return replacing;
+	}
+
+bool NxsTransformationManager::AddRealWeightSet(const std::string &name, const NxsTransformationManager::ListOfDblWeights &ws, bool isDefault)
+	{
+	std::string capName(name.c_str());
+	NxsString::to_upper(capName);
+	bool replacing = dblWtSets.find(capName) != dblWtSets.end();
+	if (!replacing &&  intWtSets.find(capName) != intWtSets.end())
+		{
+		replacing = true;
+		intWtSets.erase(capName);
+		}
+	dblWtSets[capName] = ws;
+	if (isDefault)
+		{
+		def_wtset = name;
+		}
+	return replacing;
+	}
+
+bool NxsTransformationManager::AddTypeSet(const std::string &name, const NxsPartition &ts, bool isDefault)
+	{
+	std::string capName(name.c_str());
+	NxsString::to_upper(capName);
+	bool replacing = typeSets.find(capName) != typeSets.end();
+	typeSets[capName] = ts;
+	if (isDefault)
+		{
+		def_typeset = name;
+		}
+	return replacing;
+	}
+
+std::set<std::string> NxsTransformationManager::GetWeightSetNames() const
+	{
+	std::set<std::string> s;
+	std::map<std::string, ListOfDblWeights>::const_iterator dws = dblWtSets.begin();
+	for (; dws != dblWtSets.end(); ++dws)
+		s.insert(dws->first);
+	std::map<std::string, ListOfIntWeights>::const_iterator iws = intWtSets.begin();
+	for (; iws != intWtSets.end(); ++iws)
+		s.insert(iws->first);
+	return s;
+	}
+
+std::set<std::string> NxsTransformationManager::GetTypeSetNames() const
+	{
+	std::set<std::string> s;
+	std::map<std::string, ListOfTypeNamesToSets>::const_iterator dws = typeSets.begin();
+	for (; dws != typeSets.end(); ++dws)
+		s.insert(dws->first);
+	return s;
+	}
+
+
+void NxsAssumptionsBlock::AddCharPartition(const std::string & name, const NxsPartition &p)
+	{
+	charPartitions[name] = p;
+	}
+void NxsAssumptionsBlock::AddTaxPartition(const std::string & name, const NxsPartition &p)
+	{
+	taxPartitions[name] = p;
+	}
+
+void NxsAssumptionsBlock::AddTreePartition(const std::string & name, const NxsPartition &p)
+	{
+	treePartitions[name] = p;
+	}
+
+void NxsAssumptionsBlock::AddCodeSet(const std::string & name, const NxsPartition &p, bool asterisked)
+	{
+	codeSets[name] = p;
+	if (asterisked)
+		def_codeSet.assign(name.c_str());
+	}
+
+void NxsAssumptionsBlock::AddCodonPosSet(const std::string & name, const NxsPartition &p, bool asterisked)
+	{
+	codonPosSets[name] = p;
+	if (asterisked)
+		def_codonPosSet.assign(name.c_str());
+	}
+
+
+void NxsAssumptionsBlock::WriteOptions(std::ostream & out) const
+	{
+	const std::string d = transfMgr.GetDefaultTypeName();
+	if ((!d.empty() && !NxsString::case_insensitive_equals(d.c_str(), "ORD"))
+		|| gapsAsNewstate || polyTCountValue != POLY_T_COUNT_UNKNOWN)
+		{
+		out << "    OPTIONS";
+		if (!d.empty())
+			out << " DefType = " << NxsString::GetEscaped(d);
+		if (gapsAsNewstate)
+			out << " GapMode = NewState";
+		if (polyTCountValue == POLY_T_COUNT_MIN)
+			out << " PolyTCount = MinSteps";
+		else if (polyTCountValue == POLY_T_COUNT_MAX)
+			out << " PolyTCount = MaxSteps";
+		out << ";\n";
+		}
+	}
+
+bool NxsAssumptionsBlock::HasAssumptionsBlockCommands() const
+	{
+	return (gapsAsNewstate
+			|| !transfMgr.IsEmpty()
+			|| !exsets.empty()
+			||  polyTCountValue != POLY_T_COUNT_UNKNOWN);
+	}
+bool NxsAssumptionsBlock::HasSetsBlockCommands() const
+	{
+	return (!charsets.empty() || !taxsets.empty() || !treesets.empty()
+			||!charPartitions.empty() || !taxPartitions.empty() || !treePartitions.empty() );
+	}
+bool NxsAssumptionsBlock::HasCodonsBlockCommands() const
+	{
+	return (!codeSets.empty() || !codonPosSets.empty() || !codesMgr.IsEmpty());
+	}
+
+bool NxsAssumptionsBlock::CanReadBlockType(const NxsToken & token)
+	{
+	if (token.Equals("ASSUMPTIONS"))
+		{
+		NCL_BLOCKTYPE_ATTR_NAME = "ASSUMPTIONS";
+		readAs = ASSUMPTIONS_BLOCK_READ;
+		return true;
+		}
+	if (token.Equals("SETS"))
+		{
+		NCL_BLOCKTYPE_ATTR_NAME = "SETS";
+		readAs = SETS_BLOCK_READ;
+		return true;
+		}
+	if (token.Equals("CODONS"))
+		{
+		NCL_BLOCKTYPE_ATTR_NAME = "CODONS";
+		readAs = CODONS_BLOCK_READ;
+		return true;
+		}
+	return token.Equals(GetID());
+	}
+
+
+
+void NxsAssumptionsBlock::WriteAsNexus(std::ostream &out) const
+	{
+	NxsAssumptionsBlock *t = const_cast<NxsAssumptionsBlock *>(this); /*title switching*/
+	const std::string ft = title;
+	t->title.clear();
+	NameOfAssumpBlockAsRead treatAs = this->readAs;
+	if (treatAs == UNREAD_OR_GENERATED_BLOCK)
+		{
+		/*	Precedence order here is reverse the order of writing. This delays
+			skipped blocks to the last among SETS, CODONS, and ASSUMPTIONS blocks.
+		*/
+		if (HasAssumptionsBlockCommands())
+			treatAs = ASSUMPTIONS_BLOCK_READ;
+		else if (HasCodonsBlockCommands())
+			treatAs = CODONS_BLOCK_READ;
+		else if (HasSetsBlockCommands())
+			treatAs = SETS_BLOCK_READ;
+		}
+	try
+		{
+		if (HasSetsBlockCommands())
+			{
+			if (treatAs == SETS_BLOCK_READ && !IsAutoGeneratedTitle())
+				t->title = ft;
+			out << "BEGIN SETS;\n";
+			WriteBasicBlockCommands(out);
+			this->WriteTaxSet(out);
+			this->WriteCharSet(out);
+			this->WriteTreeSet(out);
+			this->WriteTaxPartition(out);
+			this->WriteCharPartition(out);
+			this->WriteTreePartition(out);
+			if (treatAs == SETS_BLOCK_READ)
+				{
+				WriteSkippedCommands(out);
+				t->title.clear();
+				}
+			out << "END;\n";
+			}
+		if (HasCodonsBlockCommands())
+			{
+			if (treatAs == CODONS_BLOCK_READ && !IsAutoGeneratedTitle())
+				t->title = ft;
+			out << "BEGIN CODONS;\n";
+			WriteBasicBlockCommands(out);
+			this->codesMgr.WriteGeneticCode(out);
+			this->WriteCodonPosSet(out);
+			this->WriteCodeSet(out);
+			if (treatAs == CODONS_BLOCK_READ)
+				{
+				WriteSkippedCommands(out);
+				t->title.clear();
+				}
+			out << "END;\n";
+			}
+		if (HasAssumptionsBlockCommands())
+			{
+			if (treatAs == ASSUMPTIONS_BLOCK_READ && !IsAutoGeneratedTitle())
+				t->title = ft;
+			out << "BEGIN ASSUMPTIONS;\n";
+			WriteBasicBlockCommands(out);
+			this->WriteExSet(out);
+			this->transfMgr.WriteUserType(out);
+			this->transfMgr.WriteWtSet(out);
+			this->transfMgr.WriteTypeSet(out);
+			this->WriteOptions(out);
+			if (treatAs == ASSUMPTIONS_BLOCK_READ)
+				WriteSkippedCommands(out);
+			out << "END;\n";
+			}
+		}
+	catch (...)
+		{
+		t->title =  ft;
+		throw;
+		}
+	t->title =  ft;
+	}
+
+
+NxsCharactersBlockAPI * NxsAssumptionsBlock::GetCharBlockPtr(int *status)
+	{
+	if (status)
+		*status = GetCharLinkStatus();
+	return charBlockPtr;
+	}
+NxsTaxaBlockAPI * NxsAssumptionsBlock::GetTaxaBlockPtr(int *status)
+	{
+	if (status)
+		*status = GetTaxaLinkStatus();
+	return taxa;
+	}
+NxsTreesBlockAPI * NxsAssumptionsBlock::GetTreesBlockPtr(int *status)
+	{
+	if (status)
+		*status = GetTreesLinkStatus();
+	return treesBlockPtr;
+	}
+
+NxsAssumptionsBlockAPI	*NxsAssumptionsBlock::CreateNewAssumptionsBlock(NxsToken &token)
+	{
+	NxsAssumptionsBlockAPI * aba = NULL;
+	if (nexusReader)
+		{
+		NxsString n("ASSUMPTIONS");
+		NxsBlock * block = nexusReader->CreateBlockFromFactories(n, token, NULL);
+		aba = static_cast<NxsAssumptionsBlockAPI *>(block);
+		}
+	if (aba == NULL)
+		{
+		NxsAssumptionsBlock *ab =  new NxsAssumptionsBlock(NULL);
+		ab->SetImplementsLinkAPI(this->ImplementsLinkAPI());
+		aba = ab;
+		}
+	aba->SetNexus(nexusReader);
+	passedRefOfOwnedBlock = false;
+	createdSubBlocks.push_back(aba);
+	return aba;
+	}
+
+NxsAssumptionsBlockAPI	*NxsAssumptionsBlock::GetAssumptionsBlockForCharBlock(NxsCharactersBlockAPI *cb, NxsBlockLinkStatus status, NxsToken &token)
+	{
+	int cbstatus;
+	NxsCharactersBlockAPI * thisCB = GetCharBlockPtr(&cbstatus);
+	if (thisCB == NULL)
+		{
+		SetCharBlockPtr(cb, status);
+		return this;
+		}
+	else if (cb == thisCB)
+		{
+		int f = cbstatus & NxsBlock::BLOCK_LINK_UNUSED_MASK;
+		if (f == status)
+			return this;
+		if (!(cbstatus & NxsBlock::BLOCK_LINK_USED))
+			{
+			if (cbstatus == BLOCK_LINK_UNINITIALIZED || cbstatus == BLOCK_LINK_UNKNOWN_STATUS)
+				SetCharLinkStatus(status);
+			}
+		else
+			{
+			/* return the same block for these two link statuses since they are both "safe" */
+			if ((f | status) == BLOCK_LINK_TO_ONLY_CHOICE)
+				charLinkStatus |= BLOCK_LINK_TO_ONLY_CHOICE;
+			}
+		return this;
+		}
+	for (VecAssumpBlockPtr::iterator bIt = createdSubBlocks.begin(); bIt != createdSubBlocks.end(); ++bIt)
+		{
+		NxsAssumptionsBlockAPI	* c = *bIt;
+		if (c && cb == c->GetCharBlockPtr(&cbstatus) && (cbstatus & BLOCK_LINK_UNUSED_MASK) == status)
+			return c;
+		}
+	
+	NxsAssumptionsBlockAPI	*effBlock = CreateNewAssumptionsBlock(token);
+	effBlock->SetCharBlockPtr(cb, status);
+	return effBlock;
+	}
+
+NxsAssumptionsBlockAPI	*NxsAssumptionsBlock::GetAssumptionsBlockForTaxaBlock(NxsTaxaBlockAPI *cb, NxsBlockLinkStatus status, NxsToken &token)
+	{
+	int cbstatus;
+	NxsTaxaBlockAPI * thisCB = GetTaxaBlockPtr(&cbstatus);
+	if (thisCB == NULL)
+		{
+		SetTaxaBlockPtr(cb, status);
+		return this;
+		}
+	else if (cb == GetTaxaBlockPtr(&cbstatus))
+		{
+		int f = cbstatus & NxsBlock::BLOCK_LINK_UNUSED_MASK;
+		if (f == status)
+			return this;
+		if (!(cbstatus & NxsBlock::BLOCK_LINK_USED))
+			{
+			if (cbstatus == BLOCK_LINK_UNINITIALIZED || cbstatus == BLOCK_LINK_UNKNOWN_STATUS)
+				{
+				SetTaxaLinkStatus(status);
+				return this;
+				}
+			}
+		else
+			{
+			/* return the same block for these two link statuses since they are both "safe" */
+			if ((f | status) == (BLOCK_LINK_FROM_LINK_CMD | BLOCK_LINK_TO_ONLY_CHOICE))
+				{
+				taxaLinkStatus |= (BLOCK_LINK_FROM_LINK_CMD | BLOCK_LINK_TO_ONLY_CHOICE);
+				return this;
+				}
+			}
+		}
+	for (VecAssumpBlockPtr::iterator bIt = createdSubBlocks.begin(); bIt != createdSubBlocks.end(); ++bIt)
+		{
+		NxsAssumptionsBlockAPI	* c = *bIt;
+		if (c && cb == c->GetTaxaBlockPtr(&cbstatus) && (cbstatus & BLOCK_LINK_UNUSED_MASK) == status)
+			return c;
+		}
+	NxsAssumptionsBlockAPI	*effBlock = CreateNewAssumptionsBlock(token);
+	effBlock->SetTaxaBlockPtr(cb, status);
+	return effBlock;
+	}
+NxsAssumptionsBlockAPI	*NxsAssumptionsBlock::GetAssumptionsBlockForTreesBlock(NxsTreesBlockAPI *cb, NxsBlockLinkStatus status, NxsToken &token)
+	{
+	int cbstatus;
+	NxsTreesBlockAPI * thisCB = GetTreesBlockPtr(&cbstatus);
+	if (thisCB == NULL)
+		{
+		SetTreesBlockPtr(cb, status);
+		return this;
+		}
+	else if (cb == GetTreesBlockPtr(&cbstatus))
+		{
+		int f = cbstatus & NxsBlock::BLOCK_LINK_UNUSED_MASK;
+		if (f == status)
+			return this;
+		if (!(cbstatus & NxsBlock::BLOCK_LINK_USED))
+			{
+			if (cbstatus == BLOCK_LINK_UNINITIALIZED || cbstatus == BLOCK_LINK_UNKNOWN_STATUS)
+				{
+				SetTreesLinkStatus(status);
+				return this;
+				}
+			}
+		else
+			{
+			/* return the same block for these two link statuses since they are both "safe" */
+			if ((f | status) == (BLOCK_LINK_FROM_LINK_CMD | BLOCK_LINK_TO_ONLY_CHOICE))
+				{
+				treesLinkStatus |= (BLOCK_LINK_FROM_LINK_CMD | BLOCK_LINK_TO_ONLY_CHOICE);
+				return this;
+				}
+			}
+		}
+	for (VecAssumpBlockPtr::iterator bIt = createdSubBlocks.begin(); bIt != createdSubBlocks.end(); ++bIt)
+		{
+		NxsAssumptionsBlockAPI	* c = *bIt;
+		if (c && cb == c->GetTreesBlockPtr(&cbstatus) && (cbstatus & BLOCK_LINK_UNUSED_MASK) == status)
+			return c;
+		}
+	NxsAssumptionsBlockAPI	*effBlock = CreateNewAssumptionsBlock(token);
+	effBlock->SetTreesBlockPtr(cb, status);
+	return effBlock;
+	}
+
+NxsAssumptionsBlockAPI	*NxsAssumptionsBlock::GetAssumptionsBlockForCharTitle(const char *charTitle, NxsToken &token, const char *cmd)
+	{
+	if (!nexusReader)
+		NxsNCLAPIException("No NxsReader when reading Assumptions block.");
+	unsigned ncb = 0;
+	NxsCharactersBlockAPI * cb = nexusReader->GetCharBlockByTitle(charTitle, &ncb);
+	if (charTitle == NULL)
+		{
+		int cbstatus;
+		NxsCharactersBlockAPI * thisCB = GetCharBlockPtr(&cbstatus);
+		int ust = cbstatus & NxsBlock::BLOCK_LINK_UNUSED_MASK;
+		if (thisCB != NULL && ust != BLOCK_LINK_UNINITIALIZED && ust != BLOCK_LINK_UNKNOWN_STATUS)
+			{
+			if (ncb > 1 && !blockwideCharsLinkEstablished)
+				{
+				errormsg = "Multiple CHARACTERS blocks have been encountered, but a ";
+				errormsg += cmd;
+				errormsg += " command was found which does not specify which CHARACTERS block it uses.";
+				errormsg << "The first CHARACTERS block that was used by this " << this->GetID() << " block will be used";
+				if (nexusReader)
+					nexusReader->NexusWarnToken(errormsg, NxsReader::AMBIGUOUS_CONTENT_WARNING, token);
+				errormsg.clear();
+				}
+			return this;
+			}
+		}
+	NxsAssumptionsBlockAPI * effectiveB = NULL;
+	if (cb == NULL)
+		{
+		if (charBlockPtr)
+			{
+			const NxsString	 t=charBlockPtr->GetID();
+			if (t.empty())
+				{
+				if (charTitle == NULL)
+					effectiveB = this;
+				}
+			else
+				{
+				if (NxsString::case_insensitive_equals(charTitle, t.c_str()))
+					effectiveB = this;
+				}
+			}
+		if (effectiveB == NULL)
+			{
+			errormsg.clear();
+			errormsg << "A CHARACTERS (or DATA) block ";
+			if (charTitle)
+				errormsg << "with the title " << NxsString::GetEscaped(charTitle);
+			errormsg << " must precede an " << NCL_BLOCKTYPE_ATTR_NAME << " block with a " <<  cmd <<  " command.";
+			errormsg << "\n(If such a block exists, then this program may not be using an API for the NCL library that supports block linking).";
+			throw NxsException(errormsg, token);
+			}
+		}
+	else if (ncb > 1)
+		{
+		errormsg = "Multiple CHARACTERS blocks have been encountered, but a ";
+		errormsg += cmd;
+		errormsg += " command was found which does not specify which CHARACTERS block it uses.   The most recent CHARACTERS block will be used.";
+		if (nexusReader)
+			nexusReader->NexusWarnToken(errormsg, NxsReader::AMBIGUOUS_CONTENT_WARNING, token);
+		errormsg.clear();
+		effectiveB = GetAssumptionsBlockForCharBlock(cb, NxsBlock::BLOCK_LINK_TO_MOST_RECENT, token);
+		}
+	else
+		{
+		NxsBlockLinkStatus statusRequested = (charTitle == NULL ? NxsBlock::BLOCK_LINK_TO_ONLY_CHOICE : NxsBlock::BLOCK_LINK_FROM_LINK_CMD);
+		effectiveB = GetAssumptionsBlockForCharBlock(cb, statusRequested, token);
+		}
+	effectiveB->FlagCharBlockAsUsed();
+	return effectiveB;
+	}
+
+NxsAssumptionsBlockAPI	*NxsAssumptionsBlock::GetAssumptionsBlockForTaxaTitle(const char *taxTitle, NxsToken &token, const char *cmd)
+	{
+	if (!nexusReader)
+		NxsNCLAPIException("No NxsReader when reading Assumptions block.");
+	if (taxTitle == NULL)
+		{
+		int cbstatus;
+		NxsTaxaBlockAPI * thisCB = GetTaxaBlockPtr(&cbstatus);
+		int ust = cbstatus & NxsBlock::BLOCK_LINK_UNUSED_MASK;
+		if (thisCB != NULL && ust != BLOCK_LINK_UNINITIALIZED && ust != BLOCK_LINK_UNKNOWN_STATUS)
+			return this;
+		}
+	unsigned ncb = 0;
+	NxsTaxaBlockAPI * cb = nexusReader->GetTaxaBlockByTitle(taxTitle, &ncb);
+	NxsAssumptionsBlockAPI *effectiveB = NULL;
+	if (cb == NULL)
+		{
+		if (taxa)
+			{
+			const NxsString	 t=taxa->GetID();
+			if (t.empty())
+				{
+				if (taxTitle == NULL)
+					effectiveB = this;
+				}
+			else
+				{
+				if (NxsString::case_insensitive_equals(taxTitle, t.c_str()))
+					effectiveB = this;
+				}
+			}
+		if (effectiveB == NULL)
+			{
+			errormsg.clear();
+			errormsg <<  "A TAXA block ";
+			if (taxTitle)
+				errormsg << "with the title " << NxsString::GetEscaped(taxTitle);
+			errormsg << " must precede an " << NCL_BLOCKTYPE_ATTR_NAME << " block with a " <<  cmd <<  " command.";
+			errormsg << "\n(If such a block exists, then this program may not be using an API for the NCL library that supports block linking).";
+			throw NxsException(errormsg, token);
+			}
+		}
+	else if (ncb > 1)
+		{
+		errormsg = "Multiple TAXA blocks have been encountered, but a ";
+		errormsg += cmd;
+		errormsg += " command was found which does not specify which TAXA block it uses.  The most recent TAXA block will be used.";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::AMBIGUOUS_CONTENT_WARNING, token);
+		errormsg.clear();
+		effectiveB = GetAssumptionsBlockForTaxaBlock(cb, NxsBlock::BLOCK_LINK_TO_MOST_RECENT, token);
+		}
+	else
+		{
+		NxsBlockLinkStatus statusRequested = (taxTitle == NULL ? NxsBlock::BLOCK_LINK_TO_ONLY_CHOICE : NxsBlock::BLOCK_LINK_FROM_LINK_CMD);
+		effectiveB = GetAssumptionsBlockForTaxaBlock(cb, statusRequested, token);
+		}
+	effectiveB->FlagTaxaBlockAsUsed();
+	return effectiveB;
+	}
+
+NxsAssumptionsBlockAPI	*NxsAssumptionsBlock::GetAssumptionsBlockForTreesTitle(const char *treesTitle, NxsToken &token, const char *cmd)
+	{
+	if (!nexusReader)
+		NxsNCLAPIException("No NxsReader when reading Assumptions block.");
+	if (treesTitle == NULL)
+		{
+		int cbstatus;
+		NxsTreesBlockAPI * thisCB = GetTreesBlockPtr(&cbstatus);
+		int ust = cbstatus & NxsBlock::BLOCK_LINK_UNUSED_MASK;
+		if (thisCB != NULL && ust != BLOCK_LINK_UNINITIALIZED && ust != BLOCK_LINK_UNKNOWN_STATUS)
+			return this;
+		}
+	unsigned ncb = 0;
+	NxsTreesBlockAPI * cb = nexusReader->GetTreesBlockByTitle(treesTitle, &ncb);
+	NxsAssumptionsBlockAPI *effectiveB = NULL;
+	if (cb == NULL)
+		{
+		if (treesBlockPtr)
+			{
+			const NxsString	 t=treesBlockPtr->GetID();
+			if (t.empty())
+				{
+				if (treesTitle == NULL)
+					effectiveB = this;
+				}
+			else
+				{
+				if (NxsString::case_insensitive_equals(treesTitle, t.c_str()))
+					effectiveB = this;
+				}
+			}
+		if (effectiveB == NULL)
+			{
+			errormsg.clear();
+			errormsg <<  "A TREES block";
+			if (treesTitle)
+				errormsg << "with the title " << NxsString::GetEscaped(treesTitle);
+			errormsg << " must precede an " << NCL_BLOCKTYPE_ATTR_NAME << " block with a " <<  cmd <<  " command.";
+			errormsg << "\n(If such a block exists, then this program may not be using an API for the NCL library that supports block linking).";
+			throw NxsException(errormsg, token);
+			}
+		}
+	else if (ncb > 1)
+		{
+		errormsg = "Multiple TREES blocks have been encountered, but a ";
+		errormsg += cmd;
+		errormsg += " command was found which does not specify which TREES block it uses.  The most recent TREES block will be used.";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::AMBIGUOUS_CONTENT_WARNING, token);
+		errormsg.clear();
+		effectiveB = GetAssumptionsBlockForTreesBlock(cb, NxsBlock::BLOCK_LINK_TO_MOST_RECENT, token);
+		}
+	else
+		{
+		NxsBlockLinkStatus statusRequested = (treesTitle == NULL ? NxsBlock::BLOCK_LINK_TO_ONLY_CHOICE : NxsBlock::BLOCK_LINK_FROM_LINK_CMD);
+		effectiveB = GetAssumptionsBlockForTreesBlock(cb, statusRequested, token);
+		}
+	effectiveB->FlagTreesBlockAsUsed();
+	return effectiveB;
+	}
+
+void NxsAssumptionsBlock::SetCharLinkStatus(NxsBlockLinkStatus s)
+	{
+	if (charLinkStatus & NxsBlock::BLOCK_LINK_USED)
+		{
+		throw NxsNCLAPIException("Resetting a used charLinkStatus");
+		}
+	charLinkStatus = s;
+	}
+
+void NxsAssumptionsBlock::SetTaxaLinkStatus(NxsBlockLinkStatus s)
+	{
+	if (taxaLinkStatus & NxsBlock::BLOCK_LINK_USED)
+		{
+		throw NxsNCLAPIException("Resetting a used taxaLinkStatus");
+		}
+	taxaLinkStatus = s;
+	}
+
+void NxsAssumptionsBlock::SetTreesLinkStatus(NxsBlockLinkStatus s)
+	{
+	if (treesLinkStatus & NxsBlock::BLOCK_LINK_USED)
+		{
+		throw NxsNCLAPIException("Resetting a used charLinkStatus");
+		}
+	treesLinkStatus = s;
+	}
+
+void NxsAssumptionsBlock::SetCharBlockPtr(NxsCharactersBlockAPI * c, NxsBlockLinkStatus s)
+	{
+	SetCharLinkStatus(s);
+	charBlockPtr = c;
+	}
+
+void NxsAssumptionsBlock::SetTaxaBlockPtr(NxsTaxaBlockAPI *c, NxsBlockLinkStatus s)
+	{
+	SetTaxaLinkStatus(s);
+	taxa = c;
+	}
+
+void NxsAssumptionsBlock::SetTreesBlockPtr(NxsTreesBlockAPI * c, NxsBlockLinkStatus s)
+	{
+	SetTreesLinkStatus(s);
+	treesBlockPtr = c;
+	}
+
+/*!
+	Sets NCL_BLOCKTYPE_ATTR_NAME = "ASSUMPTIONS", charBlockPtr = NULL, and taxa = t. Assumes taxa is non-NULL.
+*/
+NxsAssumptionsBlock::NxsAssumptionsBlock(
+  NxsTaxaBlockAPI *t)	/* pointer to the taxa block */
+	:taxa(t),
+	charBlockPtr(NULL),
+	treesBlockPtr(NULL),
+	charLinkStatus(NxsBlock::BLOCK_LINK_UNINITIALIZED),
+	taxaLinkStatus(NxsBlock::BLOCK_LINK_UNINITIALIZED),
+	treesLinkStatus(NxsBlock::BLOCK_LINK_UNINITIALIZED),
+	passedRefOfOwnedBlock(false)
+	{
+	taxaLinkStatus = (t == NULL ? NxsBlock::BLOCK_LINK_UNINITIALIZED : NxsBlock::BLOCK_LINK_UNKNOWN_STATUS);
+	NCL_BLOCKTYPE_ATTR_NAME = "ASSUMPTIONS";
+	Reset();
+	}
+
+/*!
+	Nothing needs to be done in the destructor.
+*/
+NxsAssumptionsBlock::~NxsAssumptionsBlock()
+	{
+	}
+
+/*!
+	Makes data member taxa point to 'tb'. Assumes tb is non-NULL.
+	NOTEAPICHANGE: In v2.1 this can throw a NxsNCLAPIException if the Assumptions block has been used, but not reset
+	before the pointer is reassigned.
+*/
+void NxsAssumptionsBlock::ReplaceTaxaBlockPtr(
+  NxsTaxaBlockAPI *tb)	/* pointer to new NxsTaxaBlockAPI object */
+	{
+	NCL_ASSERT(tb != NULL);
+	if (tb != taxa)
+		SetTaxaBlockPtr(tb, NxsBlock::BLOCK_LINK_UNKNOWN_STATUS);
+	}
+
+/*!
+	Returns the number of character sets stored.
+*/
+int NxsAssumptionsBlock::GetNumCharSets() const
+	{
+	return (int)charsets.size();
+	}
+
+/*!
+	Erases 'names' vector, then fills 'names' with the names of all stored character sets.
+*/
+void NxsAssumptionsBlock::GetCharSetNames(
+  NxsStringVector &names) const	/* the vector in which to store the names */ /*v2.1to2.2 3 */
+	{
+	names.erase(names.begin(), names.end());
+	NxsUnsignedSetMap::const_iterator i;
+	for (i = charsets.begin(); i != charsets.end(); i++)
+		names.push_back((*i).first);
+	}
+
+/*!
+	Returns pointer to character set having name 'nm'.
+*/
+const NxsUnsignedSet *NxsAssumptionsBlock::GetCharSet(
+  NxsString n) const /* the name of the character set to return */ /*v2.1to2.2 4 */
+	{
+	NxsUnsignedSetMap::const_iterator it = charsets.find(n); /*v2.1to2.2 5 */
+	if (it == charsets.end())
+		return NULL;
+	return &(it->second);
+	}
+
+/*!
+	Returns the number of character partitions stored.
+*/
+int NxsAssumptionsBlock::GetNumCharPartitions() /*v2.1to2.2 6 */
+	{
+	return (int)charPartitions.size();
+	}
+
+/*!
+	Erases 'names' vector, then fills 'names' with the names of all stored character partitions.
+*/
+void NxsAssumptionsBlock::GetCharPartitionNames(
+	vector<std::string> &names)	/* the vector in which to store the names */ /*v2.1to2.2 6 */
+	{
+	names.erase(names.begin(), names.end());
+	NxsPartitionsByName::const_iterator i;
+	for (i = charPartitions.begin(); i != charPartitions.end(); i++)
+	names.push_back((*i).first);
+	}
+
+/*!
+	Returns pointer to character partition having name 'nm'.
+*/
+const NxsPartition *NxsAssumptionsBlock::GetCharPartition(
+	std::string nm) const /* the name of the character set to return */
+	{
+	NxsPartitionsByName::const_iterator it = charPartitions.find(nm);
+	if (it == charPartitions.end())
+		return NULL;
+	return &(it->second);
+	}
+
+/*!
+	Returns the number of taxon sets stored.
+*/
+int NxsAssumptionsBlock::GetNumTaxSets()/*v2.1to2.2 6 */
+	{
+	return (int)taxsets.size();
+	}
+
+/*!
+	Erases 'names' vector, then fills 'names' with the names of all stored taxon sets.
+*/
+void NxsAssumptionsBlock::GetTaxSetNames(
+  NxsStringVector &names)	/* the vector in which to store the names */ /*v2.1to2.2 7 */
+	{
+	names.erase(names.begin(), names.end());
+	NxsUnsignedSetMap::const_iterator i;
+	for (i = taxsets.begin(); i != taxsets.end(); i++)
+		names.push_back((*i).first);
+	}
+
+/*!
+	Returns reference to taxon set having name 'nm'.
+*/
+NxsUnsignedSet &NxsAssumptionsBlock::GetTaxSet( /*v2.1to2.2 8 */
+  NxsString nm) /* the name of the taxon set to return */ /*v2.1to2.2 9 */
+	{
+	return taxsets[nm]; /*v2.1to2.2 10 */
+	}
+
+
+/*!
+	Returns the number of exclusion sets stored.
+*/
+int NxsAssumptionsBlock::GetNumExSets() /*v2.1to2.2 6 */
+	{
+	return (int)exsets.size();
+	}
+
+/*!
+	Erases names, then fills names with the names of all stored exclusion sets.
+*/
+void NxsAssumptionsBlock::GetExSetNames(
+  NxsStringVector &names)	/* the vector in which to store the names */ /*v2.1to2.2 7 */
+	{
+	names.erase(names.begin(), names.end());
+	NxsUnsignedSetMap::const_iterator i;
+	for (i = exsets.begin(); i != exsets.end(); i++)
+		names.push_back((*i).first);
+	}
+
+/*!
+	Returns reference to exclusion set having name 'nm'.
+*/
+NxsUnsignedSet &NxsAssumptionsBlock::GetExSet( /*v2.1to2.2 8 */
+  NxsString nm) /* the name of the exclusion set to return */ /*v2.1to2.2 9 */
+	{
+	return exsets[nm]; /*v2.1to2.2 11 */
+	}
+
+/*!
+	Returns name of default exclusion set. If returned string has zero length, then no default exclusion set was defined
+	in the data set.
+*/
+NxsString NxsAssumptionsBlock::GetDefExSetName() /*v2.1to2.2 12 */
+	{
+	return def_exset;
+	}
+
+/*!
+	Applies exclusion set having name 'nm' by calling the ApplyExset method of the NxsCharactersBlockAPI or
+	NxsCharactersBlockAPI-derived object stored in the charBlockPtr pointer (which will be whichever block last called the
+	NxsAssumptionsBlock::SetCallback method).
+*/
+void NxsAssumptionsBlock::ApplyExset(
+  NxsString n) /* the name of the exclusion set to apply */ /*v2.1to2.2 4 */
+	{
+	NxsString nm(n.c_str()); // null-op needed for ease of generation of v2.2 from 2.1 code
+	NCL_ASSERT(charBlockPtr != NULL);
+	charBlockPtr->ApplyExset(exsets[nm]);
+	}
+
+NxsAssumptionsBlockAPI * NxsAssumptionsBlock::DealWithPossibleParensInCharDependentCmd(NxsToken &token, const char *cmd, const std::vector<std::string> *unsupported, bool * isVect)
+	{
+	token.GetNextToken();
+	NxsString charblock_name;
+	errormsg.clear();
+	if (isVect)
+		*isVect = false;
+	if (token.Equals("("))
+		{
+		token.GetNextToken();
+		while (!token.Equals(")"))
+			{
+			if (token.Equals("CHARACTERS"))
+				{
+				NxsString t;
+				t << "after \"(Characters\" in a " << cmd << " command";
+				DemandEquals(token, t.c_str());
+				token.GetNextToken();
+				charblock_name = token.GetToken();
+				}
+			else if (token.Equals("VECTOR"))
+				{
+				if (!isVect)
+					GenerateNxsException(token, "VECTOR-style set definitions are not currently supported");
+				else
+					*isVect = true;
+				}
+			else if (token.Equals("NOTOKENS"))
+				GenerateNxsException(token, "NOTOKENS-style set definitions are not currently supported");
+			else if (token.Equals(";"))
+				{
+				NxsString s;
+				s << "; encountered in " << cmd << " command before parentheses were closed";
+				GenerateNxsException(token, s.c_str());
+				}
+			else if (!(token.Equals("STANDARD") || token.Equals("TOKENS")) && nexusReader)
+				{
+				bool found = false;
+				if (unsupported)
+					{
+					for (std::vector<std::string>::const_iterator u = unsupported->begin(); u != unsupported->end(); ++u)
+						{
+						if (token.Equals(u->c_str()))
+							{
+							found = true;
+							break;
+							}
+						}
+					}
+				if (found)
+					{
+					NxsString s;
+					s << "The " << token.GetTokenReference()<< " as a " << cmd << " qualifier is not supported.";
+					GenerateNxsException(token, s.c_str());
+					}
+				else
+					{
+					errormsg  << "Skipping unknown " << cmd << " qualifier: "  << token.GetTokenReference();
+					nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+					errormsg.clear();
+					}
+				}
+			token.GetNextToken();
+			}
+		token.GetNextToken();
+		}
+	const char *cbn = (charblock_name.empty() ? NULL : charblock_name.c_str());
+	NxsString u;
+	u << "in " << cmd << " definition";
+	DemandIsAtEquals(token, u.c_str());
+	NxsAssumptionsBlockAPI * naba = this->GetAssumptionsBlockForCharTitle(cbn, token, cmd);
+	return naba;
+	}
+
+
+/*!
+	Reads and stores information contained in the command TypeSet within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleTypeSet(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	errormsg.clear();
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString typeset_name = token.GetToken();
+	//typeset_name.ToUpper();
+	NxsAssumptionsBlockAPI * effectiveAssumpBlock = DealWithPossibleParensInCharDependentCmd(token, "TypeSet");
+	token.GetNextToken();
+	NCL_ASSERT(effectiveAssumpBlock);
+	NxsPartition newPartition;
+	NxsCharactersBlockAPI *cbp = effectiveAssumpBlock->GetCharBlockPtr();
+	NCL_ASSERT(cbp);
+	effectiveAssumpBlock->ReadPartitionDef(newPartition, *cbp, typeset_name, "Character", "TypeSet", token, false, false, false);
+	NxsTransformationManager &ctm = cbp->GetNxsTransformationManagerRef();
+	for (NxsPartition::const_iterator groupIt = newPartition.begin(); groupIt != newPartition.end(); ++groupIt)
+		{
+		if (!ctm.IsValidTypeName(groupIt->first))
+			{
+			errormsg << "The group name " << groupIt->first << " found in a TypeSet command does not correspond to a known type";
+			throw NxsException(errormsg, token);
+			}
+		}
+	NxsTransformationManager &tm = effectiveAssumpBlock->GetNxsTransformationManagerRef();
+	ctm.AddTypeSet(typeset_name, newPartition, asterisked);
+	tm.AddTypeSet(typeset_name, newPartition, asterisked);
+	}
+
+
+void NxsAssumptionsBlock::HandleUserType(NxsToken& token)
+	{
+	token.GetNextToken();
+	errormsg.clear();
+	if (token.Equals("*"))
+		{
+		errormsg << "An * is ignored in a UserType command";
+		if (nexusReader)
+			nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+		token.GetNextToken();
+		errormsg.clear();
+		}
+	NxsString user_type_name = token.GetToken();
+	//codonPosSetName.ToUpper();
+	token.GetNextToken();
+	NxsString charblock_name;
+	bool floatMat = false;
+	bool cstreeform = false;
+	if (token.Equals("("))
+		{
+		token.GetNextToken();
+		while (!token.Equals(")"))
+			{
+			if (token.Equals("CHARACTERS"))
+				{
+				NxsString t;
+				t << "after \"(Characters\" in a UserType command";
+				DemandEquals(token, t.c_str());
+				token.GetNextToken();
+				charblock_name = token.GetToken();
+				}
+			else if (token.Equals("CSTREE"))
+				cstreeform = true;
+			else if (token.Equals("NOTOKENS"))
+				GenerateNxsException(token, "NOTOKENS-style UserType are not supported");
+			else if (token.Equals("REALMATRIX"))
+				floatMat = true;
+			else if (token.Equals(";"))
+				{
+				NxsString s;
+				s << "; encountered in UserType command before parentheses were closed";
+				GenerateNxsException(token, s.c_str());
+				}
+			else if (!(token.Equals("STEPMATRIX") || token.Equals("TOKENS")) && nexusReader)
+				{
+				errormsg  << "Skipping unknown UserType qualifier: "  << token.GetTokenReference();
+				nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+				errormsg.clear();
+				}
+			token.GetNextToken();
+			}
+		token.GetNextToken();
+		}
+	if (token.Equals("STEPMATRIX") || token.Equals("REALMATRIX"))
+		{
+		errormsg  << "UserType qualifier "<< token.GetTokenReference() << " should occur in parentheses ("<< token.GetTokenReference() <<") ";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::DEPRECATED_WARNING, token);
+		errormsg.clear();
+		token.GetNextToken();
+		}
+	DemandIsAtEquals(token, "in UserType definition");
+
+	const char *cbn = (charblock_name.empty() ? NULL : charblock_name.c_str());
+	NxsAssumptionsBlockAPI * effectiveAssumpBlock =  this->GetAssumptionsBlockForCharTitle(cbn, token, "UserType");
+	NCL_ASSERT(effectiveAssumpBlock);
+	NxsCharactersBlockAPI *cbp = effectiveAssumpBlock->GetCharBlockPtr();
+	NCL_ASSERT(cbp);
+
+	NxsRealStepMatrix::DblMatrix dm;
+	NxsIntStepMatrix::IntMatrix im;
+	std::vector<std::string> symbolsOrder;
+	const std::vector<const NxsDiscreteDatatypeMapper *> mappers = cbp->GetAllDatatypeMappers();
+
+	if (cstreeform)
+		{
+		bool success = false;
+		ProcessedNxsCommand tokenVec;
+		token.GetNextToken();
+		token.ProcessAsCommand(&tokenVec);
+
+		for (std::vector<const NxsDiscreteDatatypeMapper *>::const_iterator mIt = mappers.begin(); !success && mIt != mappers.end(); ++mIt)
+			{
+			const NxsDiscreteDatatypeMapper * mapper = *mIt;
+			std::string s = mapper->GetSymbolsWithGapChar();
+			symbolsOrder.clear();
+			std::map<std::string, unsigned> symMap;
+			for (unsigned i = 0; i < s.length(); ++i)
+				{
+				std::string sym(1, s[i]);
+				symbolsOrder.push_back(sym);
+				symMap[sym] = i;
+				}
+			std::string newick;
+			NxsFullTreeDescription treeDesc(newick, user_type_name, 0);
+			BogusToIndMapper labelToIndMapper;
+			try
+				{
+				NxsTreesBlock::ProcessTokenVecIntoTree(tokenVec, treeDesc, &labelToIndMapper, symMap, false, nexusReader, mapper->IsRespectCase());
+				success = true;
+				}
+			catch (NxsException &x)
+				{
+				if (!labelToIndMapper.queried)
+					throw x;
+				}
+			NxsSimpleTree cstree(treeDesc, 1, 1.0);
+			if (treeDesc.SomeEdgesHaveLengths() && !treeDesc.EdgeLengthsAreAllIntegers())
+				{
+				floatMat = true;
+				dm = cstree.GetDblPathDistances(false);
+				if (dm.size() < symbolsOrder.size())
+					symbolsOrder.resize(dm.size());
+				else if (dm.size() > symbolsOrder.size())
+					success = false;
+				}
+			else
+				{
+				im = cstree.GetIntPathDistances();
+				if (im.size() < symbolsOrder.size())
+					symbolsOrder.resize(im.size());
+				else if (im.size() > symbolsOrder.size())
+					success = false;
+				}
+
+			}
+		if (!success)
+			{
+			errormsg << "No datatype was found with all of the symbols the UserType CSTree";
+			throw NxsException(errormsg, token);
+			}
+		}
+	else
+		{
+		/* BEGIN Read as Stepmatrix section  */
+		token.GetNextToken();
+		NxsString t = token.GetToken();
+		long longNstates;
+		if (!NxsString::to_long(t.c_str(), &longNstates) || longNstates < 2)
+			{
+			errormsg << "Expecting a number of states after the = in the UserType command (the number of states must be greater than one).  Found " << t;
+			throw NxsException(t, token);
+			}
+		const bool respectCase = cbp->IsRespectCase();
+		unsigned nStates = (unsigned) longNstates;
+		NxsRealStepMatrix::DblVec dv(nStates, DBL_MAX);
+		NxsIntStepMatrix::IntVec iv(nStates, INT_MAX);
+		dm.assign(nStates, dv);
+		im.assign(nStates, iv);
+		std::set<char> symbolsSet;
+		for (unsigned i = 0; i < nStates;)
+			{
+			token.GetNextToken();
+			if (token.Equals(";"))
+				{
+				errormsg << "; prematurely terminated the state declaration portion of a UserType stepmatrix.";
+				throw NxsException(t, token);
+				}
+			NxsString tokStr = token.GetToken();
+			if (!respectCase)
+				tokStr.ToUpper();
+			for (NxsString::const_iterator cIt = tokStr.begin(); cIt != tokStr.end(); ++cIt, ++i)
+				{
+				char s = *cIt;
+				if (symbolsSet.count(s) > 0)
+					{
+					errormsg << "State names cannot be repeated in a UserType stepmatrix.  " << s << " was encountered more than once.";
+					throw NxsException(t, token);
+					}
+				bool found = false;
+				for (std::vector<const NxsDiscreteDatatypeMapper *>::const_iterator mIt = mappers.begin(); mIt != mappers.end(); ++mIt)
+					{
+					const NxsDiscreteDatatypeMapper * mapper = *mIt;
+					if (mapper->PositionInSymbolsOrGaps(s) != NXS_INVALID_STATE_CODE)
+						{
+						found = true;
+						break;
+						}
+					}
+				if (!found)
+					{
+					errormsg << "Unrecognized state " << s << "in  UserType stepmatrix.";
+					throw NxsException(t, token);
+					}
+				symbolsSet.insert(s);
+				symbolsOrder.push_back(std::string(1,s));
+				}
+			}
+
+		double currDblWt;
+		long currLongWt;
+
+		for (unsigned i = 0; i < nStates; ++i)
+			{
+			for (unsigned j = 0; j < nStates; ++j)
+				{
+				token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation); // this allows us to deal with sci. not. in weights.
+				token.GetNextToken();
+				NxsString s = token.GetToken();
+				if (i == j && (token.Equals(".") || token.Equals("-")))
+					{
+					im[i][i] = 0;
+					dm[i][i] = 0.0;
+					}
+				else
+					{
+					bool v = NxsString::to_double(s.c_str(), &currDblWt);
+					if (!v)
+						{
+						if (!token.Equals("I") && !token.Equals("INF"))
+							{
+							errormsg << "Expecting a number or i (for infinity) as an element of the UserType stepmatrix. Found " << s;
+							throw NxsException(errormsg, token);
+							}
+						}
+					else
+						{
+						dm[i][j] = currDblWt;
+						if (!floatMat)
+							{
+							floatMat = !NxsString::to_long(s.c_str(), &currLongWt);
+							if (!floatMat)
+								im[i][j] = (int)currLongWt;
+							}
+						}
+					}
+				}
+			}
+		/* END Read as Stepmatrix section  */
+		token.GetNextToken();
+		if (!token.Equals(";"))
+			{
+			errormsg << "Expecting ; at the end of the UserType command. Found "  << token.GetTokenReference();
+			throw NxsException(t, token);
+			}
+		}
+
+	NxsTransformationManager &ctm = cbp->GetNxsTransformationManagerRef();
+	NxsTransformationManager &tm = effectiveAssumpBlock->GetNxsTransformationManagerRef();
+	if (floatMat)
+		{
+		const NxsRealStepMatrix nrsm(symbolsOrder, dm);
+		ctm.AddRealType(user_type_name, nrsm);
+		tm.AddRealType(user_type_name, nrsm);
+		}
+	else
+		{
+		const NxsIntStepMatrix nism(symbolsOrder, im);
+		ctm.AddIntType(user_type_name, nism);
+		tm.AddIntType(user_type_name, nism);
+		}
+	}
+
+
+NxsGeneticCodesManager::NxsGeneticCodesManager()
+	{
+	standardCodeNames.insert(std::string("UNIVERSAL"));
+	standardCodeNames.insert(std::string("UNIVERSAL.EXT"));
+	standardCodeNames.insert(std::string("MTDNA.DROS"));
+	standardCodeNames.insert(std::string("MTDNA.DROS.EXT"));
+	standardCodeNames.insert(std::string("MTDNA.MAM"));
+	standardCodeNames.insert(std::string("MTDNA.MAM.EXT"));
+	standardCodeNames.insert(std::string("MTDNA.YEAST"));
+	}
+
+bool NxsGeneticCodesManager::IsValidCodeName(const std::string &n) const
+	{
+	std::string capName(n.c_str());
+	NxsString::to_upper(capName);
+	return (standardCodeNames.count(capName) > 0) || (userDefinedCodeNames.count(capName) > 0);
+	}
+/*!
+	Reads and stores information contained in the command TypeSet within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleCodeSet(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	std::vector<std::string> unsupported;
+	unsupported.push_back(std::string("TAXA"));
+	unsupported.push_back(std::string("UNALIGNED"));
+	NxsString codeset_name = token.GetToken();
+	//codeset_name.ToUpper();
+	NxsAssumptionsBlockAPI * effectiveAssumpBlock = DealWithPossibleParensInCharDependentCmd(token, "CodeSet", &unsupported);
+	token.GetNextToken();
+	NxsPartition newPartition;
+	NxsCharactersBlockAPI *cbp = effectiveAssumpBlock->GetCharBlockPtr();
+	NCL_ASSERT(cbp);
+	effectiveAssumpBlock->ReadPartitionDef(newPartition, *cbp, codeset_name, "Character", "CodeSet", token, false, false, false);
+	NxsGeneticCodesManager &gcm = effectiveAssumpBlock->GetNxsGeneticCodesManagerRef();
+	for (NxsPartition::const_iterator groupIt = newPartition.begin(); groupIt != newPartition.end(); ++groupIt)
+		{
+		const std::string & s = groupIt->first;
+		if (!gcm.IsValidCodeName(s))
+			{
+			errormsg << "The Genetic code name " << groupIt->first << " found in a CodeSet command does not correspond to a known code";
+			throw NxsException(errormsg, token);
+			}
+		}
+	effectiveAssumpBlock->AddCodeSet(codeset_name, newPartition, asterisked);
+	}
+
+/*!
+	Reads and stores information contained in the command TypeSet within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleCodonPosSet(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString codonPosSetName = token.GetToken();
+	//codonPosSetName.ToUpper();
+	NxsAssumptionsBlockAPI * effectiveAssumpBlock = DealWithPossibleParensInCharDependentCmd(token, "CodonPosSet", NULL);
+	token.GetNextToken();
+	NxsPartition newPartition;
+	NxsCharactersBlockAPI *cbp = effectiveAssumpBlock->GetCharBlockPtr();
+	NCL_ASSERT(cbp);
+	effectiveAssumpBlock->ReadPartitionDef(newPartition, *cbp, codonPosSetName, "Character", "CodonPosSet", token, false, false, false);
+	for (NxsPartition::const_iterator groupIt = newPartition.begin(); groupIt != newPartition.end(); ++groupIt)
+		{
+		const std::string & s = groupIt->first;
+		bool legal = false;
+		if (s.length() == 1)
+			{
+			const char c = s[0];
+			if (c == 'n' || c == 'N' || c == '1' || c == '2' || c == '3' || c == '?')
+				legal = true;
+			}
+		if (!legal)
+			{
+			errormsg << "The Codon Position category name " << groupIt->first << " found in a CodonPosSet command is not legal.  \"N\", \"1\", \"2\", or \"3\" were expected.";
+			throw NxsException(errormsg, token);
+			}
+		}
+	effectiveAssumpBlock->AddCodonPosSet(codonPosSetName, newPartition, asterisked);
+	cbp->AddNewCodonPosPartition(codonPosSetName, newPartition, asterisked);
+	}
+
+class NxsSetVectorItemValidator
+	{
+	public:
+		virtual ~NxsSetVectorItemValidator(){};
+		virtual std::string convert(NxsToken &) = 0;
+	};
+
+class WtSetVectorItemValidator: public NxsSetVectorItemValidator
+	{
+	public:
+		virtual ~WtSetVectorItemValidator(){};
+		virtual std::string convert(NxsToken & token)
+			{
+			NxsString s = token.GetToken();
+			const char * c = s.c_str();
+			long currLongWt;
+			double currDblWt;
+			if (NxsString::to_long(c, &currLongWt) || NxsString::to_double(s.c_str(), &currDblWt))
+				return std::string(c);
+			NxsString errormsg;
+			errormsg << "Expecting a number as a character weight.  Found \"" << c << "\" instead.";
+			throw NxsException(errormsg, token);
+			}
+
+	};
+
+/*!
+	Reads and stores information contained in the command TypeSet within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleWeightSet(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString wtset_name = token.GetToken();
+	//wtset_name.ToUpper();
+	bool isVect;
+	NxsAssumptionsBlockAPI * effectiveAssumpBlock = DealWithPossibleParensInCharDependentCmd(token, "WtSet", NULL, &isVect);
+	token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation); // this allows us to deal with sci. not. in weights.
+	token.GetNextToken();
+	NxsPartition newPartition;
+	NxsCharactersBlockAPI *cbp = effectiveAssumpBlock->GetCharBlockPtr();
+	NCL_ASSERT(cbp);
+	if (isVect)
+		{
+		WtSetVectorItemValidator validator;
+		effectiveAssumpBlock->ReadVectorPartitionDef(newPartition, *cbp, wtset_name, "Character", "WtSet", token, false, true, validator);
+		}
+	else
+		effectiveAssumpBlock->ReadPartitionDef(newPartition, *cbp, wtset_name, "Character", "WtSet", token, false, false, false);
+	bool floatWts = false;
+	long currLongWt;
+	double currDblWt;
+	NxsTransformationManager &ctm = cbp->GetNxsTransformationManagerRef();
+	NxsTransformationManager::ListOfIntWeights liw;
+	NxsTransformationManager::ListOfDblWeights diw;
+	for (NxsPartition::const_iterator groupIt = newPartition.begin(); groupIt != newPartition.end(); ++groupIt)
+		{
+		const std::string & s = groupIt->first;
+		if (!floatWts)
+			{
+			floatWts = !NxsString::to_long(s.c_str(), &currLongWt);
+			if (!floatWts)
+				liw.push_back(NxsTransformationManager::IntWeightToIndexSet((int)currLongWt, groupIt->second));
+			}
+		bool v = NxsString::to_double(s.c_str(), &currDblWt);
+		if (!v)
+			{
+			errormsg << "Invalid weight " << groupIt->first << " found in a WtSet command.";
+			throw NxsException(errormsg, token);
+			}
+		diw.push_back(NxsTransformationManager::DblWeightToIndexSet(currDblWt, groupIt->second));
+		}
+	NxsTransformationManager &tm = effectiveAssumpBlock->GetNxsTransformationManagerRef();
+	if (floatWts)
+		{
+		ctm.AddRealWeightSet(wtset_name, diw, asterisked);
+		tm.AddRealWeightSet(wtset_name, diw, asterisked);
+		}
+	else
+		{
+		ctm.AddIntWeightSet(wtset_name, liw, asterisked);
+		tm.AddIntWeightSet(wtset_name, liw, asterisked);
+		}
+	}
+
+
+/*!
+	Reads and stores information contained in the command CharPartition within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleCharPartition(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString charpart_name = token.GetToken();
+	//charpart_name.ToUpper();
+	NxsAssumptionsBlockAPI * effectiveAssumpBlock = DealWithPossibleParensInCharDependentCmd(token, "CharPartition");
+	token.GetNextToken();
+
+	NxsPartition newPartition;
+	NxsCharactersBlockAPI *cbp = effectiveAssumpBlock->GetCharBlockPtr();
+	NCL_ASSERT(cbp);
+	effectiveAssumpBlock->ReadPartitionDef(newPartition, *cbp, charpart_name, "Character", "CharPartition", token, asterisked, false, true);
+	effectiveAssumpBlock->AddCharPartition(charpart_name, newPartition);
+	}
+
+/*!
+	Reads and stores information contained in the command CHARSET within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleCharSet(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString charset_name = token.GetToken();
+	//charset_name.ToUpper();
+	NxsAssumptionsBlockAPI * effectiveAssumpBlock = DealWithPossibleParensInCharDependentCmd(token, "CharSet");
+	token.GetNextToken();
+	effectiveAssumpBlock->ReadCharsetDef(charset_name, token, asterisked);
+	}
+
+/*!
+	Called after verifying that the correct Char block pointer is set.
+*/
+void NxsAssumptionsBlock::ReadCharsetDef(NxsString charset_name, NxsToken &token, bool asterisked)
+	{
+	NCL_ASSERT(charBlockPtr != NULL);
+	NxsCharactersBlockAPI &charBlock = *charBlockPtr;
+	NxsUnsignedSet s;
+	NxsSetReader::ReadSetDefinition(token, charBlock, "Character", "CharSet", &s);
+	charsets[charset_name] = s;
+	if (asterisked && nexusReader != NULL)
+		{
+		nexusReader->NexusWarnToken("An * is ignored in a CHARSET command", NxsReader::SKIPPING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	if (charBlock.AddNewIndexSet(charset_name, s) && nexusReader)
+		{
+		errormsg = "A CHARSET with the name ";
+		errormsg += charset_name;
+		errormsg += " has already been encountered.    The later definition will preempt the earlier definition(s).";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::OVERWRITING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	}
+
+
+/*!
+	Reads and stores information contained in the command CHARSET within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleExSet(
+  NxsToken &token)	/* the token used to read from in */
+	{
+
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString exset_name = token.GetToken();
+	//exset_name.ToUpper();
+	NxsAssumptionsBlockAPI * effectiveAssumpBlock = DealWithPossibleParensInCharDependentCmd(token, "ExSet");
+	token.GetNextToken();
+	effectiveAssumpBlock->ReadExsetDef(exset_name, token, asterisked);
+	}
+
+/*!
+	Called after verifying that the correct Char block pointer is set.
+*/
+void NxsAssumptionsBlock::ReadExsetDef(NxsString charset_name, NxsToken &token, bool asterisked)
+	{
+	NCL_ASSERT(charBlockPtr != NULL);
+	NxsCharactersBlockAPI &charBlock = *charBlockPtr;
+	NxsUnsignedSet s;
+	NxsSetReader::ReadSetDefinition(token, charBlock, "Character", "ExSet", &s);
+	exsets[charset_name] = s;
+	if (charBlock.AddNewExSet(charset_name, s) && nexusReader)
+		{
+		errormsg = "A ExSet with the name ";
+		errormsg += charset_name;
+		errormsg += " has already been encountered.    The later definition will preempt the earlier definition(s).";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::OVERWRITING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	if (asterisked)
+		{
+		def_exset = charset_name;
+		ApplyExset(charset_name);
+		}
+	}
+
+
+/*!
+	Reads and stores information contained in the command TaxPartition within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleTaxPartition(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString taxpart_name = token.GetToken();
+	//taxpart_name.ToUpper();
+
+	NxsAssumptionsBlockAPI *effectiveAssumpBlock = NULL;
+	token.GetNextToken();
+	NxsString taxblock_name;
+
+	if (token.Equals("("))
+		{
+		token.GetNextToken();
+		while (!token.Equals(")"))
+			{
+			if (token.Equals("TAXA"))
+				{
+				DemandEquals(token, "after \"(Taxa\" in a TaxPartition command");
+				token.GetNextToken();
+				taxblock_name = token.GetToken();
+				}
+			else if (token.Equals("VECTOR"))
+				GenerateNxsException(token, "VECTOR-style set definitions are not currently supported");
+			else if (token.Equals("NOTOKENS"))
+				GenerateNxsException(token, "NOTOKENS-style set definitions are not currently supported");
+			else if (token.Equals(";"))
+				GenerateNxsException(token, "; encountered in TaxPartition command before parentheses were closed");
+			else if (!(token.Equals("STANDARD") || token.Equals("TOKENS")) && nexusReader)
+				{
+				errormsg = "Skipping unknown TaxPartition qualifier: ";
+				errormsg << token.GetTokenReference();
+				nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+				errormsg.clear();
+				}
+			token.GetNextToken();
+			}
+		token.GetNextToken();
+		}
+	const char *cbn = (taxblock_name.empty() ? NULL : taxblock_name.c_str());
+	effectiveAssumpBlock = this->GetAssumptionsBlockForTaxaTitle(cbn, token, "TaxPartition");
+	DemandIsAtEquals(token, "in TaxPartition definition");
+	token.GetNextToken();
+	NxsPartition newPartition;
+	NCL_ASSERT(taxa);
+	effectiveAssumpBlock->ReadPartitionDef(newPartition, *taxa, taxpart_name, "Taxa", "TaxPartition", token, asterisked, false, true);
+	effectiveAssumpBlock->AddTaxPartition(taxpart_name, newPartition);
+	}
+/*!
+	Reads and stores information contained in the command TreePartition within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleTreePartition(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString treepart_name = token.GetToken();
+	//treepart_name.ToUpper();
+	NxsAssumptionsBlockAPI *effectiveAssumpBlock = NULL;
+	token.GetNextToken();
+	NxsString treeblock_name;
+
+	if (token.Equals("("))
+		{
+		token.GetNextToken();
+		while (!token.Equals(")"))
+			{
+			if (token.Equals("TREES"))
+				{
+				DemandEquals(token, "after \"(Trees\" in a TreePartition command");
+				token.GetNextToken();
+				treeblock_name = token.GetToken();
+				}
+			else if (token.Equals("VECTOR"))
+				GenerateNxsException(token, "VECTOR-style set definitions are not currently supported");
+			else if (token.Equals("NOTOKENS"))
+				GenerateNxsException(token, "NOTOKENS-style set definitions are not currently supported");
+			else if (token.Equals(";"))
+				GenerateNxsException(token, "; encountered in TreePartition command before parentheses were closed");
+			else if (!(token.Equals("STANDARD") || token.Equals("TOKENS")) && nexusReader)
+				{
+				errormsg = "Skipping unknown TreePartition qualifier: ";
+				errormsg << token.GetTokenReference();
+				nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+				errormsg.clear();
+				}
+			token.GetNextToken();
+			}
+		token.GetNextToken();
+		}
+	const char *cbn = (treeblock_name.empty() ? NULL : treeblock_name.c_str());
+	effectiveAssumpBlock = this->GetAssumptionsBlockForTreesTitle(cbn, token, "TreePartition");
+	DemandIsAtEquals(token, "in TreePartition definition");
+	token.GetNextToken();
+	NxsPartition newPartition;
+	NCL_ASSERT(treesBlockPtr);
+	effectiveAssumpBlock->ReadPartitionDef(newPartition, *treesBlockPtr, treepart_name, "Tree", "TreePartition", token, asterisked, false, true);
+	effectiveAssumpBlock->AddTreePartition(treepart_name, newPartition);
+	}
+
+void NxsBlock::ReadPartitionDef(
+  NxsPartition &np,
+  NxsLabelToIndicesMapper &ltm,
+  const std::string & partName,
+  const char * ptype,
+  const char * cmd,
+  NxsToken & token,
+  bool warnAsterisked,
+  bool demandAllInds,
+  bool storeAsPartition)
+	{
+	NxsUnsignedSet allInds;
+	const unsigned total = ltm.GetMaxIndex() + 1;
+	std::set<NxsString> prevGroupNames;
+	errormsg.clear();
+	for (;;)
+		{
+		if (token.Equals(";"))
+			break;
+		NxsString groupN = token.GetToken();
+		NxsString capGroupN = groupN;
+		capGroupN.ToUpper();
+		if (prevGroupNames.count(capGroupN) > 0)
+			{
+			errormsg << "Illegal repitition of a subset name (" << groupN << ") in the " << cmd << " definition of " << partName;
+			throw NxsException(errormsg, token);
+			}
+		token.GetNextToken();
+		if (!token.Equals(":"))
+			{
+			errormsg << "Expecting a : after the subset name " << groupN << " in the " << cmd  << " definition of " << partName << ". Found " << token.GetToken();
+			throw NxsException(errormsg, token);
+			}
+		token.GetNextToken();
+		NxsUnsignedSet s;
+		NxsSetReader::ReadSetDefinition(token, ltm, ptype, cmd, &s, &allInds);
+		allInds.insert(s.begin(), s.end());
+		np.push_back(NxsPartitionGroup(groupN, s));
+		if (token.Equals(";"))
+			break;
+		NCL_ASSERT(token.Equals(","));
+		 // this flag allows us to deal with sci. not. in WtSet commands.
+		 //	It shouldn't hurt in other contexts, though the parser will be
+		 //		more lax than it should (and will accept unquoted tokens-like-this as names).
+		token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation);
+		token.GetNextToken();
+		}
+	if (allInds.size() < total)
+		{
+		unsigned n = 0;
+		for (;n < total; ++n)
+			{
+			if (allInds.count(n) == 0)
+				break;
+			}
+		errormsg << partName << " is a not a valid "<< cmd <<". At least one " << ptype << " ("<< n+1 << ") is not included";
+		if (demandAllInds)
+			throw NxsException(errormsg, token);
+		else if (nexusReader)
+			{
+			nexusReader->NexusWarnToken(errormsg, NxsReader::ILLEGAL_CONTENT_WARNING, token);
+			errormsg.clear();
+			}
+		}
+	if (warnAsterisked && nexusReader != NULL)
+		{
+		errormsg << "An * is ignored in a " << cmd << " command";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	if (storeAsPartition && ltm.AddNewPartition(partName, np) && nexusReader)
+		{
+		errormsg << "A " << cmd << " with the name ";
+		errormsg += partName;
+		errormsg += " has already been encountered.    The later definition will preempt the earlier definition(s).";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::OVERWRITING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	}
+
+unsigned NxsBlock::ReadVectorPartitionDef(NxsPartition &np, NxsLabelToIndicesMapper &ltm, const std::string & partName, const char * ptype, const char * cmd, NxsToken & token, bool warnAsterisked, bool demandAllInds, NxsSetVectorItemValidator & v)
+	{
+	NxsUnsignedSet allInds;
+	const unsigned total = ltm.GetMaxIndex() + 1;
+	std::map<std::string, NxsUnsignedSet> subsetMap;
+	errormsg.clear();
+	unsigned ind = 0;
+	for (; ind < total; ++ind)
+		{
+		if (token.Equals(";"))
+			break;
+		const std::string key = v.convert(token);
+		const std::string capKey = NxsString::get_upper(key);
+		NxsUnsignedSet & s = subsetMap[key];
+		s.insert(ind);
+		token.GetNextToken();
+		}
+	if (ind < total)
+		{
+		errormsg << partName << " is a not a valid "<< cmd <<". Only " << ind + 1 << " entries for " << ptype << "(s) were included in the definition";
+		if (demandAllInds)
+			throw NxsException(errormsg, token);
+		else if (nexusReader)
+			{
+			nexusReader->NexusWarnToken(errormsg, NxsReader::ILLEGAL_CONTENT_WARNING, token);
+			errormsg.clear();
+			}
+		}
+	if (warnAsterisked && nexusReader != NULL)
+		{
+		errormsg << "An * is ignored in a " << cmd << " command";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	np.clear();
+	for (std::map<std::string, NxsUnsignedSet>::const_iterator sIt = subsetMap.begin(); sIt != subsetMap.end(); ++sIt)
+		{
+		const std::string & k = sIt->first;
+		const NxsUnsignedSet & valset = sIt->second;
+		np.push_back(NxsPartitionGroup(k, valset));
+		}
+	if (ltm.AddNewPartition(partName, np) && nexusReader)
+		{
+		errormsg << "A " << cmd << " with the name ";
+		errormsg += partName;
+		errormsg += " has already been encountered.    The later definition will preempt the earlier definition(s).";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::OVERWRITING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	return ind;
+	}
+
+void NxsWriteSetCommand(const char *cmd, const NxsUnsignedSetMap & usetmap, std::ostream &out, const char * nameOfDef)
+	{
+	if (usetmap.empty())
+		return;
+	for (NxsUnsignedSetMap::const_iterator csIt = usetmap.begin(); csIt != usetmap.end(); ++csIt)
+		{
+		out << "    " << cmd << " ";
+		if (NxsString::case_insensitive_equals(csIt->first.c_str(), nameOfDef))
+			out << "* ";
+		out << NexusToken::EscapeString(csIt->first) << " =";
+		NxsSetReader::WriteSetAsNexusValue(csIt->second, out);
+		out << ";\n";
+		}
+	}
+
+void NxsWritePartitionCommand(const char *cmd, const NxsPartitionsByName & usetmap, std::ostream &out, const char * nameOfDef)
+	{
+	if (usetmap.empty())
+		return;
+	for (NxsPartitionsByName::const_iterator csIt = usetmap.begin(); csIt != usetmap.end(); ++csIt)
+		{
+		out << "    " << cmd << " ";
+		if (NxsString::case_insensitive_equals(csIt->first.c_str(), nameOfDef))
+			out << "* ";
+		out << NexusToken::EscapeString(csIt->first) << " =";
+		const NxsPartition & p = csIt->second;
+		bool first = true;
+		for (NxsPartition::const_iterator pIt = p.begin(); pIt != p.end(); ++pIt)
+			{
+			const NxsPartitionGroup & g = *pIt;
+			if (!first)
+				out << ',';
+			out << ' ' << NxsString::GetEscaped(g.first) << " :";
+			NxsSetReader::WriteSetAsNexusValue(g.second, out);
+			first = false;
+			}
+		out << ";\n";
+		}
+	}
+
+/*!
+	Reads and stores information contained in the command TAXSET within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleTaxSet(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString taxset_name = token.GetToken();
+	//taxset_name.ToUpper();
+	token.GetNextToken();
+	NxsAssumptionsBlockAPI *effectiveAssumpBlock = NULL;
+	NxsString taxblock_name;
+	if (token.Equals("("))
+		{
+		token.GetNextToken();
+		while (!token.Equals(")"))
+			{
+			if (token.Equals("TAXA"))
+				{
+				DemandEquals(token, "after \"(Taxa\" in a TaxSet command");
+				token.GetNextToken();
+				taxblock_name = token.GetToken();
+				}
+			else if (token.Equals("VECTOR"))
+				GenerateNxsException(token, "VECTOR-style set definitions are not currently supported");
+			else if (token.Equals(";"))
+				GenerateNxsException(token, "; encountered in TaxSet command before parentheses were closed");
+			else if (!token.Equals("STANDARD") && nexusReader)
+				{
+				errormsg = "Skipping unknown TaxSet qualifier: ";
+				errormsg << token.GetTokenReference();
+				nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+				errormsg.clear();
+				}
+			token.GetNextToken();
+			}
+		token.GetNextToken();
+		}
+	const char *tbn = (taxblock_name.empty() ? NULL : taxblock_name.c_str());
+	effectiveAssumpBlock = this->GetAssumptionsBlockForTaxaTitle(tbn, token, "TAXSET");
+	DemandIsAtEquals(token, "in TAXSET definition");
+	token.GetNextToken();
+	effectiveAssumpBlock->ReadTaxsetDef(taxset_name, token, asterisked);
+	}
+
+/*!
+	Called after verifying that the correct taxa block pointer is set.
+*/
+void NxsAssumptionsBlock::ReadTaxsetDef(NxsString taxset_name, NxsToken &token, bool asterisked)
+	{
+	NCL_ASSERT(taxa != NULL);
+	NxsTaxaBlockAPI &taxaBlock = *taxa;
+	NxsUnsignedSet s;
+	NxsSetReader::ReadSetDefinition(token, taxaBlock, "Taxon", "TaxSet", &s);
+	taxsets[taxset_name] = s;
+	if (asterisked && nexusReader != NULL)
+		{
+		nexusReader->NexusWarnToken("An * is ignored in a TaxSet command", NxsReader::SKIPPING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	if (taxaBlock.AddNewIndexSet(taxset_name, s) && nexusReader)
+		{
+		errormsg = "A TaxSet with the name ";
+		errormsg += taxset_name;
+		errormsg += " has already been encountered.    The later definition will preempt the earlier definition(s).";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	}
+
+/*!
+	Reads and stores information contained in the command TAXSET within an ASSUMPTIONS block.
+*/
+void NxsAssumptionsBlock::HandleTreeSet(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	bool asterisked = false;
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		asterisked = true;
+		token.GetNextToken();
+		}
+	NxsString treeset_name = token.GetToken();
+	//treeset_name.ToUpper();
+	token.GetNextToken();
+	NxsAssumptionsBlockAPI *effectiveAssumpBlock = NULL;
+	NxsString treeblock_name;
+	if (token.Equals("("))
+		{
+		token.GetNextToken();
+		while (!token.Equals(")"))
+			{
+			if (token.Equals("TREES"))
+				{
+				DemandEquals(token, "after \"(Trees\" in a TreeSet command");
+				token.GetNextToken();
+				treeblock_name = token.GetToken();
+				}
+			else if (token.Equals("VECTOR"))
+				GenerateNxsException(token, "VECTOR-style set definitions are not currently supported");
+			else if (token.Equals(";"))
+				GenerateNxsException(token, "; encountered in TreeSet command before parentheses were closed");
+			else if (!token.Equals("STANDARD") && nexusReader)
+				{
+				errormsg = "Skipping unknown TreeSet qualifier: ";
+				errormsg << token.GetTokenReference();
+				nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+				errormsg.clear();
+				}
+			token.GetNextToken();
+			}
+		token.GetNextToken();
+		}
+	const char *tbn = (treeblock_name.empty() ? NULL : treeblock_name.c_str());
+	effectiveAssumpBlock = this->GetAssumptionsBlockForTreesTitle(tbn, token, "TreeSet");
+	DemandIsAtEquals(token, "in TreeSet definition");
+	token.GetNextToken();
+	effectiveAssumpBlock->ReadTreesetDef(treeset_name, token, asterisked);
+	}
+
+/*!
+	Called after verifying that the correct trees block pointer is set.
+*/
+void NxsAssumptionsBlock::ReadTreesetDef(NxsString treeset_name, NxsToken &token, bool asterisked)
+	{
+	NCL_ASSERT(treesBlockPtr != NULL);
+	NxsTreesBlockAPI &treesBlock = *treesBlockPtr;
+	NxsUnsignedSet s;
+	NxsSetReader::ReadSetDefinition(token, treesBlock, "Trees", "TreeSet", &s);
+	treesets[treeset_name] = s;
+	if (asterisked && nexusReader != NULL)
+		{
+		nexusReader->NexusWarnToken("An * is ignored in a TreeSet command", NxsReader::SKIPPING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	if (treesBlock.AddNewIndexSet(treeset_name, s) && nexusReader)
+		{
+		errormsg = "A TreeSet with the name ";
+		errormsg += treeset_name;
+		errormsg += " has already been encountered.    The later definition will preempt the earlier definition(s).";
+		nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	}
+
+/*!
+	This function provides the ability to read everything following the block name (which is read by the NxsReader
+	object) to the end or ENDBLOCK statement. Characters are read from the input stream in. Overrides the pure virtual
+	function in the base class.
+*/
+void NxsAssumptionsBlock::Read(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	isEmpty = false;
+	isUserSupplied = true;
+	NxsString n = "BEGIN ";
+	n << NCL_BLOCKTYPE_ATTR_NAME;
+	DemandEndSemicolon(token, n.c_str());
+
+	for(;;)
+		{
+		token.GetNextToken();
+		
+		int prevCharLinkStatus = charLinkStatus;
+		int prevTaxaLinkStatus = taxaLinkStatus;
+		int prevTreesLinkStatus = treesLinkStatus;
+
+		
+		NxsBlock::NxsCommandResult res = HandleBasicBlockCommands(token);
+		if (res == NxsBlock::NxsCommandResult(STOP_PARSING_BLOCK))
+			return;
+		if ((charLinkStatus & BLOCK_LINK_FROM_LINK_CMD) && !(prevCharLinkStatus & BLOCK_LINK_FROM_LINK_CMD))
+			blockwideCharsLinkEstablished = true;
+		if ((treesLinkStatus & BLOCK_LINK_FROM_LINK_CMD) && !(prevTreesLinkStatus & BLOCK_LINK_FROM_LINK_CMD))
+			blockwideTreesLinkEstablished = true;
+		if ((taxaLinkStatus & BLOCK_LINK_FROM_LINK_CMD) && !(prevTaxaLinkStatus & BLOCK_LINK_FROM_LINK_CMD))
+			blockwideTaxaLinkEstablished = true;
+		if (res != NxsBlock::NxsCommandResult(HANDLED_COMMAND))
+			{
+			if (token.Equals("CHARPARTITION"))
+				HandleCharPartition(token);
+			else if (token.Equals("CHARSET"))
+				HandleCharSet(token);
+			else if (token.Equals("CODESET"))
+				HandleCodeSet(token);
+			else if (token.Equals("CODONPOSSET"))
+				HandleCodonPosSet(token);
+			else if (token.Equals("EXSET"))
+				HandleExSet(token);
+			else if (token.Equals("OPTIONS"))
+				HandleOptions(token);
+			else if (token.Equals("TAXSET"))
+				HandleTaxSet(token);
+			else if (token.Equals("TAXPARTITION"))
+				HandleTaxPartition(token);
+			else if (token.Equals("TREESET"))
+				HandleTreeSet(token);
+			else if (token.Equals("TREEPARTITION"))
+				HandleTreePartition(token);
+			else if (token.Equals("TYPESET"))
+				HandleTypeSet(token);
+			else if (token.Equals("USERTYPE"))
+				HandleUserType(token);
+			else if (token.Equals("WTSET"))
+				HandleWeightSet(token);
+			else
+				SkipCommand(token);
+
+			}
+		}	// for(;;)
+	}
+void NxsAssumptionsBlock::HandleOptions(NxsToken &token)
+	{
+	errormsg.clear();
+	token.GetNextToken();
+	std::map<std::string, std::string> kv = token.ProcessAsSimpleKeyValuePairs("OPTIONS");
+	std::map<std::string, std::string>::const_iterator kvIt = kv.begin();
+	for (; kvIt != kv.end(); ++kvIt)
+		{
+		if (NxsString::case_insensitive_equals(kvIt->first.c_str(), "DEFTYPE"))
+			{
+			NxsAssumptionsBlockAPI	* effAssumpB = GetAssumptionsBlockForCharTitle(NULL, token, "OPTIONS");
+			NCL_ASSERT(effAssumpB);
+			NxsCharactersBlockAPI * cb = effAssumpB->GetCharBlockPtr();
+			NCL_ASSERT(cb);
+			NxsTransformationManager & tmRef = cb->GetNxsTransformationManagerRef();
+			if (!tmRef.IsValidTypeName(kvIt->second.c_str()))
+				{
+				errormsg << kvIt->second << " is not a valid type name for OPTIONS DefType. Expceting one of:\n";
+				const std::set<std::string> & tn = tmRef.GetTypeNames();
+				for (std::set<std::string>::const_iterator tnIt = tn.begin(); tnIt != tn.end(); ++tnIt)
+					errormsg << ' ' << NxsString::GetEscaped(*tnIt);
+				throw NxsException(errormsg, token);
+				}
+			try
+				{
+				tmRef.SetDefaultTypeName(kvIt->second);
+				NxsTransformationManager & etmRef  = effAssumpB->GetNxsTransformationManagerRef();
+				etmRef.SetDefaultTypeName(kvIt->second);
+				}
+			catch (const NxsException & x)
+				{
+				throw NxsException(x.msg, token);
+				}
+			}
+		else if (NxsString::case_insensitive_equals(kvIt->first.c_str(), "POLYTCOUNT"))
+			{
+			if (NxsString::case_insensitive_equals(kvIt->second.c_str(), "MINSTEPS"))
+				polyTCountValue = POLY_T_COUNT_MIN;
+			else if (NxsString::case_insensitive_equals(kvIt->second.c_str(), "MAXSTEPS"))
+				polyTCountValue = POLY_T_COUNT_MAX;
+			else
+				{
+				errormsg << "Unknown value (" << kvIt->second << ") found for OPTIONS PolyTCount (expecting MINSTEPS or MAXSTEPS).";
+				throw NxsException(errormsg, token);
+				}
+			}
+		else if (NxsString::case_insensitive_equals(kvIt->first.c_str(), "GAPMODE"))
+			{
+			NxsAssumptionsBlockAPI	* effAssumpB = GetAssumptionsBlockForCharTitle(NULL, token, "OPTIONS");
+			NCL_ASSERT(effAssumpB);
+			NxsCharactersBlockAPI * cb = effAssumpB->GetCharBlockPtr();
+			NCL_ASSERT(cb);
+			if (NxsString::case_insensitive_equals(kvIt->second.c_str(), "MISSING"))
+				{
+				effAssumpB->SetGapsAsNewstate(false);
+				cb->SetGapModeSetting(NxsCharactersBlockAPI::GAP_MODE_MISSING);
+				}
+			else if (NxsString::case_insensitive_equals(kvIt->second.c_str(), "NEWSTATE"))
+				{
+				effAssumpB->SetGapsAsNewstate(true);
+				cb->SetGapModeSetting(NxsCharactersBlockAPI::GAP_MODE_NEWSTATE);
+				}
+			else
+				{
+				errormsg << "Unknown value (" << kvIt->second << ") found for OPTIONS GapMode (expecting MISSING or NEWSTATE).";
+				throw NxsException(errormsg, token);
+				}
+			}
+		else if (nexusReader)
+			{
+			errormsg << "Skipping unknown subcommand (" << kvIt->first << ") in OPTIONS command of " << NCL_BLOCKTYPE_ATTR_NAME << " Block";
+			nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+			errormsg.clear();
+			}
+		}
+	}
+
+/*!
+	Prepares for reading a new ASSUMPTIONS block. Overrides the pure virtual function in the base class.
+*/
+void NxsAssumptionsBlock::Reset()
+	{
+	if (!passedRefOfOwnedBlock)
+		{
+		VecAssumpBlockPtr::iterator bIt = createdSubBlocks.begin();
+		for(; bIt != createdSubBlocks.end(); ++bIt)
+			{
+			if (*bIt)
+				delete *bIt;
+			}
+		createdSubBlocks.clear();
+		}
+	passedRefOfOwnedBlock = false;
+	NxsBlock::Reset();
+	exsets.clear();
+	taxsets.clear();
+	charsets.clear();
+	def_exset.clear();
+	charPartitions.clear();
+	taxPartitions.clear();
+	treePartitions.clear();
+	readAs = UNREAD_OR_GENERATED_BLOCK;
+	charLinkStatus &= BLOCK_LINK_UNUSED_MASK;
+	taxaLinkStatus &= BLOCK_LINK_UNUSED_MASK;
+	treesLinkStatus &= BLOCK_LINK_UNUSED_MASK;
+	if (charLinkStatus & NxsBlock::BLOCK_LINK_FROM_LINK_CMD)
+		SetCharBlockPtr(NULL, NxsBlock::BLOCK_LINK_UNINITIALIZED);
+	if (taxaLinkStatus & NxsBlock::BLOCK_LINK_FROM_LINK_CMD)
+		SetTaxaBlockPtr(NULL, NxsBlock::BLOCK_LINK_UNINITIALIZED);
+	if (treesLinkStatus & NxsBlock::BLOCK_LINK_FROM_LINK_CMD)
+		SetTreesBlockPtr(NULL, NxsBlock::BLOCK_LINK_UNINITIALIZED);
+	transfMgr.Reset();
+	codesMgr.Reset();
+	polyTCountValue = POLY_T_COUNT_UNKNOWN;
+	gapsAsNewstate = false;
+	blockwideCharsLinkEstablished = false;
+	blockwideTaxaLinkEstablished = false;
+	blockwideTreesLinkEstablished = false;
+
+	codonPosSets.clear();
+	def_codonPosSet.clear();
+	codeSets.clear();
+	def_codeSet.clear();
+	}
+
+/*!
+	This function outputs a brief report of the contents of this ASSUMPTIONS block. Overrides the pure virtual function
+	in the base class.
+*/
+void NxsAssumptionsBlock::Report(
+  std::ostream &out)  NCL_COULD_BE_CONST /* the output stream to which to write the report */ /*v2.1to2.2 1 */
+	{
+	out << endl;
+	out << NCL_BLOCKTYPE_ATTR_NAME << " block contains the following:" << endl;
+
+	if (charsets.empty())
+		out << "  No character sets were defined" << endl;
+	else
+		{
+		NxsUnsignedSetMap::const_iterator charsets_iter = charsets.begin();
+		if (charsets.size() == 1)
+			{
+			out << "  1 character set defined:" << endl;
+			out << "   " << (*charsets_iter).first << endl;
+			}
+		else
+			{
+			out << "  " << (unsigned)charsets.size() << " character sets defined:" << endl;
+			for (; charsets_iter != charsets.end(); charsets_iter++)
+				{
+				NxsString nm = (*charsets_iter).first;
+				out << "   " << nm;
+				out << endl;
+				}
+			}
+		}	// if (charsets.empty()) ... else
+
+	if (taxsets.empty())
+		out << "  No taxon sets were defined" << endl;
+	else
+		{
+		NxsUnsignedSetMap::const_iterator taxsets_iter = taxsets.begin();
+		if (taxsets.size() == 1)
+			{
+			out << "  1 taxon set defined:" << endl;
+			out << "   " << (*taxsets_iter).first << endl;
+			}
+		else
+			{
+			out << "  " << (unsigned)taxsets.size() << " taxon sets defined:" << endl;
+			for (; taxsets_iter != taxsets.end(); taxsets_iter++)
+				{
+				NxsString nm = (*taxsets_iter).first;
+				out << "   " << nm;
+				out << endl;
+				}
+			}
+		}	// if (taxsets.empty()) ... else
+
+	if (exsets.empty())
+		out << "  No exclusion sets were defined" << endl;
+	else
+		{
+		NxsUnsignedSetMap::const_iterator exsets_iter = exsets.begin();
+		if (exsets.size() == 1)
+			{
+			out << "  1 exclusion set defined:" << endl;
+			out << "   " << (*exsets_iter).first << endl;
+			}
+		else
+			{
+			out << "  " << (unsigned)exsets.size() << " exclusion sets defined:" << endl;
+			for (; exsets_iter != exsets.end(); exsets_iter++)
+				{
+				NxsString nm = (*exsets_iter).first;
+				out << "   " << nm;
+				if (NxsString::case_insensitive_equals(nm.c_str(), def_exset.c_str()))
+					out << " (default)";
+				out << endl;
+				}
+			}
+		}
+
+	out << endl;
+	}
+
+/*!
+	A CHARACTERS, DATA, or ALLELES block can call this function to specify that it is to receive notification when the
+	current taxon or character set changes (e.g., an "EXSET *" command is read or a program requests that one of the
+	predefined taxon sets, character sets, or exsets be applied). Normally, a NxsCharactersBlockAPI-derived object calls
+	this function upon entering its MATRIX command, since when that happens it becomes the primary data-containing block.
+*/
+void NxsAssumptionsBlock::SetCallback(
+  NxsCharactersBlockAPI* p) /* the object to be called in the event of a change in character status */
+	{
+	charBlockPtr = p;
+	SetCharLinkStatus(NxsBlock::BLOCK_LINK_TO_MOST_RECENT);
+	}
+
+/*!
+	Converts a taxon label to a number corresponding to the taxon's position within the list maintained by the
+	NxsTaxaBlockAPI object. This method overrides the virtual function of the same name in the NxsBlock base class. If s
+	is not a valid taxon label, returns the value 0.
+*/
+unsigned NxsAssumptionsBlock::TaxonLabelToNumber(
+  NxsString s)	const /* the taxon label to convert */ /*v2.1to2.2 4 */
+	{
+	NCL_ASSERT(taxa != NULL);
+	int i;
+	try
+		{
+		i = 1 + taxa->FindTaxon(s);
+		}
+	catch(NxsTaxaBlock::NxsX_NoSuchTaxon)
+		{
+		i = 0;
+		}
+
+	return i;
+	}
+
+/*only used it the linkAPI is enabled*/
+void NxsAssumptionsBlock::HandleLinkCommand(NxsToken & token)
+	{
+	if (!nexusReader)
+		NxsNCLAPIException("No NxsReader when reading Assumptions block.");
+
+	token.GetNextToken();
+	const std::map<std::string, std::string> kv = token.ProcessAsSimpleKeyValuePairs("LINK");
+	std::map<std::string, std::string>::const_iterator pairIt = kv.begin();
+	for (;pairIt != kv.end(); ++pairIt)
+		{
+		NxsString key(pairIt->first.c_str());
+		key.ToUpper();
+		NxsString value(pairIt->second.c_str());
+		if (key == "TAXA")
+			{
+			if (taxa && !taxa->GetID().EqualsCaseInsensitive(value))
+				{
+				if (GetTaxaLinkStatus() & NxsBlock::BLOCK_LINK_USED)
+					{
+					errormsg = "LINK to a Taxa block must occur before commands that use a taxa block";
+					throw NxsException(errormsg, token);
+					}
+				SetTaxaBlockPtr(NULL, NxsBlock::BLOCK_LINK_UNINITIALIZED);
+				}
+			if (!taxa)
+				{
+				NxsTaxaBlockAPI * cb = nexusReader->GetTaxaBlockByTitle(value.c_str(), NULL);
+				if (cb == NULL)
+					{
+					errormsg = "Unknown TAXA block (";
+					errormsg += value;
+					errormsg +=") referred to in the LINK command";
+					throw NxsException(errormsg, token);
+					}
+				SetTaxaBlockPtr(cb, NxsBlock::BLOCK_LINK_FROM_LINK_CMD);
+				}
+			}
+		else if (key == "CHARACTERS")
+			{
+			if (charBlockPtr && !charBlockPtr->GetID().EqualsCaseInsensitive(value))
+				{
+				if (GetCharLinkStatus() & NxsBlock::BLOCK_LINK_USED)
+					{
+					errormsg = "LINK to a CHARACTERS block must occur before commands that use a CHARACTERS block";
+					throw NxsException(errormsg, token);
+					}
+				SetCharBlockPtr(NULL, NxsBlock::BLOCK_LINK_UNINITIALIZED);
+				}
+			if (!charBlockPtr)
+				{
+				NxsCharactersBlockAPI * cb = nexusReader->GetCharBlockByTitle(value.c_str(), NULL);
+				if (cb == NULL)
+					{
+					errormsg = "Unknown CHARACTERS block (";
+					errormsg += value;
+					errormsg +=") referred to in the LINK command";
+					throw NxsException(errormsg, token);
+					}
+				SetCharBlockPtr(cb, NxsBlock::BLOCK_LINK_FROM_LINK_CMD);
+				}
+			}
+		else if (key == "TREES")
+			{
+			if (treesBlockPtr && !treesBlockPtr->GetID().EqualsCaseInsensitive(value))
+				{
+				if (GetTreesLinkStatus() & NxsBlock::BLOCK_LINK_USED)
+					{
+					errormsg = "LINK to a TREES block must occur before commands that use a TREES block";
+					throw NxsException(errormsg, token);
+					}
+				SetTreesBlockPtr(NULL, NxsBlock::BLOCK_LINK_UNINITIALIZED);
+				}
+			if (!treesBlockPtr)
+				{
+				NxsTreesBlockAPI * cb = nexusReader->GetTreesBlockByTitle(value.c_str(), NULL);
+				if (cb == NULL)
+					{
+					errormsg = "Unknown TREES block (";
+					errormsg += value;
+					errormsg +=") referred to in the LINK command";
+					throw NxsException(errormsg, token);
+					}
+				SetTreesBlockPtr(cb, NxsBlock::BLOCK_LINK_FROM_LINK_CMD);
+				}
+			}
+		else
+			{
+			errormsg = "Skipping unknown LINK subcommand: ";
+			errormsg += pairIt->first.c_str();
+			nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+			errormsg.clear(); //this token pos will be off a bit.
+			}
+		}
+	}
+void NxsAssumptionsBlock::WriteLinkCommand(std::ostream &out) const
+	{
+	if ( (taxa && !(taxa->GetTitle().empty()))
+		|| (treesBlockPtr  && !(treesBlockPtr->GetTitle().empty()))
+		|| (charBlockPtr && !(charBlockPtr->GetTitle().empty())))
+		{
+		out << "    LINK";
+		if (taxa)
+			out << " TAXA = " << NxsString::GetEscaped(taxa->GetTitle());
+		if (charBlockPtr)
+			out << " CHARACTERS = " << NxsString::GetEscaped(charBlockPtr->GetTitle());
+		if (treesBlockPtr)
+			out << " TREES = " << NxsString::GetEscaped(treesBlockPtr->GetTitle());
+		out << ";\n";
+		}
+	}
+
+VecBlockPtr NxsAssumptionsBlock::GetCreatedTaxaBlocks()
+	{
+	passedRefOfOwnedBlock = true;
+	VecBlockPtr r;
+	VecAssumpBlockPtr::iterator bIt = createdSubBlocks.begin();
+	for(; bIt != createdSubBlocks.end(); ++bIt)
+		r.push_back(*bIt);
+	return r;
+	}
+
+
+NxsAssumptionsBlock *NxsAssumptionsBlockFactory::GetBlockReaderForID(const std::string & idneeded, NxsReader *reader, NxsToken *)
+	{
+	if (reader == NULL || (idneeded != "ASSUMPTIONS" && idneeded != "CODONS" && idneeded != "SETS"))
+		return NULL;
+	NxsAssumptionsBlock * nb =	new NxsAssumptionsBlock(NULL);
+	nb->SetImplementsLinkAPI(true);
+	return nb;
+	}
diff --git a/ncl/nxsassumptionsblock.h b/ncl/nxsassumptionsblock.h
new file mode 100644
index 0000000..2836145
--- /dev/null
+++ b/ncl/nxsassumptionsblock.h
@@ -0,0 +1,391 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_ASSUMPTIONSBLOCK_H
+#define NCL_ASSUMPTIONSBLOCK_H
+
+#include <vector>
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxstreesblock.h"
+#include "ncl/nxscharactersblock.h"
+#include "ncl/nxstaxablock.h"
+
+class NxsCharactersBlockAPI;
+class NxsTaxaBlockAPI;
+
+class NxsAssumptionsBlockAPI
+  : public NxsBlock
+	{
+	public:
+  		virtual void	SetCallback(NxsCharactersBlockAPI *p) = 0;
+
+
+
+		virtual void SetCharBlockPtr(NxsCharactersBlockAPI * c, NxsBlockLinkStatus s) = 0;
+		virtual void SetTaxaBlockPtr(NxsTaxaBlockAPI *, NxsBlockLinkStatus s) = 0;
+		virtual void SetTreesBlockPtr(NxsTreesBlockAPI *, NxsBlockLinkStatus s) = 0;
+
+		virtual NxsCharactersBlockAPI * GetCharBlockPtr(int *status=NULL) = 0; /*v2.1to2.2 13 */
+		virtual NxsTaxaBlockAPI * GetTaxaBlockPtr(int *status=NULL) = 0; /*v2.1to2.2 13 */
+		virtual NxsTreesBlockAPI * GetTreesBlockPtr(int *status=NULL) = 0; /*v2.1to2.2 13 */
+
+		/* i14 */ /*v2.1to2.2 14 */
+		/* i15 */ /*v2.1to2.2 15 */
+		/* i16 */ /*v2.1to2.2 16 */
+
+		virtual void AddCharPartition(const std::string & name, const NxsPartition &) = 0;
+		virtual void AddTaxPartition(const std::string & name, const NxsPartition &) = 0;
+		virtual void AddTreePartition(const std::string & name, const NxsPartition &) = 0;
+		virtual void AddCodeSet(const std::string & name, const NxsPartition &, bool asterisked) = 0;
+		virtual void AddCodonPosSet(const std::string & name, const NxsPartition &, bool asterisked) = 0;
+
+		virtual void FlagCharBlockAsUsed() = 0;
+		virtual void FlagTaxaBlockAsUsed() = 0;
+		virtual void FlagTreesBlockAsUsed() = 0;
+
+  		virtual void ReadCharsetDef(NxsString charset_name, NxsToken &token, bool asterisked) = 0;
+  		virtual void ReadExsetDef(NxsString charset_name, NxsToken &token, bool asterisked) = 0;
+		virtual void ReadTaxsetDef(NxsString set_name, NxsToken &token, bool asterisked) = 0;
+		virtual void ReadTreesetDef(NxsString set_name, NxsToken &token, bool asterisked) = 0;
+
+		virtual NxsTransformationManager & GetNxsTransformationManagerRef() = 0;
+		virtual const NxsTransformationManager & GetNxsTransformationManagerConstRef() const = 0;
+		virtual NxsGeneticCodesManager & GetNxsGeneticCodesManagerRef() = 0;
+		virtual void SetGapsAsNewstate(bool v) = 0;
+
+		/*!  delegates call to the NxsTransformationManager */
+		virtual std::vector<double> GetDefaultDoubleWeights() const
+			{
+		    return GetNxsTransformationManagerConstRef().GetDefaultDoubleWeights();
+			}
+
+		/*!  delegates call to the NxsTransformationManager */
+		virtual std::vector<int> GetDefaultIntWeights() const {
+		    return GetNxsTransformationManagerConstRef().GetDefaultIntWeights();
+		}
+
+ 	};
+
+/*!
+	This class handles reading and storage for the NxsReader block ASSUMPTIONS. It overrides the member functions Read
+	and Reset, which are abstract virtual functions in the base class NxsBlock. Adding a new data member? Don't forget
+	to:
+~
+	o Describe it in the class declaration using a C-style comment.
+	o Initialize it (unless it is self-initializing) in the constructor and re-initialize it in the Reset function.
+	o Describe the initial state in the constructor documentation.
+	o Delete memory allocated to it in both the destructor and Reset function.
+	o Report it in some way in the Report function.
+~
+*/
+class NxsAssumptionsBlock
+  : public NxsAssumptionsBlockAPI
+	{
+	enum NameOfAssumpBlockAsRead
+		{
+		UNREAD_OR_GENERATED_BLOCK,
+		ASSUMPTIONS_BLOCK_READ,
+		SETS_BLOCK_READ,
+		CODONS_BLOCK_READ
+		};
+
+
+	public:
+							NxsAssumptionsBlock(NxsTaxaBlockAPI *t);
+		virtual				~NxsAssumptionsBlock();
+
+		virtual bool		CanReadBlockType(const NxsToken & token);
+
+		void				ReplaceTaxaBlockPtr(NxsTaxaBlockAPI *tb);
+		void				SetCallback(NxsCharactersBlockAPI *p);
+
+		int					GetNumCharSets() const;
+		/* i17 */ /*v2.1to2.2 17 */
+		void				GetCharSetNames(NxsStringVector &names) const; /*v2.1to2.2 3 */
+		const NxsUnsignedSet *GetCharSet(NxsString nm) const; /*v2.1to2.2 4 */
+
+		int					GetNumCharPartitions(); /*v2.1to2.2 6 */
+		void				GetCharPartitionNames(std::vector<std::string> &names); /*v2.1to2.2 6 */
+		const NxsPartition		*GetCharPartition(std::string nm) const;
+
+		int					GetNumTaxSets(); /*v2.1to2.2 6 */
+		void				GetTaxSetNames(NxsStringVector &names); /*v2.1to2.2 3 */ /*v2.1to2.2 6 */
+		NxsUnsignedSet &	GetTaxSet(NxsString nm); /*v2.1to2.2 6 */ /*v2.1to2.2 8 */ /*v2.1to2.2 4 */
+
+		int					GetNumExSets();/*v2.1to2.2 6 */
+		void				GetExSetNames(NxsStringVector &names); /*v2.1to2.2 3 */ /*v2.1to2.2 6 */
+		NxsUnsignedSet &	GetExSet(NxsString nm); /*v2.1to2.2 6 */ /*v2.1to2.2 8 */ /*v2.1to2.2 4 */
+		NxsString			GetDefExSetName(); /*v2.1to2.2 6 */ /*v2.1to2.2 4 */
+		void				ApplyExset(NxsString nm); /*v2.1to2.2 4 */
+
+		virtual void		Read(NxsToken& token);
+		virtual void		Report(std::ostream& out) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void		Reset();
+		virtual void 		WriteAsNexus(std::ostream &out) const;
+
+		/*only used it the linkAPI is enabled*/
+		virtual void		HandleLinkCommand(NxsToken & );
+		virtual void		WriteLinkCommand(std::ostream &out) const;
+
+		virtual VecBlockPtr		GetImpliedBlocks()
+			{
+			return GetCreatedTaxaBlocks();
+			}
+
+		int					GetCharLinkStatus() {return charLinkStatus;}
+		int					GetTaxaLinkStatus() {return taxaLinkStatus;}
+		int					GetTreesLinkStatus() {return treesLinkStatus;}
+
+		void				FlagCharBlockAsUsed() {charLinkStatus |= NxsBlock::BLOCK_LINK_USED;}
+		void				FlagTaxaBlockAsUsed() {taxaLinkStatus |= NxsBlock::BLOCK_LINK_USED;}
+		void				FlagTreesBlockAsUsed() {treesLinkStatus |= NxsBlock::BLOCK_LINK_USED;}
+
+		void				SetCharLinkStatus(NxsBlockLinkStatus s);
+		void				SetTaxaLinkStatus(NxsBlockLinkStatus s);
+		void				SetTreesLinkStatus(NxsBlockLinkStatus s);
+
+		void				SetCharBlockPtr(NxsCharactersBlockAPI * c, NxsBlockLinkStatus s);
+		void				SetTaxaBlockPtr(NxsTaxaBlockAPI *, NxsBlockLinkStatus s);
+		void				SetTreesBlockPtr(NxsTreesBlockAPI *, NxsBlockLinkStatus s);
+		NxsCharactersBlockAPI * GetCharBlockPtr(int *status=NULL); /*v2.1to2.2 13 */
+		NxsTaxaBlockAPI *	GetTaxaBlockPtr(int *status=NULL); /*v2.1to2.2 13 */
+		NxsTreesBlockAPI *	GetTreesBlockPtr(int *status=NULL); /*v2.1to2.2 13 */
+
+		const NxsTransformationManager & GetNxsTransformationManagerConstRef() const
+			{
+			return transfMgr;
+			}
+		NxsTransformationManager & GetNxsTransformationManagerRef()
+			{
+			return transfMgr;
+			}
+		NxsGeneticCodesManager & GetNxsGeneticCodesManagerRef()
+			{
+			return codesMgr;
+			}
+		virtual void AddCharPartition(const std::string & name, const NxsPartition &);
+		virtual void AddTaxPartition(const std::string & name, const NxsPartition &);
+		virtual void AddTreePartition(const std::string & name, const NxsPartition &);
+		virtual void AddCodeSet(const std::string & name, const NxsPartition &, bool asterisked);
+		virtual void AddCodonPosSet(const std::string & name, const NxsPartition &, bool asterisked);
+
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, trees, and characters blocks!
+		*/
+		NxsAssumptionsBlock &operator=(const NxsAssumptionsBlock &other)
+			{
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			CopyAssumptionsContents(other);
+			return *this;
+			}
+
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, trees, and characters blocks!
+		|
+		| passedRefOfOwnedBlock is set to this->true to avoid double deletion (other
+		|	retains ownership of these blocks
+		*/
+		virtual void CopyAssumptionsContents(const NxsAssumptionsBlock &other)
+			{
+			taxa = other.taxa;
+			charBlockPtr = other.charBlockPtr;
+			treesBlockPtr = other.treesBlockPtr;
+			charsets = other.charsets;
+			taxsets = other.taxsets;
+			treesets = other.treesets;
+			exsets = other.exsets;
+			charPartitions = other.charPartitions;
+			taxPartitions = other.taxPartitions;
+			treePartitions = other.treePartitions;
+			def_exset = other.def_exset;
+			charLinkStatus = other.charLinkStatus;
+			taxaLinkStatus = other.taxaLinkStatus;
+			treesLinkStatus = other.treesLinkStatus;
+			passedRefOfOwnedBlock = true;
+			readAs = other.readAs;
+			transfMgr = other.transfMgr;
+			codesMgr = other.codesMgr;
+			createdSubBlocks = other.createdSubBlocks;
+			polyTCountValue = other.polyTCountValue;
+			gapsAsNewstate = other.gapsAsNewstate;
+            blockwideCharsLinkEstablished = other.blockwideCharsLinkEstablished;
+            blockwideTaxaLinkEstablished = other.blockwideTaxaLinkEstablished;
+            blockwideTreesLinkEstablished = other.blockwideTreesLinkEstablished;
+
+			codonPosSets = other.codonPosSets;
+			def_codonPosSet = other.def_codonPosSet;
+			codeSets = other.codeSets;
+			def_codeSet = other.def_codeSet;
+			}
+
+		virtual NxsAssumptionsBlock * Clone() const
+			{
+			NxsAssumptionsBlock * a = new NxsAssumptionsBlock(taxa);
+			*a = *this;
+			return a;
+			}
+		virtual void SetGapsAsNewstate(bool v)
+			{
+			gapsAsNewstate = v;
+			}
+
+
+	protected:
+		typedef std::vector<NxsAssumptionsBlockAPI *> VecAssumpBlockPtr;
+
+		virtual void 		ReadCharsetDef(NxsString charset_name, NxsToken &token, bool asterisked);
+		virtual void 		ReadExsetDef(NxsString charset_name, NxsToken &token, bool asterisked);
+		virtual void 		ReadTreesetDef(NxsString set_name, NxsToken &token, bool asterisked);
+		virtual void 		ReadTaxsetDef(NxsString set_name, NxsToken &token, bool asterisked);
+
+
+		VecBlockPtr 		GetCreatedTaxaBlocks();
+		virtual unsigned	TaxonLabelToNumber(NxsString s) const; /*v2.1to2.2 4 */
+
+		void				HandleCharPartition(NxsToken& token);
+		void				HandleCharSet(NxsToken& token);
+		void				HandleCodeSet(NxsToken& token);
+		void				HandleCodonPosSet(NxsToken& token);
+		void				HandleExSet(NxsToken& token);
+		void				HandleOptions(NxsToken & token);
+		void				HandleTaxPartition(NxsToken& token);
+		void				HandleTaxSet(NxsToken& token);
+		void				HandleTreePartition(NxsToken& token);
+		void				HandleTreeSet(NxsToken& token);
+		void				HandleTypeSet(NxsToken& token);
+		void				HandleUserType(NxsToken& token);
+		void				HandleWeightSet(NxsToken& token);
+
+		void				WriteCharSet(std::ostream &out) const
+			{
+			NxsWriteSetCommand("CHARSET", charsets, out);
+			}
+		void				WriteCharPartition(std::ostream &out) const
+			{
+			NxsWritePartitionCommand("CharPartition", charPartitions, out);
+			}
+		void				WriteExSet(std::ostream &out) const
+			{
+			NxsWriteSetCommand("EXSET", exsets, out, def_exset.c_str());
+			}
+		void				WriteOptions(std::ostream &out) const;
+		void				WriteTaxPartition(std::ostream &out) const
+			{
+			NxsWritePartitionCommand("TaxPartition", taxPartitions, out);
+			}
+		void				WriteTaxSet(std::ostream &out) const
+			{
+			NxsWriteSetCommand("TAXSET", taxsets, out);
+			}
+		void				WriteTreePartition(std::ostream &out) const
+			{
+			NxsWritePartitionCommand("TreePartition", treePartitions, out);
+			}
+		void				WriteTreeSet(std::ostream &out) const
+			{
+			NxsWriteSetCommand("TREESET", treesets, out);
+			}
+		void WriteCodeSet(std::ostream &out) const
+			{
+			NxsWritePartitionCommand("CodeSet", codeSets, out, def_codeSet.c_str());
+			}
+		void WriteCodonPosSet(std::ostream &out) const
+			{
+			NxsWritePartitionCommand("CodonPosSet", codonPosSets, out, def_codonPosSet.c_str());
+			}
+		NameOfAssumpBlockAsRead	GetIDOfBlockTypeIDFromParse() const
+			{
+			return readAs;
+			}
+	private:
+		NxsAssumptionsBlockAPI  *GetAssumptionsBlockForCharTitle(const char *title, NxsToken &token, const char *cmd);
+		NxsAssumptionsBlockAPI  *GetAssumptionsBlockForTaxaTitle(const char *title, NxsToken &token, const char *cmd);
+		NxsAssumptionsBlockAPI  *GetAssumptionsBlockForTreesTitle(const char *title, NxsToken &token, const char *cmd);
+
+		NxsAssumptionsBlockAPI  *GetAssumptionsBlockForCharBlock(NxsCharactersBlockAPI *, NxsBlockLinkStatus, NxsToken &token);
+		NxsAssumptionsBlockAPI  *GetAssumptionsBlockForTaxaBlock(NxsTaxaBlockAPI *, NxsBlockLinkStatus, NxsToken &token);
+		NxsAssumptionsBlockAPI  *GetAssumptionsBlockForTreesBlock(NxsTreesBlockAPI *, NxsBlockLinkStatus, NxsToken &token);
+
+		NxsAssumptionsBlockAPI  *CreateNewAssumptionsBlock(NxsToken &token);
+		NxsAssumptionsBlockAPI *DealWithPossibleParensInCharDependentCmd(NxsToken &token, const char *cmd, const std::vector<std::string> *unsupported = NULL, bool * isVect = NULL);
+		bool					HasAssumptionsBlockCommands() const;
+		bool					HasSetsBlockCommands() const;
+		bool					HasCodonsBlockCommands() const;
+
+
+		NxsTaxaBlockAPI			*taxa;				/* pointer to the NxsTaxaBlockAPI object */
+		NxsCharactersBlockAPI	*charBlockPtr;		/* pointer to the NxsCharactersBlockAPI-derived object to be notified in the event of exset changes */
+		NxsTreesBlockAPI		*treesBlockPtr;		/* pointer to the NxsTreesBlockAPI-derived object to be notified in the event of exset changes */
+
+
+
+		NxsUnsignedSetMap	charsets;
+		NxsUnsignedSetMap	taxsets;
+		NxsUnsignedSetMap	treesets;
+		NxsUnsignedSetMap	exsets;
+
+		NxsPartitionsByName charPartitions;
+		NxsPartitionsByName taxPartitions;
+		NxsPartitionsByName treePartitions;
+
+		NxsString			def_exset;			/* the default exset */
+
+		NxsPartitionsByName codonPosSets;
+		NxsString			def_codonPosSet;	/* the default codonPosSet */
+		NxsPartitionsByName codeSets;
+		NxsString			def_codeSet;		/* the default codeSet */
+
+		int					charLinkStatus;
+		int					taxaLinkStatus;
+		int					treesLinkStatus;
+		bool				passedRefOfOwnedBlock;
+		NameOfAssumpBlockAsRead	readAs;
+		NxsTransformationManager transfMgr;
+		NxsGeneticCodesManager	codesMgr;
+
+		std::vector<NxsAssumptionsBlockAPI *> createdSubBlocks;
+		enum PolyTCountValue
+			{
+			POLY_T_COUNT_UNKNOWN,
+			POLY_T_COUNT_MIN,
+			POLY_T_COUNT_MAX
+			};
+		PolyTCountValue		polyTCountValue;
+		bool				gapsAsNewstate;
+		bool blockwideCharsLinkEstablished;
+		bool blockwideTaxaLinkEstablished;
+		bool blockwideTreesLinkEstablished;
+
+		friend class NxsAssumptionsBlockFactory;
+		friend class PublicNexusReader;
+	};
+
+class NxsAssumptionsBlockFactory
+	:public NxsBlockFactory
+	{
+	public:
+		virtual NxsAssumptionsBlock * GetBlockReaderForID(const std::string & blockTypeName, NxsReader *reader, NxsToken *token);
+	};
+
+typedef NxsAssumptionsBlock AssumptionsBlock;	// for backward compatibility
+
+#endif
+
diff --git a/ncl/nxsblock.cpp b/ncl/nxsblock.cpp
new file mode 100644
index 0000000..0875596
--- /dev/null
+++ b/ncl/nxsblock.cpp
@@ -0,0 +1,641 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxsreader.h"
+#include <cstdlib>
+using namespace std;
+
+bool NxsLabelToIndicesMapper::allowNumberAsIndexPlusOne = true; //@TEMPORARY hack
+
+
+/* i18 */ /*v2.1to2.2 18 */
+
+#if !defined(IGNORE_NXS_ASSERT) && !defined(NDEBUG)
+	void ncl_assertion_failed(char const * expr, char const * function, char const * file, long line)
+		{
+#		if defined (ASSERTS_TO_EXCEPTIONS)
+			NxsString err;
+#		else
+			std::ostream & err(cerr);
+#		endif
+			err << "\nNCL assertion failed:";
+			err << "\n  expr: " << expr;
+			err << "\n  func: " << function;
+			err << "\n  file: " << file;
+			err << "\n  line: " << line ;
+#		if defined (ASSERTS_TO_EXCEPTIONS)
+			throw NxsNCLAPIException(err);
+#		else
+			std::cerr << std::endl;
+			std::exit(1);
+#		endif
+		}
+#endif
+
+
+/// returns the number of indices added (could be zero if the set name is not found.
+
+unsigned NxsLabelToIndicesMapper::GetIndicesFromSets(const std::string &label,
+  NxsUnsignedSet *inds,
+  const NxsUnsignedSetMap & itemSets)
+	{
+	const unsigned labelLen = (unsigned)label.length();
+	NxsUnsignedSetMap::const_iterator csIt = itemSets.begin();
+	for (; csIt != itemSets.end(); ++csIt)
+		{
+		const NxsString & csLabel = csIt->first;
+		if (labelLen == csLabel.length() && NxsString::case_insensitive_equals(label.c_str(), csLabel.c_str()))
+			{
+			const std::set<unsigned> & csSet = csIt->second;
+			if (inds)
+				inds->insert(csSet.begin(), csSet.end());
+			return (unsigned)csSet.size();
+			}
+		}
+	return 0;
+	}
+
+
+/// returns the number of indices added (will generate an NxsException if the name is neither a set name or a number).
+unsigned NxsLabelToIndicesMapper::GetIndicesFromSetOrAsNumber(const std::string &label,
+  NxsUnsignedSet *inds,
+  const NxsUnsignedSetMap & itemSets,
+  const unsigned maxInd,
+  const char * itemType) /* "tree", "character"... */
+	{
+	unsigned n = GetIndicesFromSets(label, inds, itemSets);
+	if (n > 0)
+		return n;
+	long i;
+	if (!NxsString::to_long(label.c_str(), &i))
+		{
+		NxsString emsg;
+		emsg << "Expecting a  number or " << itemType << " label, found " <<  label;
+		throw NxsException(emsg);
+		}
+	if (!NxsLabelToIndicesMapper::allowNumberAsIndexPlusOne)
+		{
+		NxsString emsg;
+		emsg << "Numbers are not to be used as labels to indicate " << itemType << " indices, but " << label << " was encountered.";
+		throw NxsException(emsg);		
+		}
+	i--;
+	if (i > (long)maxInd  || i < 0)
+		{
+		NxsString emsg = "Expecting a ";
+		emsg << itemType << " name or a number corresponding to a " << itemType << "\'s number (a number from 1 to ";
+		emsg << maxInd + 1 << "). Found " << label;
+		throw NxsException(emsg);
+		}
+	unsigned asu = (unsigned) (i);
+	if (inds)
+		inds->insert(asu);
+	return 1;
+	}
+
+void NxsBlock::WarnDangerousContent(const std::string &s, const NxsToken &token)
+	{
+	if (nexusReader)
+		nexusReader->NexusWarnToken(s, NxsReader::PROBABLY_INCORRECT_CONTENT_WARNING, token);
+	else
+		throw NxsException(s, token);
+	}
+
+void NxsBlock::WarnDangerousContent(const std::string &s, const ProcessedNxsToken &token)
+	{
+	if (nexusReader)
+		nexusReader->NexusWarnToken(s, NxsReader::PROBABLY_INCORRECT_CONTENT_WARNING, token);
+	else
+		throw NxsException(s, token);
+	}
+void NxsBlock::SkipCommand(NxsToken & token)
+	{
+	if (nexusReader)
+		{
+		errormsg = "Skipping command: ";
+		errormsg << token.GetTokenReference();
+		nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	if (!token.Equals(";"))
+		SkippingCommand(token.GetToken());
+	if (storeSkippedCommands)
+		{
+		ProcessedNxsCommand pnc;
+		token.ProcessAsCommand(&pnc);
+		skippedCommands.push_back(pnc);
+		}
+	else
+		token.ProcessAsCommand(NULL);
+	}
+
+void NxsBlock::WriteSkippedCommands(std::ostream & out) const
+	{
+	for (list<ProcessedNxsCommand>::const_iterator cIt = skippedCommands.begin(); cIt != skippedCommands.end(); ++cIt)
+		{
+		if (WriteCommandAsNexus(out, *cIt))
+			out << '\n';
+		}
+
+	}
+
+
+
+/*!
+	Hook to consolidate the handling of COMMANDS that are common to all blocks (TITLE, BLOCKID, END, ENDBLOCK -- and,
+		evenually, LINK).
+	HandleXYZ() where XYZ is the command name is then called.
+	Returns NxsCommandResult(HANDLED_COMMAND), NxsCommandResult(HANDLED_COMMAND), or NxsCommandResult(UNKNOWN_COMMAND)
+		to tell the caller whether the command was recognized.
+*/
+NxsBlock::NxsCommandResult NxsBlock::HandleBasicBlockCommands(NxsToken & token)
+	{
+	if (token.Equals("TITLE"))
+		{
+		HandleTitleCommand(token);
+		return NxsBlock::NxsCommandResult(HANDLED_COMMAND);
+		}
+	if (false && token.Equals("BLOCKID")) /*now we are skipping this to put it at the end of blocks*/
+		{
+		HandleBlockIDCommand(token);
+		return NxsBlock::NxsCommandResult(HANDLED_COMMAND);
+		}
+	if (token.Equals("LINK") && this->ImplementsLinkAPI())
+		{
+		HandleLinkCommand(token);
+		return NxsBlock::NxsCommandResult(HANDLED_COMMAND);
+		}
+	if (token.Equals("END") || token.Equals("ENDBLOCK"))
+		{
+		HandleEndblock(token);
+		return NxsBlock::NxsCommandResult(STOP_PARSING_BLOCK);
+		}
+	return NxsBlock::NxsCommandResult(UNKNOWN_COMMAND);
+	}
+
+/*!
+	Stores the next token as the this->title field.
+*/
+void NxsBlock::HandleTitleCommand(NxsToken & token)
+	{
+	token.GetNextToken();
+	if (token.Equals(";"))
+		GenerateUnexpectedTokenNxsException(token, "a title for the block");
+	if (!title.empty() && nexusReader)
+		{
+		errormsg = "Multiple TITLE commands were encountered the title \"";
+		errormsg += title;
+		errormsg += "\" will be replaced by \"";
+		errormsg += token.GetToken() ;
+		errormsg += '\"';
+		nexusReader->NexusWarnToken(errormsg, NxsReader::OVERWRITING_CONTENT_WARNING, token);
+		errormsg.clear();
+		}
+	title = token.GetToken();
+	/* i19 */ /*v2.1to2.2 19 */
+	autoTitle = false;
+	DemandEndSemicolon(token, "TITLE");
+	}
+
+/*!
+	Stores the next token as the this->blockid field.
+*/
+void NxsBlock::HandleBlockIDCommand(NxsToken & token)
+	{
+	token.GetNextToken();
+	if (token.Equals(";"))
+		GenerateUnexpectedTokenNxsException(token, "an id for the block");
+	blockIDString = token.GetToken();
+	DemandEndSemicolon(token, "BLOCKID");
+	}
+
+/*!
+	The LINK command was invented for use in Mesquite where multiple instances of a particular type of data-containing
+	block are allowed. The NEXUS specification does not discuss the correct behavior in such cases.
+
+	Some of the problems caused by failing to specify how multiple data-containing block should be handled can
+	be avoided by explicitly linking blocks. For instance a CHARACTERS block may have a "LINK taxa=TaxaBlockTitle;"
+	to indicate which block of taxa it uses.
+
+	The NxsBlock version merely raises a NxsUnimplementedException.
+
+	Before version 2.1 Links between blocks were "off" by default (see below)
+	In version 2.1, the block scoping was made more robust, so the Link API was
+	enabled for all factory-created blocks in the commonly-used PublicNexusReader.
+	In 2.1 and greater it is safe to call SetImplementsLinkAPI(true) on any block (as far as we know).
+
+LINK API in NCL version > 2.0.04 and < 2.1
+	NCL versions after 2.0.04 will support for LINK for the public blocks, but will have the functionality
+		turned off by default (for backwards-compatibility).  When turned-off, LINK commands will be skipped.
+		Calling SetImplementsLinkAPI(true) on an instance will enable the use of the HandleLinkCommand() and
+		WriteLinkCommand()
+
+	HandleLinkCommand should be a pure virtual function, but implementing it that way would break old code that uses
+		NCL.  Instead the ImplementsLinkAPI/SetImplementsLinkAPI mechanism was invented.
+		NCL components will only call HandleLinkCommand() or WriteLinkCommand() if ImplementsLinkAPI() returns true.
+		For backward compatibility default all blocks have linkAPI=false.
+
+	Client code should always call ImplementsLinkAPI() to check whether HandleLinkCommand() or WriteLinkCommand()
+		are available.  Failure to do this may result in NxsUnimplementedException() being called.
+*/
+void NxsBlock::HandleLinkCommand(NxsToken & )
+	{
+	throw NxsUnimplementedException("NxsBlock::HandleLinkCommand");
+	}
+/*!
+
+*/
+void NxsBlock::WriteBasicBlockCommands(std::ostream &out) const
+	{
+	WriteTitleCommand(out);
+	WriteBlockIDCommand(out);
+	if (this->ImplementsLinkAPI())
+		WriteLinkCommand(out);
+	}
+
+/*!
+	Initializes all pointer data members to NULL, and all bool data members to true except isUserSupplied, which is
+	initialized to false.
+*/
+NxsBlock::NxsBlock()
+	:isEmpty(true),
+	isEnabled(true),
+	isUserSupplied(false),
+	nexusReader(NULL),
+	next(NULL),
+	linkAPI(false),
+	storeSkippedCommands(true)
+	{
+	}
+
+
+/*!
+	Raises an exception if it is not an equals sign.
+
+ 	Sets errormsg and raises a NxsException on failure.
+	`contextString` is used in error messages:
+		"Expecting '=' ${contextString} but found..."
+*/void NxsBlock::DemandIsAtEquals(NxsToken &token, const char *contextString) const
+	{
+	if (!token.Equals("="))
+		{
+		errormsg = "Expecting '=' ";
+		if (contextString)
+			errormsg.append(contextString);
+		errormsg << " but found " << token.GetToken() << " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	}
+
+void NxsBlock::DemandEquals(ProcessedNxsCommand::const_iterator & tokIt, const ProcessedNxsCommand::const_iterator & endIt, const char *contextString) const
+	{
+	++tokIt;
+	if (tokIt == endIt)
+		{
+		errormsg = "Expecting '=' ";
+		if (contextString)
+			errormsg.append(contextString);
+		errormsg << " but found ; instead";
+		--tokIt;
+		throw NxsException(errormsg, *tokIt);
+		}
+	if (!tokIt->Equals("="))
+		{
+		errormsg = "Expecting '=' ";
+		if (contextString)
+			errormsg.append(contextString);
+		errormsg << " but found " << tokIt->GetToken() << " instead";
+		throw NxsException(errormsg, *tokIt);
+		}
+	}
+
+
+/*!
+ throws a NxsException with the token info for `token`
+ `expected` should fill in the phrase "Expecting ${expected}, but found..."
+ expected can be NULL.
+
+ Sets this->errormsg
+*/
+void NxsBlock::GenerateNxsException(NxsToken &token, const char *message) const
+	{
+	if (message)
+		errormsg = message;
+	throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+/*!
+ throws a NxsException with the token info for `token`
+ `expected` should fill in the phrase "Expecting ${expected}, but found..."
+ expected can be NULL.
+
+ Sets this->errormsg
+*/
+void NxsBlock::GenerateUnexpectedTokenNxsException(NxsToken &token, const char *expected) const
+	{
+	errormsg = "Unexpected token";
+	if (expected)
+		{
+		errormsg += ". Expecting ";
+		errormsg += expected;
+		errormsg += ", but found: ";
+		}
+	else
+		{
+		errormsg += ": ";
+		}
+	errormsg += token.GetToken();
+	throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+	}
+
+
+
+/*!
+	Called when the END or ENDBLOCK command needs to be parsed from within a block.
+ 	Basically just checks to make sure the next token in the data file is a semicolon.
+*/
+void NxsBlock::HandleEndblock(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	DemandEndSemicolon(token, "END or ENDBLOCK");
+	}
+
+/*!
+	Nothing to be done.
+*/
+NxsBlock::~NxsBlock()
+	{
+	if (nexusReader)
+		nexusReader->Detach(this);
+	}
+
+/*! This base class version simply returns 0 but a derived class should override this function if it needs to construct
+	and run a NxsSetReader object to read a set involving characters. The NxsSetReader object may need to use this
+	function to look up a character label encountered in the set. A class that overrides this method should return the
+	character index in the range [1..nchar].
+*/
+unsigned NxsBlock::CharLabelToNumber(
+  NxsString) NCL_COULD_BE_CONST /* the character label to be translated to the character's number */ /*v2.1to2.2 1 */
+	{
+	return 0;
+	}
+
+/*!
+	Sets the value of isEnabled to false. A NxsBlock can be disabled (by calling this method) if blocks of that type
+	are to be skipped during execution of the NEXUS file. If a disabled block is encountered, the virtual
+	NxsReader::SkippingDisabledBlock function is called, giving your application the opportunity to inform the user
+	that a block was skipped.
+*/
+void NxsBlock::Disable()
+	{
+	isEnabled = false;
+	}
+
+/*!
+	Sets the value of isEnabled to true. A NxsBlock can be disabled (by calling Disable) if blocks of that type are to
+	be skipped during execution of the NEXUS file. If a disabled block is encountered, the virtual
+	NxsReader::SkippingDisabledBlock function is called, giving your application the opportunity to inform the user
+	that a block was skipped.
+*/
+void NxsBlock::Enable()
+	{
+	isEnabled = true;
+	}
+
+/*!
+	Returns value of isEnabled, which can be controlled through use of the Enable and Disable member functions. A
+	NxsBlock should be disabled if blocks of that type are to be skipped during execution of the NEXUS file. If a
+	disabled block is encountered, the virtual NxsReader::SkippingDisabledBlock function is called, giving your
+	application the opportunity to inform the user that a block was skipped.
+*/
+bool NxsBlock::IsEnabled() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return isEnabled;
+	}
+
+/*!
+	Returns value of isUserSupplied, which is true if and only if this block's Read function is called to process a
+	block of this type appearing in a data file. This is useful because in some cases, a block object may be created
+	internally (e.g. a NxsTaxaBlockAPI may be populated using taxon names provided in a DATA block), and such blocks do
+	not require permission from the user to delete data stored therein.
+*/
+bool NxsBlock::IsUserSupplied() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return isUserSupplied;
+	}
+
+/*!
+	Returns true if Read function has not been called since the last Reset. This base class version simply returns the
+	value of the data member isEmpty. If you derive a new block class from NxsBlock, be sure to set isEmpty to true in
+	your Reset function and isEmpty to false in your Read function.
+*/
+bool NxsBlock::IsEmpty() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return isEmpty;
+	}
+
+/*!
+	Returns the `NCL_BLOCKTYPE_ATTR_NAME` NxsString.  \ref BlockTypeIDDiscussion
+*/
+NxsString NxsBlock::GetID() const
+	{
+	return NCL_BLOCKTYPE_ATTR_NAME;
+	}
+
+/*!
+	This virtual function must be overridden for each derived class to provide the ability to read everything following
+	the block name (which is read by the NxsReader object) to the end or endblock statement. Characters are read from
+	the input stream 'in'. Note that to get output comments displayed, you must derive a class from NxsToken, override
+	the member function OutputComment to display a supplied comment, and then pass a reference to an object of the
+	derived class to this function.
+*/
+void NxsBlock::Read(
+  NxsToken &)	/* the NxsToken to use for reading block */
+	{
+	}
+
+/*!
+	This virtual function should be overridden for each derived class to completely reset the block object in
+	preparation for reading in another block of this type. This function is called by the NxsReader object just prior to
+	calling the block object's Read function.
+*/
+void NxsBlock::Reset()
+	{
+	title = std::string();
+	/* i19 */ /*v2.1to2.2 19 */
+	autoTitle = false;
+	// Reset base class data members that could have changed
+	//
+	errormsg.clear();
+	isEnabled      = true;
+	isEmpty        = true;
+	isUserSupplied = false;
+	skippedCommands.clear();
+
+	}
+
+/*!
+	This virtual function provides a brief report of the contents of the block.
+*/
+void NxsBlock::Report(
+  std::ostream &) NCL_COULD_BE_CONST /* the output stream to which the report is sent */ /*v2.1to2.2 1 */
+	{
+	}
+
+/*!
+	This function is called when an unknown command named commandName is about to be skipped. This version of the
+	function does nothing (i.e., no warning is issued that a command was unrecognized). Override this virtual function
+	in a derived class to provide such warnings to the user.
+*/
+void NxsBlock::SkippingCommand(
+  NxsString )	/* the name of the command being skipped */
+	{
+	}
+
+/*!
+	This base class version simply returns 0, but a derived class should override this function if it needs to construct
+	and run a NxsSetReader object to read a set involving taxa. The NxsSetReader object may need to use this function to
+	look up a taxon label encountered in the set. A class that overrides this method should return the taxon index in
+	the range [1..ntax].
+*/
+unsigned NxsBlock::TaxonLabelToNumber(
+  NxsString ) const /* the taxon label to be translated to a taxon number */
+	{
+	return 0;
+	}
+
+/*!
+	Returns a vector of Blocks that were created by the reading in of this block (the prototypical case is the taxa block
+	that is implied by a data block).
+*/
+VecBlockPtr	NxsBlock::GetImpliedBlocks()
+	{
+	return VecBlockPtr();
+	}
+
+/*!
+	Returns a vector of Blocks that were created by the reading in of this block (the prototypical case is the taxa block
+	that is implied by a data block).
+*/
+VecConstBlockPtr NxsBlock::GetImpliedBlocksConst() const
+	{
+	return VecConstBlockPtr();
+	}
+
+/*!
+	Should returns a  new instance (deep copy) of the same type of block with the same state.
+	Note the NxsReader field should not be cloned (it should be aliased).
+
+	NxsBlock version throws NxsUnimplementedException (in future versions of NCL this will be a pure virtual.
+
+	NxsBlocks are expected to clone their linked blocks, but memo is passed in to avoid double cloning of shared references.
+	memo is an mapper of an old block to a new instance (used when groups of blocks are being cloned).
+*/
+NxsBlock * NxsBlock::CloneBlock(
+  NxsBlockMapper & /// memo is an mapper of an old block to a new instance (used when groups of blocks are being cloned)
+  ) const
+	{
+	throw NxsUnimplementedException(NxsString("CloneBlock"));
+	}
+
+/*!
+	Should serialize the content of the block as NEXUS.
+	NxsBlock version throws NxsUnimplementedException (in future versions of NCL this will be a pure virtual.
+*/
+void NxsBlock::WriteAsNexus(std::ostream &) const
+	{
+	throw NxsUnimplementedException(NxsString("NxsBlock::WriteAsNexus"));
+	}
+
+void NxsBlock::WriteTitleCommand(std::ostream &out) const
+	{
+	const std::string &t = this->GetInstanceName();
+	if (t.length() > 0)
+		out << "    TITLE " << NxsString::GetEscaped(t) << ";\n";
+	}
+
+void NxsBlock::WriteBlockIDCommand(std::ostream &out) const
+	{
+	const std::string & t = this->blockIDString;
+	if (t.length() > 0)
+		out << "    BLOCKID " << NxsString::GetEscaped(t) << ";\n";
+	}
+
+/*!
+	Should write the LINK command to out.
+	NxsBlock versio merely raises NxsUnimplementedException.
+	See notes on HandleLinkCommand.
+*/
+void NxsBlock::WriteLinkCommand(std::ostream &) const
+	{
+	throw NxsUnimplementedException("NxsBlock::WriteLinkCommand");
+	}
+
+std::string GetBlockIDTitleString(NxsBlock &b)
+	{
+	const std::string &t = b.GetInstanceName();
+	std::string r = b.GetID();
+	r.append(" block");
+	if (t.length() > 0)
+		{
+		r.append(" (");
+		r.append(t);
+		r.append(")");
+		}
+	return r;
+	}
+
+/*!
+	Accessor to "linkAPI" field. See notes on HandleLinkCommand.
+*/
+bool NxsBlock::ImplementsLinkAPI() const
+	{
+	return this->linkAPI;
+	}
+
+/*!
+	Should be called with SetImplementsLinkAPI(true) by all blocks that overload both:
+		HandleLinkCommand() and
+		WriteLinkCommand()
+	and that want LINK to be dealt with as a Basic block command.
+	See notes on HandleLinkCommand.
+*/
+void NxsBlock::SetImplementsLinkAPI(bool v)
+	{
+	this->linkAPI = v;
+	}
+/*!
+	Advances the token, and returns the unsigned int that the token represents
+
+ 	Sets errormsg and raises a NxsException on failure.
+	`contextString` is used in error messages:
+		"${contextString} must be a number greater than 0"
+*/
+unsigned NxsBlock::DemandPositiveInt(NxsToken &token, const char *contextString) const
+	{
+	return NxsToken::DemandPositiveInt(token, this->errormsg, contextString);
+	}
+
+void NxsBlock::DemandEndSemicolon(NxsToken &token, const char *contextString) const
+	{
+	NxsToken::DemandEndSemicolon(token, this->errormsg, contextString);
+	}
+
diff --git a/ncl/nxsblock.h b/ncl/nxsblock.h
new file mode 100644
index 0000000..04a2541
--- /dev/null
+++ b/ncl/nxsblock.h
@@ -0,0 +1,366 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#ifndef NCL_NXSBLOCK_H
+#define NCL_NXSBLOCK_H
+
+#include <vector>
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsexception.h"
+#include "ncl/nxstoken.h"
+
+class NxsReader;
+class NxsBlock;
+class NxsTaxaBlockAPI;
+
+typedef std::vector<NxsBlock *> VecBlockPtr;
+typedef std::vector<const NxsBlock *> VecConstBlockPtr;
+typedef std::pair<const NxsBlock *, std::string> BlockUniqueID;
+typedef std::map<BlockUniqueID, NxsBlock *> NxsBlockMapper;
+
+
+
+/*! This is the base class for the block interfaces that correspond to blocks
+that hold ordered lists (TAXA, CHARACTERS, TREES).
+
+	This interface is used internally during parsing, and is usually NOT
+	called directly by client code.
+*/
+class NxsLabelToIndicesMapper
+	{
+	public:
+		virtual ~NxsLabelToIndicesMapper(){}
+		virtual unsigned GetMaxIndex() const = 0;
+		virtual unsigned GetNumLabelsCurrentlyStored() const {return GetMaxIndex();}
+		/* Adds the 0-based indices corresponding to a label to the set.
+
+		 \returns the number of indices that correspond to the label (and the number
+		 of items that would be added to *inds if inds points to an empty set).
+		*/
+		virtual unsigned GetIndicesForLabel(const std::string &label, /* label, set name or string with the 1-based numeric representation of the object */
+											NxsUnsignedSet *inds /* The set of indices to add the taxa indices to (can be 0L). */
+											) const = 0;
+		/* Confusingly named function.
+			This function looks for the index set than is named `label` in the NxsLabelToIndicesMapper
+			It adds the indices from this set into `toFill` (if toFill is not NULL).
+			\returns the size of the set which was named label (the number of indices that were inserted).
+		*/
+		virtual unsigned GetIndexSet(const std::string &label, NxsUnsignedSet * toFill) const = 0;
+		/* Adds set `inds` to the collection of sets and gives it the name `label`
+			\returns true if the set replaced an existing set (in this case a warning will be issued - which can generate an NxsException, if the client code wants warning to generate exceptions).
+		*/
+		virtual bool AddNewIndexSet(const std::string &label, const NxsUnsignedSet & inds) = 0;
+		/* Adds partition `inds` to the collection of partition and gives it the name `label`
+			\returns true if the set replaced an existing partition (in this case a warning will be issued - which can generate an NxsException, if the client code wants warning to generate exceptions).
+		*/
+		virtual bool AddNewPartition(const std::string &label, const NxsPartition & inds) = 0;
+
+		/* Adds a new label to the collection of valid labels
+			AppendNewLabel is only overloaded in Taxa and State LabelToIndexMappers, all other
+			NxsLabelToIndicesMapper instances \throw NxsUnimplementedException
+		*/
+		virtual unsigned AppendNewLabel(std::string &/*label*/)
+			{
+			throw NxsUnimplementedException("AppendNewLabel called on fixed label interface");
+			}
+		static bool allowNumberAsIndexPlusOne;
+	protected:
+		static unsigned GetIndicesFromSets(const std::string &label, NxsUnsignedSet *inds, const NxsUnsignedSetMap & itemSets);
+		static unsigned GetIndicesFromSetOrAsNumber(const std::string &label, NxsUnsignedSet *inds, const NxsUnsignedSetMap & itemSets, const unsigned maxInd, const char * itemType);
+	};
+
+class NxsSetVectorItemValidator;
+
+std::string GetBlockIDTitleString(NxsBlock &);
+/*!
+	This is the base class from which all block classes are derived. A NxsBlock-derived class encapsulates a Nexus block
+	(e.g. DATA block, TREES block, etc.). The abstract virtual function Read must be overridden for each derived class
+	to provide the ability to read everything following the block name (which is read by the NxsReader object) to the
+	end or endblock statement. Derived classes must provide their own data storage and access functions. The abstract
+	virtual function Report must be overridden to provide some feedback to user on contents of block. The abstract
+	virtual function Reset must be overridden to empty the block of all its contents, restoring it to its
+	just-constructed state.
+*/
+class NxsBlock
+	{
+	friend class NxsReader;
+		/* i20 */ /*v2.1to2.2 20 */
+	public:
+		enum NxsBlockLinkStatus
+			{
+			BLOCK_LINK_UNINITIALIZED = 	       0x00,
+			BLOCK_LINK_UNKNOWN_STATUS =        0x01, /*backwards compatibility, this is the status of old block links*/
+			BLOCK_LINK_TO_ONLY_CHOICE =        0x02,
+			BLOCK_LINK_TO_MOST_RECENT =        0x04,
+			BLOCK_LINK_TO_IMPLIED_BLOCK =      0x08,
+			BLOCK_LINK_FROM_LINK_CMD =         0x10,
+			BLOCK_LINK_EQUIVALENT_TO_IMPLIED = 0x20,
+			BLOCK_LINK_UNUSED_MASK =           0x3F,
+			BLOCK_LINK_USED =                  0x40
+			};
+		enum NxsCommandResult
+			{
+			STOP_PARSING_BLOCK,
+			HANDLED_COMMAND,
+			UNKNOWN_COMMAND
+			};
+							NxsBlock();
+		virtual				~NxsBlock();
+
+		virtual void SetNexus(NxsReader *nxsptr);
+		NxsReader *GetNexus() const;
+		virtual bool CanReadBlockType(const NxsToken & token)
+			{
+			return token.Equals(NCL_BLOCKTYPE_ATTR_NAME);
+			}
+
+		NxsString			GetID() const;
+		bool				IsEmpty() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+
+		void				Enable();
+		void				Disable();
+		bool				IsEnabled() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool				IsUserSupplied() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+
+		virtual unsigned	CharLabelToNumber(NxsString s) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual unsigned	TaxonLabelToNumber(NxsString s) const;
+
+		virtual void		SkippingCommand(NxsString commandName);
+
+		virtual void		HandleBlockIDCommand(NxsToken &token);
+		virtual void		HandleEndblock(NxsToken &token);
+		virtual void		HandleLinkCommand(NxsToken &token);
+		virtual void		HandleTitleCommand(NxsToken &token);
+
+		virtual void		Report(std::ostream &out) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void		Reset();
+
+		mutable NxsString	errormsg;			/* workspace for creating error messages */
+
+
+		virtual VecBlockPtr GetImpliedBlocks();
+		virtual VecConstBlockPtr	GetImpliedBlocksConst() const;
+		BlockUniqueID		GetInstanceIdentifier() const
+			{
+			return BlockUniqueID(this, GetInstanceName());
+			}
+		/* i21 */ /*v2.1to2.2 21 */
+		const std::string  &GetInstanceName() const
+			{
+			return title;
+			}
+		virtual NxsBlock			*CloneBlock(NxsBlockMapper &memo) const;
+		bool				ImplementsLinkAPI() const;
+		void				SetImplementsLinkAPI(bool v);
+
+		virtual void				WriteAsNexus(std::ostream &out) const;
+		virtual void 				WriteBlockIDCommand(std::ostream &out) const;
+		virtual void 				WriteLinkCommand(std::ostream &out) const;
+		virtual void 				WriteTitleCommand(std::ostream &out) const;
+		std::string GetTitle() const
+			{
+			return title;
+			}
+		void SetTitle(const std::string &t, bool autogeneratedTitle)
+			{
+			title = t;
+			/* i19 */ /*v2.1to2.2 19 */
+			autoTitle = autogeneratedTitle;
+			}
+		bool IsAutoGeneratedTitle() const
+			{
+			return autoTitle;
+			}
+		void StoreSkippedCommands(bool v)
+			{
+			storeSkippedCommands = v;
+			}
+		void ClearStoredSkippedCommands()
+			{
+			skippedCommands.clear();
+			}
+
+		/*----------------------------------------------------------------------------------------
+		| Copies all NxsBlock fields - execept  the `nexusReader` and `next` pointers.
+		|	Aliasing of Block pointers results in very dangerous implication of copying for
+		|	many subclasses of NxsBlock.
+		| Copying of blocks should be restricted to empty blocks without linkages (e.g.
+		|	the CloneFactory mechanism requires some form of copy, but should typically be used with
+		|	empty blocks.
+		*/
+
+		virtual void CopyBaseBlockContents(const NxsBlock &other)
+			{
+			errormsg = other.errormsg;
+			isEmpty = other.isEmpty;
+			isEnabled = other.isEnabled;
+			isUserSupplied = other.isUserSupplied;
+			NCL_BLOCKTYPE_ATTR_NAME = other.NCL_BLOCKTYPE_ATTR_NAME;
+			title = other.title;
+			/* i19 */ /*v2.1to2.2 19 */
+			blockIDString = other.blockIDString;
+			linkAPI = other.linkAPI;
+			storeSkippedCommands = other.storeSkippedCommands;
+			skippedCommands = other.skippedCommands;
+			autoTitle = other.autoTitle;
+			}
+
+		virtual NxsBlock * Clone() const
+			{
+			NxsBlock * b = new NxsBlock();
+			b->CopyBaseBlockContents(*this);
+			b->nexusReader = NULL;
+			b->next = NULL;
+			return b;
+			}
+
+		unsigned			ReadVectorPartitionDef(NxsPartition &np, NxsLabelToIndicesMapper &ltm, const std::string & partName, const char * ptype, const char * cmd, NxsToken & token, bool warnAsterisked, bool demandAllInds, NxsSetVectorItemValidator & v);
+		void 				ReadPartitionDef(NxsPartition &np, NxsLabelToIndicesMapper &ltm, const std::string & partName, const char * ptype, const char * cmd, NxsToken & token, bool warnAsterisked, bool demandAllInds, bool storeAsPartition);
+		virtual bool		TolerateEOFInBlock() const
+			{
+			return false;
+			}
+		void 				WarnDangerousContent(const std::string &s, const NxsToken &t);
+		void 				WarnDangerousContent(const std::string &s, const ProcessedNxsToken &t);
+
+		void				WriteBasicBlockCommands(std::ostream & out) const;
+		virtual void		WriteSkippedCommands(std::ostream & out) const;
+		// used internally to deal with multiple blocks spawning the same TAXA block
+		virtual bool 		SwapEquivalentTaxaBlock(NxsTaxaBlockAPI * )
+		{
+			return false;
+		}
+		/*! This is the argument from the BLOCKID command.  It should be unique, but
+			that is dependent on the file being valid (NCL does not verify uniqueness).
+
+			This is not the ID used to identify block type. \ref BlockTypeIDDiscussion
+		*/
+		std::string GetBlockIDCommandString() const { return blockIDString; }
+	protected:
+		void				SkipCommand(NxsToken & token);
+
+		NxsCommandResult	HandleBasicBlockCommands(NxsToken & token);
+		void				DemandEndSemicolon(NxsToken &token, const char *contextString) const;
+		void				DemandEquals(NxsToken &token, const char *contextString) const;
+		void				DemandEquals(ProcessedNxsCommand::const_iterator &tokIt, const ProcessedNxsCommand::const_iterator & endIt, const char *contextString) const ;
+		void				DemandIsAtEquals(NxsToken &token, const char *contextString) const;
+		unsigned 			DemandPositiveInt(NxsToken &token, const char *contextString) const;
+		void				GenerateNxsException(NxsToken &token, const char *message = NULL) const;
+		void				GenerateUnexpectedTokenNxsException(NxsToken &token, const char *expected = NULL) const;
+		bool				isEmpty;			/* true if this object is currently storing data */
+		bool				isEnabled;			/* true if this block is currently ebabled */
+		bool				isUserSupplied;		/* true if this object has been read from a file; false otherwise */
+		NxsReader			*nexusReader;		/* pointer to the Nexus file reader object */
+		NxsBlock			*next;				/* DEPRECATED field pointer to next block in list */
+		NxsString			NCL_BLOCKTYPE_ATTR_NAME;					/* holds name of block (e.g., "DATA", "TREES", etc.) \ref BlockTypeIDDiscussion */
+		std::string			title;				/* holds the title of the block empty by default */
+		std::string 		blockIDString; 		/* Mesquite generates these. I don't know what they are for */
+		bool				linkAPI;
+		bool				autoTitle;			/* true if the title was generated internally*/
+		bool				storeSkippedCommands;
+		std::list<ProcessedNxsCommand> skippedCommands; /* commands accumulate by SkipCommand or by some other means */
+
+		virtual void		Read(NxsToken &token);
+		/* i22 */ /*v2.1to2.2 22 */
+		private:
+			NxsBlock &operator=(const NxsBlock &other); /*intentionally not defined because of aliasing issues */
+
+	};
+
+/*! This abstract class defines the interface for a factory that can generate NxsBlocks.
+
+	When the NxsReader::Execute() method encounters a block that it needs to handle, it will first check the registered "singelton"
+		blocks (a block that has been added to it using NxsReader::Add(), those NxsBlock instances are recycled).
+		If no singleton block says that it can read that block of NEXUS (see NxsBlock::CanReadBlockType()), then the NxsReader
+		will walk through its list of factories calling NxsBlockFactory::GetBlockReaderForID() for each until it gets a
+		non-NULL pointer.
+
+	If there is an exception during the parsing of that block BlockError will be called for the factory instance that generated the block
+
+	If the block returns "false" from NxsBlock::IsEnabled() method, then BlockSkipped will be called by the NxsReader using
+		 the factory instance that generated the block
+
+	Blocks generated by factories but used successfully in a parse have to be deleted by the client code (See \ref memoryManagement discussion).
+
+*/
+class NxsBlockFactory
+	{
+	public:
+		virtual ~NxsBlockFactory()
+			{
+			}
+		/*! \returns a NxsBlock instance with NxsBlock::Read method that is capable of parsing a NEXUS block of type `NCL_BLOCKTYPE_ATTR_NAME`
+		*/
+		virtual NxsBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, /*!< The type of block that needs to be read see \ref BlockTypeIDDiscussion */
+												NxsReader *reader,  /*!< a pointer to the NxsReader controlling the parse. Can be NULL. Usually not needed for an implementation of this method */
+												NxsToken *token  /*!< a pointer to the NxsToken that is generating token. Can be NULL. Usually not needed for an implementation of this method */
+												) = 0;
+
+		/*! base-class implementation deletes the block (the NxsReader will not retain a reference to the block, so failing to delete can
+			lead to memory leaks if you do not have some fancy memory management scheme).
+
+			If there is an exception during the parsing of that block BlockError will be called for the factory instance that generated the block
+		*/
+		virtual void		BlockError(NxsBlock *b)
+			{
+			delete b;
+			}
+		/*! base-class implementation deletes the block (the NxsReader will not retain a reference to the block, so failing to delete can
+			lead to memory leaks if you do not have some fancy memory management scheme).
+
+		If the block returns "false" from NxsBlock::IsEnabled() method, then BlockSkipped will be called by the NxsReader using
+			 the factory instance that generated the block
+		*/
+		virtual void BlockSkipped(NxsBlock *b)
+			{
+			delete b;
+			}
+	};
+
+/*!
+	Sets the nexusReader data member of the NxsBlock object to 'nxsptr'.
+*/
+inline void NxsBlock::SetNexus(
+  NxsReader *nxsptr)	/* pointer to a NxsReader object */
+	{
+	nexusReader = nxsptr;
+	}
+/*!
+	Gets the nexusReader data member of the NxsBlock object to 'nxsptr'.
+*/
+inline NxsReader * NxsBlock::GetNexus() const
+	{
+	return nexusReader;
+	}
+
+
+/*!
+	Advances the token, and raise an exception if it is not an equals sign.
+
+ 	Sets errormsg and raises a NxsException on failure.
+	`contextString` is used in error messages:
+		"Expecting '=' ${contextString} but found..."
+*/
+inline void NxsBlock::DemandEquals(NxsToken &token, const char *contextString) const
+	{
+	token.GetNextToken();
+	DemandIsAtEquals(token, contextString);
+	}
+#endif
+
+
diff --git a/ncl/nxscdiscretematrix.h b/ncl/nxscdiscretematrix.h
new file mode 100644
index 0000000..0bfa147
--- /dev/null
+++ b/ncl/nxscdiscretematrix.h
@@ -0,0 +1,113 @@
+//	Copyright (C) 2008 Mark Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.1
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+// This code is based on code developed by Mark Holder for the CIPRES project
+
+#if !defined(NXS_C_DISCRETE_MATRIX_H)
+#define NXS_C_DISCRETE_MATRIX_H
+
+
+#if defined (HAVE_CONFIG_H)
+#	include <config.h>
+#endif
+
+#if defined(_MSC_VER)
+#	undef	HAVE_COMPILE_TIME_DISPATCH
+#else
+#	define HAVE_COMPILE_TIME_DISPATCH
+#endif
+
+/* For typedefs like uint8_t */
+#if HAVE_INTTYPES_H
+#	include <inttypes.h>
+#elif HAVE_STDINT_H
+#	include <stdint.h>
+#elif defined(_MSC_VER) && _MSC_VER >= 1200
+#	include <basetsd.h>
+	typedef   INT8 int8_t;
+	typedef  UINT8 uint8_t;
+	typedef  INT64 int64_t;
+	typedef UINT64 uint64_t;
+#elif defined(_MSC_VER)
+	typedef signed char int8_t;
+	typedef unsigned char uint8_t;
+	typedef long long int64_t;
+	typedef unsigned long long uint64_t;
+#elif defined(_WIN32)
+#	include <stdint.h>
+#endif
+
+	/* For size_t */
+#if defined(HAVE_STDDEF_H)
+#	include <stddef.h>
+#endif
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+typedef int8_t NxsCDiscreteState_t; /** type used to enumerate possible states.
+								-1 is used for gaps, other negative flags may be added later.
+								This size limits the maximum number of states allowed. */
+typedef int8_t NxsCDiscreteStateSet; /** type used to refer to unique combinations of states (the "fundamental" states and ambiguity codes)
+								-1 is used for gaps.  To handle all possible data sets, this must be large enough to hold
+								2^(nStates + 1) values if the datatype allows gaps.  Thus using int8_t limits us to 8 states */
+
+/*
+The following enum is a cropping of the NxsCharactersBlock::DataTypesEnum
+which includes all of the datatypes (and only those) that can be expressed
+in a NxsCDiscreteMatrix. Each of the enum facets will have the same
+value as in  NxsCharactersBlock::DataTypesEnum.
+
+This enum is also handy because it is accessible via C.
+*/
+typedef enum {
+			  NxsAltGeneric_Datatype = 1,
+			  NxsAltDNA_Datatype = 2,
+			  NxsAltRNA_Datatype = 3,
+			  NxsAltNuc_Datatype = 4,
+			  NxsAltAA_Datatype = 5,
+			  NxsAltCodon_Datatype = 6
+			  } NxsAltDatatypes;
+const int LowestNxsCDatatype = 1;
+const int HighestNxsCDatatype = 6;
+
+typedef struct NxsCDiscreteMatrixStruct
+	{
+	NxsCDiscreteState_t 	  *stateList; 		/** Flattened array of array of observed states.  If more than one state was observed, then the first element is the number of states observed.
+											  Exceptions: -1 is for gaps, nStates is for missing. */
+	unsigned * stateListPos;  	/** Maps a state set code (the elements of the matrix) to the index in stateList where the states are listed */
+	NxsCDiscreteStateSet ** matrix;			/** taxa x characters matrix of indices of state sets */
+	const char * symbolsList;	/** array of the characters used to stand for each state ("ACGT?NRY" for example) //@temp paup depends on all symbols being unique (even ambiguity codes)*/
+	unsigned nStates;
+	unsigned nChar;
+	unsigned nTax;
+	unsigned nObservedStateSets; /* the length of stateListPos */
+	NxsAltDatatypes datatype;
+	} NxsCDiscreteMatrix;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TREEINFER_HELPER_H */
+
diff --git a/ncl/nxscharactersblock.cpp b/ncl/nxscharactersblock.cpp
new file mode 100644
index 0000000..aa25d8d
--- /dev/null
+++ b/ncl/nxscharactersblock.cpp
@@ -0,0 +1,5518 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+/**
+ * This file includes contributions by Brian O'Meara. August 2005.
+ * These changes include the ability to parse continuous data types.
+ */
+#include <iomanip>
+#include <climits>
+
+#include "ncl/nxscharactersblock.h"
+#include "ncl/nxsreader.h"
+#include "ncl/nxsassumptionsblock.h"
+#include "ncl/nxssetreader.h"
+#include <algorithm>
+#include <iterator>
+using namespace std;
+
+CodonRecodingStruct getCodonRecodingStruct(NxsGeneticCodesEnum gCode);
+std::vector<NxsDiscreteStateCell> getToCodonRecodingMapper(NxsGeneticCodesEnum gCode);
+
+
+void NxsDiscreteDatatypeMapper::DebugWriteMapperFields(std::ostream & out) const
+{
+	out << nStates << "\"fundamental\" states\n";
+	out << "Symbols = \"" << symbols << "\"\n";
+	if (respectCase)
+		out << "Symbol comparison respects case (is case-sensitive)\n";
+	else
+		out << "Symbol comparison does not respect case (is case-insensitive)\n";
+	if (gapChar == '\0')
+		out << "No Gaps\n";
+	else
+		out << "Gap char is " << gapChar << "\n";
+
+	out << "State codes:\n";
+	int nsc = (int)GetNumStateCodes();
+	for (int scc = 0; scc < nsc; ++scc)
+		{
+		int sc = scc + sclOffset;
+		out << sc << ' ';
+		if (sc == NXS_MISSING_CODE)
+			out << missing << '\n';
+		else if (sc == NXS_GAP_STATE_CODE)
+			out << gapChar << '\n';
+		else
+			{
+			const std::set<NxsDiscreteStateCell> & ssfc(GetStateSetForCode(sc));
+			std::set<NxsDiscreteStateCell>::const_iterator sIt = ssfc.begin();
+			if (ssfc.size() == 1)
+				{
+				out << symbols[*sIt];
+				}
+			else
+				{
+				if (IsPolymorphic(sc))
+					out << '(';
+				else
+					out << '{';
+				for (; sIt != ssfc.end(); ++sIt)
+					{
+					if (*sIt == NXS_MISSING_CODE)
+						out << missing;
+					else if (*sIt == NXS_GAP_STATE_CODE)
+						out << gapChar;
+					else
+						out << symbols[*sIt];
+					}
+				if (IsPolymorphic(sc))
+					out << ')';
+				else
+					out << '}';
+				}
+			out << '\n';
+			}
+		}
+
+	std::map<char, NxsString>::const_iterator eeIt = extraEquates.begin();
+	if (eeIt != extraEquates.end())
+		{
+		out << "Extra equates:\n";
+		for (; eeIt != extraEquates.end(); ++eeIt)
+			out << eeIt->first  << " -> " << eeIt->second << '\n';
+		}
+	out.flush();
+}
+
+static unsigned char lcBaseToInd(char );
+
+static unsigned char lcBaseToInd(char c) {
+	if (c == 'a')
+		return 0;
+	if (c == 'c')
+		return 1;
+	if (c == 'g')
+		return 2;
+	if (c == 't')
+		return 3;
+	throw NxsException("Expecting a DNA base");
+}
+
+NxsCodonTriplet::NxsCodonTriplet(const char *triplet)
+{
+	std::string s(triplet);
+	if (s.length() != 3)
+		throw NxsException("Expecting a triplet of bases");
+	NxsString::to_lower(s);
+	this->firstPos = lcBaseToInd(s[0]);
+	this->secondPos = lcBaseToInd(s[1]);
+	this->thirdPos = lcBaseToInd(s[2]);
+}
+
+
+NxsCodonTriplet::MutDescription NxsCodonTriplet::getSingleMut(const NxsCodonTriplet & other) const {
+	if (firstPos == other.firstPos) {
+		if (secondPos == other.secondPos) {
+			if (thirdPos == other.thirdPos)
+				return MutDescription(0,0);
+			return MutDescription((int)thirdPos, (int)other.thirdPos);
+		}
+		if (thirdPos == other.thirdPos)
+			return MutDescription((int)secondPos, (int)other.secondPos);
+		return MutDescription(-1, -1);
+	}
+	if (secondPos == other.secondPos) {
+		if (thirdPos == other.thirdPos)
+			return MutDescription((int)firstPos, (int)other.firstPos);
+		return MutDescription(-1, -1);
+	}
+	return MutDescription(-1, -1);
+}
+
+
+/*******************************************************************************
+ * deletes "fundamental" states (rather than gaps or ambiguity codes) from a
+ * datatype mapper.
+ * Equates (default or user-defined) are not supported in the current version of the function
+ *	(so this will only work on standard or codons data).
+ */
+
+void NxsDiscreteDatatypeMapper::DeleteStateIndices(const std::set<NxsDiscreteStateCell> & deletedInds)
+{
+	if (deletedInds.empty())
+		return;
+	if (*(deletedInds.begin()) < 0 || *(deletedInds.rbegin()) >= (NxsDiscreteStateCell)this->nStates)
+		throw NxsException("DeleteStateIndices can only delete fundamental states");
+	if (!(NxsCharactersBlock::GetDefaultEquates(this->datatype).empty() && extraEquates.empty()))
+		throw NxsException("DeleteStateIndices can not currently work on datatypes with equates");
+	std::vector<NxsDiscreteStateCell> remap;
+	NxsDiscreteStateCell newIndex = 0;
+	std::string nsym;
+	for (NxsDiscreteStateCell i = 0; i < (NxsDiscreteStateCell) this->nStates; ++i)
+		{
+		if (deletedInds.find(i) == deletedInds.end())
+			{
+			remap.push_back(newIndex++);
+			nsym.append(1, symbols[i]);
+			}
+		else
+			remap.push_back(NXS_INVALID_STATE_CODE);
+		}
+	const unsigned oldNStates = nStates;
+	std::vector<NxsDiscreteStateSetInfo> oldStateSetsVec = this->stateSetsVec;
+	symbols = nsym;
+
+	this->RefreshMappings(0L);
+
+	for (unsigned i = oldNStates - sclOffset; i < oldStateSetsVec.size(); ++i)
+		{
+		const NxsDiscreteStateSetInfo & ssi = oldStateSetsVec[i];
+		std::set<NxsDiscreteStateCell> stSet;
+		for (std::set<NxsDiscreteStateCell>::const_iterator s = ssi.states.begin(); s != ssi.states.end(); ++s)
+			{
+			NxsDiscreteStateCell u = *s;
+			if (u < 0)
+				stSet.insert(u);
+			else
+				{
+				NxsDiscreteStateCell r = remap.at(u);
+				if (r >= 0)
+					stSet.insert(r);
+				}
+			}
+		// We have to add every "extra" state set, so that the indexing for the higher state codes is just shifted by the number of states deleted
+		AddStateSet(stSet, ssi.nexusSymbol, true, ssi.isPolymorphic);
+		}
+}
+
+std::vector<NxsDiscreteStateCell> getToCodonRecodingMapper(NxsGeneticCodesEnum gCode)
+{
+	std::vector<NxsDiscreteStateCell> v;
+	if(gCode == NXS_GCODE_STANDARD) {
+		const NxsDiscreteStateCell trnxs_gcode_standard[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, -1, 54, 55, 56, 57, 58, 59, 60};
+		std::copy(trnxs_gcode_standard, trnxs_gcode_standard + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_VERT_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_vert_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, -1, 8, -1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, -1, 46, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59};
+		std::copy(trnxs_gcode_vert_mito, trnxs_gcode_vert_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_YEAST_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_yeast_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_yeast_mito, trnxs_gcode_yeast_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_MOLD_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_mold_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_mold_mito, trnxs_gcode_mold_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_INVERT_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_invert_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_invert_mito, trnxs_gcode_invert_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_CILIATE) {
+		const NxsDiscreteStateCell trnxs_gcode_ciliate[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, 56, 57, 58, 59, 60, 61, 62};
+		std::copy(trnxs_gcode_ciliate, trnxs_gcode_ciliate + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_ECHINO_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_echino_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_echino_mito, trnxs_gcode_echino_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_EUPLOTID) {
+		const NxsDiscreteStateCell trnxs_gcode_euplotid[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_euplotid, trnxs_gcode_euplotid + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_PLANT_PLASTID) {
+		const NxsDiscreteStateCell trnxs_gcode_plant_plastid[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, -1, 54, 55, 56, 57, 58, 59, 60};
+		std::copy(trnxs_gcode_plant_plastid, trnxs_gcode_plant_plastid + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_ALT_YEAST) {
+		const NxsDiscreteStateCell trnxs_gcode_alt_yeast[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, -1, 54, 55, 56, 57, 58, 59, 60};
+		std::copy(trnxs_gcode_alt_yeast, trnxs_gcode_alt_yeast + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_ASCIDIAN_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_ascidian_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_ascidian_mito, trnxs_gcode_ascidian_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_ALT_FLATWORM_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_alt_flatworm_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62};
+		std::copy(trnxs_gcode_alt_flatworm_mito, trnxs_gcode_alt_flatworm_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_BLEPHARISMA_MACRO) {
+		const NxsDiscreteStateCell trnxs_gcode_blepharisma_macro[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, 49, 50, 51, 52, 53, 54, -1, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_blepharisma_macro, trnxs_gcode_blepharisma_macro + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_CHLOROPHYCEAN_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_chlorophycean_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, 49, 50, 51, 52, 53, 54, -1, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_chlorophycean_mito, trnxs_gcode_chlorophycean_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_TREMATODE_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_trematode_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61};
+		std::copy(trnxs_gcode_trematode_mito, trnxs_gcode_trematode_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_SCENEDESMUS_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_scenedesmus_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, 49, 50, -1, 51, 52, 53, -1, 54, 55, 56, 57, 58, 59, 60};
+		std::copy(trnxs_gcode_scenedesmus_mito, trnxs_gcode_scenedesmus_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	if(gCode == NXS_GCODE_THRAUSTOCHYTRIUM_MITO) {
+		const NxsDiscreteStateCell trnxs_gcode_thraustochytrium_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -1, 48, -1, 49, 50, 51, 52, 53, -1, 54, 55, 56, -1, 57, 58, 59};
+		std::copy(trnxs_gcode_thraustochytrium_mito, trnxs_gcode_thraustochytrium_mito + 64, std::back_inserter(v));
+		return v;
+	}
+	throw NxsException("Unrecognized genetic code.");
+}
+
+
+CodonRecodingStruct getCodonRecodingStruct(NxsGeneticCodesEnum gCode)
+{
+	CodonRecodingStruct c;
+	unsigned n;
+
+	if(gCode == NXS_GCODE_STANDARD) {
+		const int ccitacnxs_gcode_standard[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63};
+		n = 61;
+		const int caaindnxs_gcode_standard[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_standard[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_standard, ccitacnxs_gcode_standard + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_standard, caaindnxs_gcode_standard + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_standard, ccodstrnxs_gcode_standard + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_VERT_MITO) {
+		const int ccitacnxs_gcode_vert_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 60;
+		const int caaindnxs_gcode_vert_mito[] = {8, 11, 8, 11, 16, 16, 16, 16, 15, 15, 10, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 18, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_vert_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGC", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_vert_mito, ccitacnxs_gcode_vert_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_vert_mito, caaindnxs_gcode_vert_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_vert_mito, ccodstrnxs_gcode_vert_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_YEAST_MITO) {
+		const int ccitacnxs_gcode_yeast_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_yeast_mito[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 18, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_yeast_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_yeast_mito, ccitacnxs_gcode_yeast_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_yeast_mito, caaindnxs_gcode_yeast_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_yeast_mito, ccodstrnxs_gcode_yeast_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_MOLD_MITO) {
+		const int ccitacnxs_gcode_mold_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_mold_mito[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 18, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_mold_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_mold_mito, ccitacnxs_gcode_mold_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_mold_mito, caaindnxs_gcode_mold_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_mold_mito, ccodstrnxs_gcode_mold_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_INVERT_MITO) {
+		const int ccitacnxs_gcode_invert_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_invert_mito[] = {8, 11, 8, 11, 16, 16, 16, 16, 15, 15, 15, 15, 10, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 18, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_invert_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_invert_mito, ccitacnxs_gcode_invert_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_invert_mito, caaindnxs_gcode_invert_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_invert_mito, ccodstrnxs_gcode_invert_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_CILIATE) {
+		const int ccitacnxs_gcode_ciliate[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63};
+		n = 63;
+		const int caaindnxs_gcode_ciliate[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 13, 19, 13, 19, 15, 15, 15, 15, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_ciliate[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAA", "TAC", "TAG", "TAT", "TCA", "TCC", "TCG", "TCT", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_ciliate, ccitacnxs_gcode_ciliate + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_ciliate, caaindnxs_gcode_ciliate + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_ciliate, ccodstrnxs_gcode_ciliate + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_ECHINO_MITO) {
+		const int ccitacnxs_gcode_echino_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_echino_mito[] = {11, 11, 8, 11, 16, 16, 16, 16, 15, 15, 15, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 18, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_echino_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_echino_mito, ccitacnxs_gcode_echino_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_echino_mito, caaindnxs_gcode_echino_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_echino_mito, ccodstrnxs_gcode_echino_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_EUPLOTID) {
+		const int ccitacnxs_gcode_euplotid[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_euplotid[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 1, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_euplotid[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_euplotid, ccitacnxs_gcode_euplotid + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_euplotid, caaindnxs_gcode_euplotid + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_euplotid, ccodstrnxs_gcode_euplotid + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_PLANT_PLASTID) {
+		const int ccitacnxs_gcode_plant_plastid[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63};
+		n = 61;
+		const int caaindnxs_gcode_plant_plastid[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_plant_plastid[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_plant_plastid, ccitacnxs_gcode_plant_plastid + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_plant_plastid, caaindnxs_gcode_plant_plastid + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_plant_plastid, ccodstrnxs_gcode_plant_plastid + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_ALT_YEAST) {
+		const int ccitacnxs_gcode_alt_yeast[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63};
+		n = 61;
+		const int caaindnxs_gcode_alt_yeast[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 15, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_alt_yeast[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_alt_yeast, ccitacnxs_gcode_alt_yeast + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_alt_yeast, caaindnxs_gcode_alt_yeast + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_alt_yeast, ccodstrnxs_gcode_alt_yeast + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_ASCIDIAN_MITO) {
+		const int ccitacnxs_gcode_ascidian_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_ascidian_mito[] = {8, 11, 8, 11, 16, 16, 16, 16, 5, 15, 5, 15, 10, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 18, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_ascidian_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_ascidian_mito, ccitacnxs_gcode_ascidian_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_ascidian_mito, caaindnxs_gcode_ascidian_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_ascidian_mito, ccodstrnxs_gcode_ascidian_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_ALT_FLATWORM_MITO) {
+		const int ccitacnxs_gcode_alt_flatworm_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 63;
+		const int caaindnxs_gcode_alt_flatworm_mito[] = {11, 11, 8, 11, 16, 16, 16, 16, 15, 15, 15, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 19, 15, 15, 15, 15, 18, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_alt_flatworm_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAA", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_alt_flatworm_mito, ccitacnxs_gcode_alt_flatworm_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_alt_flatworm_mito, caaindnxs_gcode_alt_flatworm_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_alt_flatworm_mito, ccodstrnxs_gcode_alt_flatworm_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_BLEPHARISMA_MACRO) {
+		const int ccitacnxs_gcode_blepharisma_macro[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_blepharisma_macro[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 13, 19, 15, 15, 15, 15, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_blepharisma_macro[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAG", "TAT", "TCA", "TCC", "TCG", "TCT", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_blepharisma_macro, ccitacnxs_gcode_blepharisma_macro + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_blepharisma_macro, caaindnxs_gcode_blepharisma_macro + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_blepharisma_macro, ccodstrnxs_gcode_blepharisma_macro + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_CHLOROPHYCEAN_MITO) {
+		const int ccitacnxs_gcode_chlorophycean_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_chlorophycean_mito[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 9, 19, 15, 15, 15, 15, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_chlorophycean_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAG", "TAT", "TCA", "TCC", "TCG", "TCT", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_chlorophycean_mito, ccitacnxs_gcode_chlorophycean_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_chlorophycean_mito, caaindnxs_gcode_chlorophycean_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_chlorophycean_mito, ccodstrnxs_gcode_chlorophycean_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_TREMATODE_MITO) {
+		const int ccitacnxs_gcode_trematode_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63};
+		n = 62;
+		const int caaindnxs_gcode_trematode_mito[] = {11, 11, 8, 11, 16, 16, 16, 16, 15, 15, 15, 15, 10, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 18, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_trematode_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGA", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_trematode_mito, ccitacnxs_gcode_trematode_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_trematode_mito, caaindnxs_gcode_trematode_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_trematode_mito, ccodstrnxs_gcode_trematode_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_SCENEDESMUS_MITO) {
+		const int ccitacnxs_gcode_scenedesmus_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63};
+		n = 61;
+		const int caaindnxs_gcode_scenedesmus_mito[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 9, 19, 15, 15, 15, 1, 18, 1, 9, 4, 9, 4};
+		const char * ccodstrnxs_gcode_scenedesmus_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAG", "TAT", "TCC", "TCG", "TCT", "TGC", "TGG", "TGT", "TTA", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_scenedesmus_mito, ccitacnxs_gcode_scenedesmus_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_scenedesmus_mito, caaindnxs_gcode_scenedesmus_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_scenedesmus_mito, ccodstrnxs_gcode_scenedesmus_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	if(gCode == NXS_GCODE_THRAUSTOCHYTRIUM_MITO) {
+		const int ccitacnxs_gcode_thraustochytrium_mito[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 51, 52, 53, 54, 55, 57, 58, 59, 61, 62, 63};
+		n = 60;
+		const int caaindnxs_gcode_thraustochytrium_mito[] = {8, 11, 8, 11, 16, 16, 16, 16, 14, 15, 14, 15, 7, 7, 10, 7, 13, 6, 13, 6, 12, 12, 12, 12, 14, 14, 14, 14, 9, 9, 9, 9, 3, 2, 3, 2, 0, 0, 0, 0, 5, 5, 5, 5, 17, 17, 17, 17, 19, 19, 15, 15, 15, 15, 1, 18, 1, 4, 9, 4};
+		const char * ccodstrnxs_gcode_thraustochytrium_mito[] = {"AAA", "AAC", "AAG", "AAT", "ACA", "ACC", "ACG", "ACT", "AGA", "AGC", "AGG", "AGT", "ATA", "ATC", "ATG", "ATT", "CAA", "CAC", "CAG", "CAT", "CCA", "CCC", "CCG", "CCT", "CGA", "CGC", "CGG", "CGT", "CTA", "CTC", "CTG", "CTT", "GAA", "GAC", "GAG", "GAT", "GCA", "GCC", "GCG", "GCT", "GGA", "GGC", "GGG", "GGT", "GTA", "GTC", "GTG", "GTT", "TAC", "TAT", "TCA", "TCC", "TCG", "TCT", "TGC", "TGG", "TGT", "TTC", "TTG", "TTT"};
+		std::copy(ccitacnxs_gcode_thraustochytrium_mito, ccitacnxs_gcode_thraustochytrium_mito + n, std::back_inserter(c.compressedCodonIndToAllCodonsInd));
+		std::copy(caaindnxs_gcode_thraustochytrium_mito, caaindnxs_gcode_thraustochytrium_mito + n, std::back_inserter(c.aaInd));
+		std::copy(ccodstrnxs_gcode_thraustochytrium_mito, ccodstrnxs_gcode_thraustochytrium_mito + n, std::back_inserter(c.codonStrings));
+		return c;
+	}
+	throw NxsException("Unrecognized genetic code.");
+}
+
+CodonRecodingStruct NxsCharactersBlock::RemoveStopCodons(NxsGeneticCodesEnum gCode)
+{
+	NxsDiscreteDatatypeMapper * mapper = this->GetMutableDatatypeMapperForChar(0);
+	if (mapper == 0L)
+		throw NxsException("Invalid characters block (no datatype mapper)");
+	if (mapper->GetDatatype() != codon)
+		throw NxsException("Characters block must be of the type codons when RemoveStopCodons is called");
+	if (mapper->geneticCode != NXS_GCODE_NO_CODE)
+		throw NxsException("Characters block must be an uncompressed codons type when RemoveStopCodons is called");
+
+	const std::vector<NxsDiscreteStateCell> v = getToCodonRecodingMapper(gCode);
+	CodonRecodingStruct c = getCodonRecodingStruct(gCode);
+	const unsigned nRS = (unsigned)c.compressedCodonIndToAllCodonsInd.size();
+	const unsigned offset = 64 - nRS;
+	NxsDiscreteStateMatrix	dMat(this->discreteMatrix);
+	unsigned rowInd = 0;
+	for (NxsDiscreteStateMatrix::iterator rowIt = dMat.begin(); rowIt != dMat.end(); ++rowIt)
+		{
+		NxsDiscreteStateRow & row = *rowIt;
+		unsigned charInd = 0;
+		for (NxsDiscreteStateRow::iterator cellIt = row.begin(); cellIt != row.end(); ++cellIt)
+			{
+			const NxsDiscreteStateCell cell = *cellIt;
+			if (cell >= 64)
+				*cellIt = cell - offset;
+			else if (cell >= 0)
+				{
+				const NxsDiscreteStateCell recoded = v[cell];
+				if (recoded < 0)
+					{
+					NxsString m;
+					m << "Stop codon found at character ";
+					m << charInd + 1;
+					m << " for taxon ";
+					m << rowInd + 1;
+					throw NxsException(m);
+					}
+				*cellIt = recoded;
+				}
+			++charInd;
+			}
+		++rowInd;
+		}
+	dMat.swap(this->discreteMatrix);
+	std::set<NxsDiscreteStateCell> deletedInds;
+	for (NxsDiscreteStateCell i = 0; i < 64; ++i)
+		{
+		if (v[(int)i] < 0)
+			deletedInds.insert(i);
+		}
+	mapper->DeleteStateIndices(deletedInds);
+	return c;
+}
+
+unsigned NxsCharactersBlock::NumAmbigInTaxon(const unsigned taxInd, const NxsUnsignedSet * charIndices, const bool countOnlyCompletelyMissing, const bool treatGapsAsMissing) const
+{
+	const NxsDiscreteStateRow & row = GetDiscreteMatrixRow(taxInd);
+	unsigned nAmbig = 0;
+	const NxsDiscreteDatatypeMapper * m;
+	if (charIndices == NULL)
+		{
+		unsigned cInd = 0;
+		for (NxsDiscreteStateRow::const_iterator cellIt = row.begin(); cellIt != row.end(); ++cellIt)
+			{
+			m = GetDatatypeMapperForChar(cInd++);
+			NCL_ASSERT(m);
+			const NxsDiscreteStateCell & c = *cellIt;
+			if (c < 0 || c >= (NxsDiscreteStateCell) m->GetNumStates())
+				{
+				if (countOnlyCompletelyMissing)
+					{
+					if (c == NXS_MISSING_CODE)
+						nAmbig++;
+					}
+				else
+					{
+					if (c != NXS_GAP_STATE_CODE || treatGapsAsMissing)
+						nAmbig++;
+					}
+				}
+			}
+		}
+	else
+		{
+		for (NxsUnsignedSet::const_iterator c = charIndices->begin(); c != charIndices->end(); ++c)
+			{
+			const unsigned cIndex = *c;
+			m = GetDatatypeMapperForChar(cIndex);
+			const NxsDiscreteStateCell & sc = row.at(cIndex);
+			if (sc < 0 || sc >= (NxsDiscreteStateCell) m->GetNumStates())
+				{
+				if (countOnlyCompletelyMissing)
+					{
+					if (sc == NXS_MISSING_CODE)
+						nAmbig++;
+					}
+				else
+					{
+					if (sc != NXS_GAP_STATE_CODE || treatGapsAsMissing)
+						nAmbig++;
+					}
+				}
+			}
+		}
+	return nAmbig;
+}
+
+bool NxsCharactersBlock::FirstTaxonStatesAreSubsetOfSecond(
+  const unsigned firstTaxonInd,
+  const unsigned secondTaxonInd,
+  const NxsUnsignedSet * charIndices,
+  const bool treatAmbigAsMissing,
+  const bool treatGapAsMissing) const
+{
+	const NxsDiscreteStateRow & firstRow = GetDiscreteMatrixRow(firstTaxonInd);
+	const NxsDiscreteStateRow & secondRow = GetDiscreteMatrixRow(secondTaxonInd);
+	const NxsDiscreteDatatypeMapper * m;
+	if (charIndices == NULL)
+		{
+		unsigned cInd = 0;
+		NxsDiscreteStateRow::const_iterator firstIt = firstRow.begin();
+		NxsDiscreteStateRow::const_iterator secondIt = secondRow.begin();
+		for (; firstIt != firstRow.end(); ++firstIt, ++secondIt)
+			{
+			m = GetDatatypeMapperForChar(cInd++);
+			const NxsDiscreteStateCell ns = (NxsDiscreteStateCell) m->GetNumStates();
+			NxsDiscreteStateCell f = *firstIt;
+			NxsDiscreteStateCell s = *secondIt;
+			if (treatAmbigAsMissing)
+				{
+				if (f >= ns)
+					f = NXS_MISSING_CODE;
+				if (s >= ns)
+					s = NXS_MISSING_CODE;
+				}
+			if (!m->FirstIsSubset(f, s, treatGapAsMissing))
+				return false;
+			}
+		}
+	else
+		{
+		for (NxsUnsignedSet::const_iterator c = charIndices->begin(); c != charIndices->end(); ++c)
+			{
+			const unsigned cIndex = *c;
+			m = GetDatatypeMapperForChar(cIndex);
+			const NxsDiscreteStateCell ns = m->GetNumStates();
+			NxsDiscreteStateCell f = firstRow.at(cIndex);
+			NxsDiscreteStateCell s = secondRow.at(cIndex);
+			if (treatAmbigAsMissing)
+				{
+				if (f >= ns)
+					f = NXS_MISSING_CODE;
+				if (s >= ns)
+					s = NXS_MISSING_CODE;
+				}
+			if (!m->FirstIsSubset(f, s, treatGapAsMissing))
+				return false;
+			}
+		}
+	return true;
+}
+
+std::pair<unsigned, unsigned> NxsCharactersBlock::GetPairwiseDist(
+  const unsigned firstTaxonInd,
+  const unsigned secondTaxonInd,
+  const NxsUnsignedSet * charIndices,
+  const bool treatAmbigAsMissing,
+  const bool treatGapAsMissing) const
+{
+	const NxsDiscreteStateRow & firstRow = GetDiscreteMatrixRow(firstTaxonInd);
+	const NxsDiscreteStateRow & secondRow = GetDiscreteMatrixRow(secondTaxonInd);
+	const NxsDiscreteDatatypeMapper * m;
+	unsigned nDiffs = 0;
+	unsigned nSites = 0;
+	if (charIndices == NULL)
+		{
+		unsigned cInd = 0;
+		NxsDiscreteStateRow::const_iterator firstIt = firstRow.begin();
+		NxsDiscreteStateRow::const_iterator secondIt = secondRow.begin();
+		for (; firstIt != firstRow.end(); ++firstIt, ++secondIt)
+			{
+			m = GetDatatypeMapperForChar(cInd++);
+			const NxsDiscreteStateCell ns = m->GetNumStates();
+			NxsDiscreteStateCell f = *firstIt;
+			NxsDiscreteStateCell s = *secondIt;
+			if (treatAmbigAsMissing)
+				{
+				if (f >= ns)
+					f = NXS_MISSING_CODE;
+				if (s >= ns)
+					s = NXS_MISSING_CODE;
+				}
+			if (f < 0 || s < 0)
+				{
+				if (treatGapAsMissing && (f == NXS_GAP_STATE_CODE || s == NXS_GAP_STATE_CODE))
+					continue;
+				if (f == NXS_MISSING_CODE || s == NXS_MISSING_CODE)
+					continue;
+				}
+			nSites++;
+			const std::set<NxsDiscreteStateCell> & ssim = m->GetStateIntersection(f, s);
+			if (!ssim.empty())
+				++nDiffs;
+			}
+		}
+	else
+		{
+		for (NxsUnsignedSet::const_iterator c = charIndices->begin(); c != charIndices->end(); ++c)
+			{
+			m = GetDatatypeMapperForChar(*c);
+			const NxsDiscreteStateCell ns = (NxsDiscreteStateCell) m->GetNumStates();
+			NxsDiscreteStateCell f = firstRow.at(*c);
+			NxsDiscreteStateCell s = secondRow.at(*c);
+			if (treatAmbigAsMissing)
+				{
+				if (f >= ns)
+					f = NXS_MISSING_CODE;
+				if (s >= ns)
+					s = NXS_MISSING_CODE;
+				}
+			if (f < 0 || s < 0)
+				{
+				if (treatGapAsMissing && (f == NXS_GAP_STATE_CODE || s == NXS_GAP_STATE_CODE))
+					continue;
+				if (f == NXS_MISSING_CODE || s == NXS_MISSING_CODE)
+					continue;
+				}
+			nSites++;
+			const std::set<NxsDiscreteStateCell> & ssi = m->GetStateIntersection(f, s);
+			if (!ssi.empty())
+				++nDiffs;
+			}
+		}
+	return std::pair<unsigned, unsigned>(nDiffs, nSites);
+}
+
+
+void NxsDiscreteDatatypeMapper::BuildStateSubsetMatrix() const
+{
+	if (stateIntersectionMatrix.empty())
+		BuildStateIntersectionMatrix();
+	isStateSubsetMatrix.clear();
+	isStateSubsetMatrixGapsMissing.clear();
+	const unsigned nsPlus = (unsigned)stateSetsVec.size();
+	IsStateSubsetRow r(nsPlus, false);
+	isStateSubsetMatrix.assign(nsPlus, r);
+	isStateSubsetMatrixGapsMissing.assign(nsPlus, r);
+	for (unsigned i = 0; i < nsPlus; ++i)
+		{
+		for (unsigned j = 0; j < nsPlus; ++j)
+			{
+			if (!stateIntersectionMatrix[i][j].empty())
+				{
+				isStateSubsetMatrix[i][j] = true;
+				isStateSubsetMatrixGapsMissing[i][j] = true;
+				}
+			}
+		}
+	isStateSubsetMatrixGapsMissing[0][1] = true;
+	isStateSubsetMatrixGapsMissing[1][0] = true;
+}
+
+void NxsDiscreteDatatypeMapper::BuildStateIntersectionMatrix() const
+{
+	const std::set<NxsDiscreteStateCell> emptySet;
+
+	stateIntersectionMatrix.clear();
+
+	const unsigned nsPlus = (unsigned const)stateSetsVec.size();
+	const unsigned offset = (unsigned)(sclOffset + 2);
+	StateIntersectionRow emptyRow(nsPlus, emptySet);
+	stateIntersectionMatrix.assign(nsPlus, emptyRow);
+	for (unsigned i = offset; i < nsPlus; ++i)
+		{
+		for (unsigned j = i; j < nsPlus; ++j)
+			{
+			const unsigned offi = i + sclOffset;
+			const unsigned offj = j + sclOffset;
+			std::set<NxsDiscreteStateCell> intersect;
+			const std::set<NxsDiscreteStateCell>	&fs =  GetStateSetForCode(offi);
+			const std::set<NxsDiscreteStateCell>	&ss =  GetStateSetForCode(offj);
+			set_intersection(fs.begin(), fs.end(), ss.begin(), ss.end(), inserter(intersect, intersect.begin()));
+			stateIntersectionMatrix[i - NXS_GAP_STATE_CODE][j - NXS_GAP_STATE_CODE] = intersect;
+			if (i != j)
+				stateIntersectionMatrix[j - NXS_GAP_STATE_CODE][i - NXS_GAP_STATE_CODE] = stateIntersectionMatrix[i - NXS_GAP_STATE_CODE][j - NXS_GAP_STATE_CODE];
+			}
+		}
+
+	std::set<NxsDiscreteStateCell> tmpSet;
+	NCL_ASSERT(1 == NXS_MISSING_CODE - NXS_GAP_STATE_CODE);
+	tmpSet.insert(NXS_GAP_STATE_CODE);
+	stateIntersectionMatrix[0][0] = tmpSet;
+
+	tmpSet.clear();
+	tmpSet.insert(NXS_MISSING_CODE);
+	stateIntersectionMatrix[1][1] = tmpSet;
+	for (unsigned i = offset; i < nsPlus; ++i)
+		{
+		const unsigned offi = i + sclOffset;
+		stateIntersectionMatrix[1][i - NXS_GAP_STATE_CODE] = GetStateSetForCode(offi);
+		}
+}
+
+
+NxsGeneticCodesEnum geneticCodeNameToEnum(std::string n)
+{
+	NxsString::to_lower(n);
+	if (n == "standard")
+		return NXS_GCODE_STANDARD;
+	if (n == "vertmito")
+		return NXS_GCODE_VERT_MITO;
+	if (n == "yeastmito")
+		return NXS_GCODE_YEAST_MITO;
+	if (n == "moldmito")
+		return NXS_GCODE_MOLD_MITO;
+	if (n == "invertmito")
+		return NXS_GCODE_INVERT_MITO;
+	if (n == "ciliate")
+		return NXS_GCODE_CILIATE;
+	if (n == "echinomito")
+		return NXS_GCODE_ECHINO_MITO;
+	if (n == "euplotid")
+		return NXS_GCODE_EUPLOTID;
+	if (n == "plantplastid")
+		return NXS_GCODE_PLANT_PLASTID;
+	if (n == "altyeast")
+		return NXS_GCODE_ALT_YEAST;
+	if (n == "ascidianmito")
+		return NXS_GCODE_ASCIDIAN_MITO;
+	if (n == "altflatwormmito")
+		return NXS_GCODE_ALT_FLATWORM_MITO;
+	if (n == "blepharismamacro")
+		return NXS_GCODE_BLEPHARISMA_MACRO;
+	if (n == "chlorophyceanmito")
+		return NXS_GCODE_CHLOROPHYCEAN_MITO;
+	if (n == "trematodemito")
+		return NXS_GCODE_TREMATODE_MITO;
+	if (n == "scenedesmusmito")
+		return NXS_GCODE_SCENEDESMUS_MITO;
+	if (n == "thraustochytriummito")
+		return NXS_GCODE_THRAUSTOCHYTRIUM_MITO;
+	NxsString err = "Unrecognized genetic code name: ";
+	err << n;
+	throw NxsException(err);
+}
+
+std::string geneticCodeEnumToName(NxsGeneticCodesEnum n)
+{
+	if (n == NXS_GCODE_STANDARD)
+		return "Standard";
+	if (n == NXS_GCODE_VERT_MITO)
+		return "VertMito";
+	if (n == NXS_GCODE_YEAST_MITO)
+		return "YeastMito";
+	if (n == NXS_GCODE_MOLD_MITO)
+		return "MoldMito";
+	if (n == NXS_GCODE_INVERT_MITO)
+		return "InvertMito";
+	if (n == NXS_GCODE_CILIATE)
+		return "Ciliate";
+	if (n == NXS_GCODE_ECHINO_MITO)
+		return "EchinoMito";
+	if (n == NXS_GCODE_EUPLOTID)
+		return "Euplotid";
+	if (n == NXS_GCODE_PLANT_PLASTID)
+		return "PlantPlastid";
+	if (n == NXS_GCODE_ALT_YEAST)
+		return "AltYeast";
+	if (n == NXS_GCODE_ASCIDIAN_MITO)
+		return "AscidianMito";
+	if (n == NXS_GCODE_ALT_FLATWORM_MITO)
+		return "AltFlatwormMito";
+	if (n == NXS_GCODE_BLEPHARISMA_MACRO)
+		return "BlepharismaMacro";
+	if (n == NXS_GCODE_CHLOROPHYCEAN_MITO)
+		return "ChlorophyceanMito";
+	if (n == NXS_GCODE_TREMATODE_MITO)
+		return "Trematodemito";
+	if (n == NXS_GCODE_SCENEDESMUS_MITO)
+		return "ScenedesmusMito";
+	if (n == NXS_GCODE_THRAUSTOCHYTRIUM_MITO)
+		return "ThraustochytriumMito";
+	NxsString err = "Unrecognized genetic code enumeration: ";
+	err << n;
+	throw NxsException(err);
+}
+
+std::vector<std::string> getGeneticCodeNames()
+{
+	std::vector<std::string> n(NXS_GCODE_CODE_ENUM_SIZE);
+	n[NXS_GCODE_STANDARD] = "Standard" ;
+	n[NXS_GCODE_VERT_MITO] = "VertMito" ;
+	n[NXS_GCODE_YEAST_MITO] = "YeastMito" ;
+	n[NXS_GCODE_MOLD_MITO] = "MoldMito" ;
+	n[NXS_GCODE_INVERT_MITO] = "InvertMito" ;
+	n[NXS_GCODE_CILIATE] = "Ciliate" ;
+	n[NXS_GCODE_ECHINO_MITO] = "EchinoMito" ;
+	n[NXS_GCODE_EUPLOTID] = "Euplotid" ;
+	n[NXS_GCODE_PLANT_PLASTID] = "PlantPlastid" ;
+	n[NXS_GCODE_ALT_YEAST] = "AltYeast" ;
+	n[NXS_GCODE_ASCIDIAN_MITO] = "AscidianMito" ;
+	n[NXS_GCODE_ALT_FLATWORM_MITO] = "AltFlatwormMito" ;
+	n[NXS_GCODE_BLEPHARISMA_MACRO] = "BlepharismaMacro" ;
+	n[NXS_GCODE_CHLOROPHYCEAN_MITO] = "ChlorophyceanMito" ;
+	n[NXS_GCODE_TREMATODE_MITO] = "TrematodeMito" ;
+	n[NXS_GCODE_SCENEDESMUS_MITO] = "ScenedesmusMito" ;
+	n[NXS_GCODE_THRAUSTOCHYTRIUM_MITO] = "ThraustochytriumMito" ;
+	return n;
+}
+
+
+
+/*
+  code index 0 => "Standard"
+  code index 1 => "Vertebrate Mitochondrial"
+  code index 2 => "Yeast Mitochondrial"
+  code index 3 => "Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; Spiroplasma"
+  code index 4 => "Invertebrate Mitochondrial"
+  code index 5 => "Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear"
+  code index 8 => "Echinoderm Mitochondrial; Flatworm Mitochondrial"
+  code index 9 => "Euplotid Nuclear"
+  code index 10 => "Bacterial and Plant Plastid"
+  code index 11 => "Alternative Yeast Nuclear"
+  code index 12 => "Ascidian Mitochondrial"
+  code index 13 => "Alternative Flatworm Mitochondrial"
+  code index 14 => "Blepharisma Macronuclear"
+  code index 15 => "Chlorophycean Mitochondrial"
+  code index 20 => "Trematode Mitochondrial"
+  code index 21 => "Scenedesmus obliquus Mitochondrial"
+  code index 22 => "Thraustochytrium Mitochondrial"
+*/
+std::string getGeneticCodeAAOrder(NxsGeneticCodesEnum codeIndex)
+{
+	std::vector<std::string> code(NXS_GCODE_CODE_ENUM_SIZE);
+	code[NXS_GCODE_STANDARD] =  "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF";
+	code[NXS_GCODE_VERT_MITO] = "KNKNTTTT*S*SMIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSSWCWCLFLF";
+	code[NXS_GCODE_YEAST_MITO] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSSWCWCLFLF";
+	code[NXS_GCODE_MOLD_MITO] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSSWCWCLFLF";
+	code[NXS_GCODE_INVERT_MITO] = "KNKNTTTTSSSSMIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSSWCWCLFLF";
+	code[NXS_GCODE_CILIATE] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVQYQYSSSS*CWCLFLF";
+	code[NXS_GCODE_ECHINO_MITO] = "NNKNTTTTSSSSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSSWCWCLFLF";
+	code[NXS_GCODE_EUPLOTID] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSSCCWCLFLF";
+	code[NXS_GCODE_PLANT_PLASTID] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF";
+	code[NXS_GCODE_ALT_YEAST] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLSLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF";
+	code[NXS_GCODE_ASCIDIAN_MITO] = "KNKNTTTTGSGSMIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSSWCWCLFLF";
+	code[NXS_GCODE_ALT_FLATWORM_MITO] = "NNKNTTTTSSSSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYY*YSSSSWCWCLFLF";
+	code[NXS_GCODE_BLEPHARISMA_MACRO] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*YQYSSSS*CWCLFLF";
+	code[NXS_GCODE_CHLOROPHYCEAN_MITO] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*YLYSSSS*CWCLFLF";
+	code[NXS_GCODE_TREMATODE_MITO] = "NNKNTTTTSSSSMIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSSWCWCLFLF";
+	code[NXS_GCODE_SCENEDESMUS_MITO] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*YLY*SSS*CWCLFLF";
+	code[NXS_GCODE_THRAUSTOCHYTRIUM_MITO] = "KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWC*FLF";
+	int c = (int) codeIndex;
+	return code.at(c);
+}
+
+
+
+std::vector<NxsDiscreteStateCell> getGeneticCodeIndicesAAOrder(const NxsGeneticCodesEnum codeIndex);
+
+
+std::vector<NxsDiscreteStateCell> getGeneticCodeIndicesAAOrder(const NxsGeneticCodesEnum codeIndex)
+{
+	std::vector<NxsDiscreteStateCell> aaInd(64);
+	aaInd[0] = 8;
+	aaInd[1] = 11;
+	aaInd[2] = 8;
+	aaInd[3] = 11;
+	aaInd[4] = 16;
+	aaInd[5] = 16;
+	aaInd[6] = 16;
+	aaInd[7] = 16;
+	aaInd[8] = 14;
+	aaInd[9] = 15;
+	aaInd[10] = 14;
+	aaInd[11] = 15;
+	aaInd[12] = 7;
+	aaInd[13] = 7;
+	aaInd[14] = 10;
+	aaInd[15] = 7;
+	aaInd[16] = 13;
+	aaInd[17] = 6;
+	aaInd[18] = 13;
+	aaInd[19] = 6;
+	aaInd[20] = 12;
+	aaInd[21] = 12;
+	aaInd[22] = 12;
+	aaInd[23] = 12;
+	aaInd[24] = 14;
+	aaInd[25] = 14;
+	aaInd[26] = 14;
+	aaInd[27] = 14;
+	aaInd[28] = 9;
+	aaInd[29] = 9;
+	aaInd[30] = 9;
+	aaInd[31] = 9;
+	aaInd[32] = 3;
+	aaInd[33] = 2;
+	aaInd[34] = 3;
+	aaInd[35] = 2;
+	aaInd[36] = 0;
+	aaInd[37] = 0;
+	aaInd[38] = 0;
+	aaInd[39] = 0;
+	aaInd[40] = 5;
+	aaInd[41] = 5;
+	aaInd[42] = 5;
+	aaInd[43] = 5;
+	aaInd[44] = 17;
+	aaInd[45] = 17;
+	aaInd[46] = 17;
+	aaInd[47] = 17;
+	aaInd[48] = 20;
+	aaInd[49] = 19;
+	aaInd[50] = 20;
+	aaInd[51] = 19;
+	aaInd[52] = 15;
+	aaInd[53] = 15;
+	aaInd[54] = 15;
+	aaInd[55] = 15;
+	aaInd[56] = 20;
+	aaInd[57] = 1;
+	aaInd[58] = 18;
+	aaInd[59] = 1;
+	aaInd[60] = 9;
+	aaInd[61] = 4;
+	aaInd[62] = 9;
+	aaInd[63] = 4;
+	if (codeIndex == NXS_GCODE_VERT_MITO) {
+		aaInd[8] = 20;
+		aaInd[10] = 20;
+		aaInd[12] = 10;
+		aaInd[56] = 18;
+	}
+	else if (codeIndex == NXS_GCODE_YEAST_MITO) {
+		aaInd[56] = 18;
+	}
+	else if (codeIndex == NXS_GCODE_MOLD_MITO) {
+		aaInd[56] = 18;
+	}
+	else if (codeIndex == NXS_GCODE_INVERT_MITO) {
+		aaInd[8] = 15;
+		aaInd[10] = 15;
+		aaInd[12] = 10;
+		aaInd[56] = 18;
+	}
+	else if (codeIndex == NXS_GCODE_CILIATE) {
+		aaInd[48] = 13;
+		aaInd[50] = 13;
+	}
+	else if (codeIndex == NXS_GCODE_ECHINO_MITO) {
+		aaInd[0] = 11;
+		aaInd[8] = 15;
+		aaInd[10] = 15;
+		aaInd[56] = 18;
+	}
+	else if (codeIndex == NXS_GCODE_EUPLOTID) {
+		aaInd[56] = 1;
+	}
+	else if (codeIndex == NXS_GCODE_ALT_YEAST) {
+		aaInd[30] = 15;
+	}
+	else if (codeIndex == NXS_GCODE_ASCIDIAN_MITO) {
+		aaInd[8] = 5;
+		aaInd[10] = 5;
+		aaInd[12] = 10;
+		aaInd[56] = 18;
+	}
+	else if (codeIndex == NXS_GCODE_ALT_FLATWORM_MITO) {
+		aaInd[0] = 11;
+		aaInd[8] = 15;
+		aaInd[10] = 15;
+		aaInd[48] = 19;
+		aaInd[56] = 18;
+	}
+	else if (codeIndex == NXS_GCODE_BLEPHARISMA_MACRO) {
+		aaInd[50] = 13;
+	}
+	else if (codeIndex == NXS_GCODE_CHLOROPHYCEAN_MITO) {
+		aaInd[50] = 9;
+	}
+	else if (codeIndex == NXS_GCODE_TREMATODE_MITO) {
+		aaInd[0] = 11;
+		aaInd[8] = 15;
+		aaInd[10] = 15;
+		aaInd[12] = 10;
+		aaInd[56] = 18;
+	}
+	else if (codeIndex == NXS_GCODE_SCENEDESMUS_MITO) {
+		aaInd[50] = 9;
+		aaInd[52] = 20;
+	}
+	else if (codeIndex == NXS_GCODE_THRAUSTOCHYTRIUM_MITO) {
+		aaInd[60] = 20;
+	}
+	return aaInd;
+}
+
+
+void NxsCharactersBlock::CodonPosPartitionToPosList(const NxsPartition &codonPos, std::list<int> * charIndices)
+{
+	if (charIndices == 0L)
+		return;
+	const NxsUnsignedSet * firstPos = 0L;
+	const NxsUnsignedSet * secondPos = 0L;
+	const NxsUnsignedSet * thirdPos = 0L;
+	for (NxsPartition::const_iterator pIt = codonPos.begin(); pIt != codonPos.end(); ++pIt)
+		{
+		if (pIt->first == "1")
+			{
+			NCL_ASSERT(firstPos == 0L);
+			firstPos = &(pIt->second);
+			}
+		else if (pIt->first == "2")
+			{
+			NCL_ASSERT(secondPos == 0L);
+			secondPos = &(pIt->second);
+			}
+		else if (pIt->first == "3")
+			{
+			NCL_ASSERT(thirdPos == 0L);
+			thirdPos = &(pIt->second);
+			}
+		}
+	if (firstPos == 0L || secondPos == 0L || thirdPos == 0L)
+		throw NxsException("Expecting partition subsets named 1, 2, and 3");
+	if (firstPos->size() != secondPos->size() || firstPos->size() != thirdPos->size())
+		throw NxsException("Expecting the partition subsets named 1, 2, and 3 to have the same size");
+	NxsUnsignedSet::const_iterator fIt = firstPos->begin();
+	NxsUnsignedSet::const_iterator sIt = secondPos->begin();
+	NxsUnsignedSet::const_iterator thIt = thirdPos->begin();
+	const NxsUnsignedSet::const_iterator endIt = firstPos->end();
+	for (; fIt != endIt; ++fIt, ++sIt, ++thIt)
+		{
+		charIndices->push_back(*fIt);
+		charIndices->push_back(*sIt);
+		charIndices->push_back(*thIt);
+		}
+}
+
+/* allocates a new charaters block with amino acids for the codons in the characters block (which should have datatype = codon).
+*/
+NxsCharactersBlock * NxsCharactersBlock::NewProteinCharactersBlock(
+  const NxsCharactersBlock * codonBlock,
+  bool mapPartialAmbigToUnknown,
+  bool gapToUnknown,
+  NxsGeneticCodesEnum codeIndex)
+{
+	std::vector<NxsDiscreteStateCell> aas = getGeneticCodeIndicesAAOrder(codeIndex);
+	return NxsCharactersBlock::NewProteinCharactersBlock(codonBlock, mapPartialAmbigToUnknown, gapToUnknown, aas);
+}
+
+
+/* allocates a new charaters block with amino acids for the codons in the characters block (which should have datatype = codon).
+
+*/
+NxsCharactersBlock * NxsCharactersBlock::NewProteinCharactersBlock(
+  const NxsCharactersBlock * codonBlock,
+  bool mapPartialAmbigToUnknown,
+  bool gapToUnknown,
+  const std::vector<NxsDiscreteStateCell> & aaIndices) /** the index of the amino acid symbols for the codon (where the order of codons is alphabetical: AAA, AAC, AAG, AAT, ACA, ...TTT **/
+{
+	if (!codonBlock)
+		return NULL;
+	if (codonBlock->GetDataType() != NxsCharactersBlock::codon)
+		throw NxsException("NewProteinCharactersBlock must be called with a block of codon datatype");
+	const unsigned nc = codonBlock->GetNCharTotal();
+
+	/* create a new characters block with the same TAXA, but no ASSUMPTIONS block */
+	NxsTaxaBlockAPI * taxa = codonBlock->GetTaxaBlockPtr(NULL);
+	NxsCharactersBlock * aaBlock = new NxsCharactersBlock(taxa, NULL);
+	aaBlock->SetNChar(nc);
+	aaBlock->SetNTax(codonBlock->GetNTaxWithData());
+	aaBlock->missing = codonBlock->missing;
+	aaBlock->gap = (gapToUnknown ? '\0' : codonBlock->gap);
+	aaBlock->gapMode = codonBlock->gapMode;
+	aaBlock->datatype = NxsCharactersBlock::protein;
+	aaBlock->originalDatatype = codonBlock->originalDatatype;
+	aaBlock->ResetSymbols();
+	aaBlock->tokens = false;
+
+
+	NxsPartition dummy;
+	std::vector<DataTypesEnum> dummyVec;
+	aaBlock->CreateDatatypeMapperObjects(dummy, dummyVec);
+	const NxsDiscreteDatatypeMapper * codonMapper = codonBlock->GetDatatypeMapperForChar(0);
+	NxsDiscreteDatatypeMapper * aaMapper = aaBlock->GetMutableDatatypeMapperForChar(0);
+	aaMapper->geneticCode = codonMapper->geneticCode;
+
+	const unsigned ntax = (taxa == 0L ? codonBlock->GetNTaxWithData() : taxa->GetNTax());
+	aaBlock->datatypeReadFromFormat = false;
+	aaBlock->statesFormat = STATES_PRESENT;
+	aaBlock->restrictionDataype = false;
+	aaBlock->supportMixedDatatype = false;
+	aaBlock->convertAugmentedToMixed = false;
+	aaBlock->writeInterleaveLen = INT_MAX;
+
+
+	NxsDiscreteStateRow matRow(nc, 0);
+	aaBlock->discreteMatrix.assign(ntax, matRow);
+	if (mapPartialAmbigToUnknown && (gapToUnknown || codonBlock->GetGapSymbol() != '\0'))
+		{
+		for (unsigned taxInd = 0; taxInd < ntax; ++taxInd)
+			{
+			const NxsDiscreteStateRow & sourceRow = codonBlock->discreteMatrix.at(taxInd);
+			NxsDiscreteStateRow & destRow = aaBlock->discreteMatrix.at(taxInd);
+			for (unsigned c = 0; c < nc ; ++c)
+				{
+				const NxsDiscreteStateCell codon = sourceRow[c];
+				if (codon < 0 || codon > 63)
+					destRow[c] = NXS_MISSING_CODE;
+				else
+					destRow[c] = aaIndices.at(codon);
+				}
+			}
+		}
+	else
+		{
+		throw NxsException("NewProteinCharactersBlock is not implemented for cases in which you are not mapping any ambiguity to the missing state code.");
+		}
+	return aaBlock;
+}
+
+
+/* allocates a new charaters block with all of the active characters in `charBlock`
+	but with a 64-state codon datatype. The order of codons is:
+	 0   1   2   3   4   5  ... 63
+	AAA AAC AAG AAT ACA ACC ... TTT
+	The caller is responsible for deleting the new NxsCharactersBlock object
+
+	If honorCharActive is true, then inactive characters are simply skipped in the reading
+	frame (treated as if they were introns) rather than being treated as missing.
+*/
+NxsCharactersBlock * NxsCharactersBlock::NewCodonsCharactersBlock(
+  const NxsCharactersBlock * dnaBlock,
+  bool mapPartialAmbigToUnknown,
+  bool gapsToUnknown,
+  bool honorCharActive,
+  const std::list<int> * charIndices,
+  NxsCharactersBlock ** spareNucs)
+{
+	if (!dnaBlock)
+		return NULL;
+	DataTypesEnum nucType = dnaBlock->GetDataType();
+	if (nucType != NxsCharactersBlock::dna && nucType != NxsCharactersBlock::rna && nucType != NxsCharactersBlock::nucleotide)
+		return NULL;
+	std::list<int> charInds;
+	const std::list<int> * sourceChars;
+	std::list<int> culled;
+	NxsUnsignedSet untranslated;
+
+
+
+	unsigned nc = dnaBlock->GetNCharTotal();
+
+	if (charIndices == NULL)
+		{
+		for (unsigned i = 0; i < nc; ++i)
+			charInds.push_back((int)i);
+		sourceChars = &charInds;
+		}
+	else
+		sourceChars = charIndices;
+
+	if (honorCharActive)
+		{
+		for (std::list<int>::const_iterator cIt = sourceChars->begin(); cIt != sourceChars->end(); ++cIt)
+			{
+			const int c = *cIt;
+			if (c < 0 || dnaBlock->IsActiveChar((unsigned) c))
+				culled.push_back(c);
+			}
+		if (spareNucs)
+			{
+			for (unsigned c = 0; c < nc; ++c)
+				{
+				if (dnaBlock->IsActiveChar((unsigned) c))
+					untranslated.insert(c);
+				}
+			}
+		sourceChars = &culled;
+		}
+	else if (spareNucs)
+		{
+		for (unsigned c = 0; c < nc; ++c)
+			untranslated.insert(c);
+		}
+
+	const unsigned nnucs = (const unsigned)sourceChars->size();
+	if (nnucs % 3)
+		throw NxsException("Cannot create a codons block with a number of characters that is not a multiple of 3");
+	const unsigned ncodons = nnucs/3;
+
+	/* create a new characters block with the same TAXA, but no ASSUMPTIONS block */
+	NxsTaxaBlockAPI * taxa = dnaBlock->GetTaxaBlockPtr(NULL);
+	NxsCharactersBlock * codonsBlock = new NxsCharactersBlock(taxa, NULL);
+	codonsBlock->SetNChar(ncodons);
+	codonsBlock->SetNTax(dnaBlock->GetNTaxWithData());
+	codonsBlock->missing = dnaBlock->missing;
+	codonsBlock->gap = (gapsToUnknown ? '\0' : dnaBlock->gap);
+	codonsBlock->gapMode = dnaBlock->gapMode;
+	codonsBlock->symbols.assign(64, '\0');
+	codonsBlock->tokens = false;
+	const char * gsl[] = {"AAA",  "AAC",  "AAG",  "AAT",  "ACA",  "ACC",  "ACG",  "ACT",  "AGA",  "AGC",  "AGG",  "AGT",  "ATA",  "ATC",  "ATG",  "ATT",  "CAA",  "CAC",  "CAG",  "CAT",  "CCA",  "CCC",  "CCG",  "CCT",  "CGA",  "CGC",  "CGG",  "CGT",  "CTA",  "CTC",  "CTG",  "CTT",  "GAA",  "GAC",  "GAG",  "GAT",  "GCA",  "GCC",  "GCG",  "GCT",  "GGA",  "GGC",  "GGG",  "GGT",  "GTA",  "GTC",  "GTG",  "GTT",  "TAA",  "TAC",  "TAG",  "TAT",  "TCA",  "TCC",  "TCG",  "TCT",  "TGA",  "TGC",  "TGG" [...]
+
+	codonsBlock->globalStateLabels.reserve(64);
+	for (unsigned i = 0 ; i < 64; ++i)
+		codonsBlock->globalStateLabels.push_back(NxsString(gsl[i]));
+
+	/* equivalent of HandleFormat */
+	codonsBlock->datatype = NxsCharactersBlock::codon;
+	codonsBlock->originalDatatype = nucType;
+
+	const NxsPartition dummy;
+	const std::vector<DataTypesEnum> dummyVec;
+	codonsBlock->CreateDatatypeMapperObjects(dummy, dummyVec);
+	NxsDiscreteDatatypeMapper * codonMapper = codonsBlock->GetMutableDatatypeMapperForChar(0);
+	codonMapper->geneticCode = NXS_GCODE_NO_CODE;
+
+	const unsigned ntax = (taxa == 0L ? dnaBlock->GetNTaxWithData() : taxa->GetNTax());
+	codonsBlock->datatypeReadFromFormat = false;
+	codonsBlock->statesFormat = STATES_PRESENT;
+	codonsBlock->restrictionDataype = false;
+	codonsBlock->supportMixedDatatype = false;
+	codonsBlock->convertAugmentedToMixed = false;
+	codonsBlock->writeInterleaveLen = INT_MAX;
+
+
+	const int maxUnambigNucState = 3;
+	const NxsDiscreteStateCell codonMissingState = NXS_MISSING_CODE;
+	NxsDiscreteStateRow matRow(ncodons, 0);
+	codonsBlock->discreteMatrix.assign(ntax, matRow);
+	const std::list<int>::const_iterator endNucIt = sourceChars->end();
+	if (mapPartialAmbigToUnknown && (gapsToUnknown || dnaBlock->GetGapSymbol() != '\0'))
+		{
+		for (unsigned taxInd = 0; taxInd < ntax; ++taxInd)
+			{
+			std::list<int>::const_iterator nucIt = sourceChars->begin();
+			const NxsDiscreteStateRow & sourceRow = dnaBlock->discreteMatrix.at(taxInd);
+			NxsDiscreteStateRow & destRow = codonsBlock->discreteMatrix.at(taxInd);
+			for (unsigned codonInd = 0; codonInd < ncodons ; ++codonInd)
+				{
+				NCL_ASSERT(nucIt != endNucIt);
+				const int fInd = *nucIt++;
+				NCL_ASSERT(nucIt != endNucIt);
+				const int sInd = *nucIt++;
+				NCL_ASSERT(nucIt != endNucIt);
+				const int tInd = *nucIt++;
+				if (spareNucs)
+					{
+					untranslated.erase(fInd);
+					untranslated.erase(sInd);
+					untranslated.erase(tInd);
+					}
+				if (fInd < 0 || sInd < 0 || tInd < 0)
+					destRow[codonInd] = codonMissingState;
+				else
+					{
+					const NxsDiscreteStateCell fb = sourceRow[fInd];
+					const NxsDiscreteStateCell sb = sourceRow[sInd];
+					const NxsDiscreteStateCell tb = sourceRow[tInd];
+					if (fb < 0 || sb < 0 || tb < 0 || fb > maxUnambigNucState || sb > maxUnambigNucState || tb > maxUnambigNucState)
+						destRow[codonInd] = codonMissingState;
+					else
+						destRow[codonInd] = 16*fb + 4*sb + tb;
+					}
+				}
+			}
+		}
+	else
+		{
+		throw NxsException("NewCodonsCharactersBlock is not implemented for cases in which you are not mapping any ambiguity to the missing state code.");
+		}
+	if (!untranslated.empty())
+		{
+		const unsigned nunt = (const unsigned)untranslated.size();
+
+		NxsCharactersBlock * untBlock = new NxsCharactersBlock(taxa, NULL);
+		untBlock->SetNChar(nunt);
+		untBlock->SetNTax(ntax);
+		untBlock->missing = dnaBlock->missing;
+		untBlock->gap = (gapsToUnknown ? '\0' : dnaBlock->gap);
+		untBlock->gapMode = dnaBlock->gapMode;
+		untBlock->datatype = nucType;
+		untBlock->originalDatatype = dnaBlock->originalDatatype;
+		untBlock->ResetSymbols();
+		untBlock->tokens = false;
+
+
+		untBlock->CreateDatatypeMapperObjects(dummy, dummyVec);
+		untBlock->datatypeReadFromFormat = false;
+		untBlock->statesFormat = STATES_PRESENT;
+		untBlock->restrictionDataype = false;
+		untBlock->supportMixedDatatype = false;
+		untBlock->convertAugmentedToMixed = false;
+		untBlock->writeInterleaveLen = INT_MAX;
+
+
+		NxsDiscreteStateRow umatRow(nunt, 0);
+		untBlock->discreteMatrix.assign(ntax, umatRow);
+		if (mapPartialAmbigToUnknown && (gapsToUnknown || dnaBlock->GetGapSymbol() != '\0'))
+			{
+			for (unsigned taxInd = 0; taxInd < ntax; ++taxInd)
+				{
+				const NxsDiscreteStateRow & sourceRow = dnaBlock->discreteMatrix.at(taxInd);
+				NxsDiscreteStateRow & destRow = untBlock->discreteMatrix.at(taxInd);
+				unsigned untIndex = 0;
+				for (NxsUnsignedSet::const_iterator uIt  = untranslated.begin(); uIt != untranslated.end() ; ++uIt, ++untIndex)
+					{
+					const unsigned ind = *uIt;
+					destRow.at(untIndex) = sourceRow[ind];
+					}
+				}
+			}
+		else
+			{
+			throw NxsException("NewProteinCharactersBlock is not implemented for cases in which you are not mapping any ambiguity to the missing state code.");
+			}
+		*spareNucs = untBlock;
+		}
+	else if (spareNucs)
+		*spareNucs = NULL;
+	return codonsBlock;
+}
+
+
+std::vector<double>  NxsTransformationManager::GetDoubleWeights(const std::string &set_name) const
+	{
+	std::vector<double> r;
+	const ListOfDblWeights *p = 0L;
+	std::map<std::string, ListOfDblWeights>::const_iterator dIt = dblWtSets.begin();
+	for (; dIt != dblWtSets.end(); ++dIt)
+		{
+		if (NxsString::case_insensitive_equals(dIt->first.c_str(), set_name.c_str()))
+			{
+			p = &(dIt->second);
+			break;
+			}
+		}
+	if (p)
+		{
+		ListOfDblWeights::const_iterator wIt = p->begin();
+		const ListOfDblWeights::const_iterator ewIt = p->end();
+		for (; wIt != ewIt; ++wIt)
+			{
+			double w = wIt->first;
+			const std::set<unsigned> &s = wIt->second;
+			std::set<unsigned>::const_reverse_iterator ip = s.rbegin();
+			const std::set<unsigned>::const_reverse_iterator e = s.rend();
+			for (; ip != e; ++ip)
+				{
+				if (*ip >= r.size())
+					r.resize(1 + *ip, 1.0);
+				r[*ip] = w;
+				}
+			}
+		}
+	return r;
+	}
+
+std::vector<int> NxsTransformationManager::GetIntWeights(const std::string &set_name) const
+	{
+	std::vector<int> r;
+	const ListOfIntWeights *p = 0L;
+	std::map<std::string, ListOfIntWeights>::const_iterator dIt = intWtSets.begin();
+	for (; dIt != intWtSets.end(); ++dIt)
+		{
+		if (NxsString::case_insensitive_equals(dIt->first.c_str(), set_name.c_str()))
+			{
+			p = &(dIt->second);
+			break;
+			}
+		}
+	if (p)
+		{
+		ListOfIntWeights::const_iterator wIt = p->begin();
+		const ListOfIntWeights::const_iterator ewIt = p->end();
+		for (; wIt != ewIt; ++wIt)
+			{
+			int w = wIt->first;
+			const std::set<unsigned> &s = wIt->second;
+			std::set<unsigned>::const_reverse_iterator ip = s.rbegin();
+			const std::set<unsigned>::const_reverse_iterator e = s.rend();
+			for (; ip != e; ++ip)
+				{
+				if (*ip >= r.size())
+					r.resize(1 + *ip, 1);
+				r[*ip] = w;
+				}
+			}
+		}
+	return r;
+	}
+
+/*! creates a datatype mapper from the parsing information (this is the ctor used
+		most frequently during a parse).
+*/
+NxsDiscreteDatatypeMapper::NxsDiscreteDatatypeMapper(
+	NxsCharactersBlock::DataTypesEnum datatypeE,
+	const std::string & symbolsStr,
+	char missingChar,
+	char gap,
+	char matchingChar,
+	bool respectingCase,
+	const std::map<char, NxsString> & moreEquates)
+	:geneticCode(NXS_GCODE_NO_CODE),
+	cLookup(NULL),
+	stateCodeLookupPtr(NULL),
+	symbols(symbolsStr),
+	nStates(0),
+	matchChar(matchingChar),
+	gapChar(gap),
+	missing(missingChar),
+	respectCase(respectingCase),
+	extraEquates(moreEquates),
+	datatype(datatypeE),
+	restrictionDataype(false),
+	userDefinedEquatesBeforeConversion(false)
+	{
+	if (symbols.empty())
+		symbols = NxsCharactersBlock::GetDefaultSymbolsForType(datatype);
+	if (datatype == NxsCharactersBlock::mixed)
+		throw NxsException("Cannot create a mixed datatype mapper"); // this should be the only empty string-generating datatype
+	RefreshMappings(0L);
+	}
+
+void NxsDiscreteDatatypeMapper::DebugPrint(std::ostream & out) const
+	{
+	out << GetNumStatesIncludingGap() << "states (";
+	if (gapChar == '\0')
+		out << "no gaps";
+	else
+		out << "including the gap \"state\"";
+	const int nsc = (int) stateSetsVec.size();
+	out << '\n' << nsc << " state codes.\n";
+	out << "NEXUS     State Code      States\n";
+	for (int sc = sclOffset; sc < sclOffset + nsc; ++sc)
+		{
+		std::string nex;
+		for (int c = 0; c < 127; ++c)
+			{
+			if (cLookup[c] == sc)
+				nex.append(1, (char) c);
+			}
+		int buf =  (int) (10 - nex.size());
+		nex.append(buf, ' ');
+		out << nex << "    " << sc << "     ";
+		const std::set<NxsDiscreteStateCell>	&ss = GetStateSetForCode(sc);
+		std::string decoded;
+		for (std::set<NxsDiscreteStateCell>::const_iterator s = ss.begin(); s != ss.end(); ++s)
+			decoded.append(StateCodeToNexusString(*s));
+		if (decoded.length() < 2)
+			out << decoded;
+		else if (IsPolymorphic(sc))
+			out << '(' << decoded << ')';
+		else
+			out << '{' << decoded << '}';
+		out << '\n';
+		}
+	}
+
+/*!
+	Takes the parsed settings that pertain to the datatype and converts them into a set of NxsDiscreteDatatypeMapper
+	objects to be used to encode the characters.
+*/
+void NxsCharactersBlock::CreateDatatypeMapperObjects(const NxsPartition & dtParts, const std::vector<DataTypesEnum> & dtcodes)
+	{
+	try {
+		mixedTypeMapping.clear();
+		if (datatype != mixed)
+			{
+			NxsDiscreteDatatypeMapper d(datatype, symbols, missing, gap, matchchar, respectingCase, userEquates);
+			datatype = d.GetDatatype();
+			DatatypeMapperAndIndexSet das(d, NxsUnsignedSet());
+			datatypeMapperVec.clear();
+			datatypeMapperVec.push_back(das);
+			}
+		else
+			{
+			datatypeMapperVec.clear();
+			NCL_ASSERT(dtParts.size() == dtcodes.size());
+			datatypeMapperVec.reserve(dtParts.size());
+			std::vector<DataTypesEnum>::const_iterator cIt = dtcodes.begin();
+			//@@@TMP add code to fill  DataTypesEnum -> NxsUnsignedSet map  here ! for DZ and DS.
+			for (NxsPartition::const_iterator pIt = dtParts.begin(); pIt != dtParts.end(); ++pIt, ++cIt)
+				{
+				std::string mt;
+				if (*cIt == standard)
+					mt.assign("0123456789"); /*mrbayes is the only program to support MIXED and it uses a default (not extendable) symbols list of 0123456789 rather than 01*/
+				NxsDiscreteDatatypeMapper d(*cIt, mt, missing, gap, matchchar, respectingCase, userEquates);
+				const NxsUnsignedSet & indexSet = pIt->second;
+				DatatypeMapperAndIndexSet das(d, pIt->second);
+				NxsUnsignedSet & mappedInds =  mixedTypeMapping[*cIt];
+				mappedInds.insert(indexSet.begin(), indexSet.end());
+				datatypeMapperVec.push_back(das);
+				}
+			}
+		}
+	catch (const NxsException & x)
+		{
+		std::string y = "An error was detected while trying to create a datatype mapping structure.  This portion of code tends to generate cryptic error messages, so if the following message is not helpful, double check the syntax in the FORMAT command of your block.\n";
+		y.append(x.msg);
+		throw NxsException(y, x.pos, x.line, x.col);
+		}
+	}
+
+
+
+
+/*!
+	If you say FORMAT DATATYPE=DNA SYMBOLS="01" ; then the valid symbols become "ACGT01"
+
+	AugmentedSymbolsToMixed tries to split such a matrix into a datatype=mixed(dna:charset_dna,standard:charset_std)
+	by inferring the charpartition (charset_dna,charset_std).  It does this by using GetNamedStateSetOfColumn to
+	detect which states were listed in a column.
+
+	Returns true if the translation to mixed was performed.  This will only occur if GetOriginalDataType() != GetDataType()
+ 	because this is the symptom that there was symbol augmentation of a built in datatype.
+
+	Note that in the GetNamedStateSetOfColumn
+	then ? will not expand the states present in a symbol. Thus when parsing:
+	Matrix 1:                     Matrix 2:
+	s   ACGT10{ACGT01-}           s   ACGT10?
+	t   ACGT100                   t   ACGT100
+		The last character of the first taxon would be parsed as having the potential to have states {ACGT01-}.
+		But when interperted with GetNamedStateSetOfColumn, Matrix 2 can be "explained" by four DNA columns, and three
+		Standard (01) columns.  Matrix 1, on the other hand would be found to have four DNA columns, and two
+		Standard (01) columns, and one standard ("ACGT01") column.
+	Note: this function ignores the gap mode setting and treats gaps as newstates for the purposes of
+		the conversion.
+
+	Temporary:  Will return false if userDefinedEquatesBeforeConversion is true
+*/
+bool NxsCharactersBlock::AugmentedSymbolsToMixed()
+	{
+	DataTypesEnum odt = GetOriginalDataType();
+	if (IsMixedType() || (odt == GetDataType()))
+		return false;
+	const std::string origSymb = GetDefaultSymbolsForType(odt);
+	const std::string cutSymb = symbols.substr(0, origSymb.length());
+	if (origSymb != cutSymb)
+		return false;
+	const std::string augmentSymbols = symbols.substr(origSymb.length());
+	if (augmentSymbols.empty())
+		return false;
+	for (std::string::const_iterator a = augmentSymbols.begin(); a != augmentSymbols.end(); ++a)
+		{
+		if (!isdigit(*a))
+			return false;
+		}
+
+	NxsUnsignedSet stdTypeChars;
+	NxsUnsignedSet origTypeChars;
+	std::set<NxsDiscreteStateCell> torigStateInds;
+	std::set<NxsDiscreteStateCell> tstdStateInds;
+	torigStateInds.insert(NXS_GAP_STATE_CODE);
+	tstdStateInds.insert(NXS_GAP_STATE_CODE);
+	for (NxsDiscreteStateCell j = 0; j < (NxsDiscreteStateCell)origSymb.length(); ++j)
+		torigStateInds.insert(j);
+	for (NxsDiscreteStateCell j =  (NxsDiscreteStateCell)origSymb.length(); j < (NxsDiscreteStateCell)symbols.length(); ++j)
+		tstdStateInds.insert(j);
+	const std::set<NxsDiscreteStateCell> origStateInds(torigStateInds);
+	const unsigned nosi = (unsigned)origStateInds.size();
+	const std::set<NxsDiscreteStateCell> stdStateInds(tstdStateInds);
+	const unsigned nssi = (unsigned)stdStateInds.size();
+
+	/*Check each column for patterns that can not be mapped to origSymb or augmentSymbols */
+	const unsigned nChars = GetNCharTotal();
+	GapModeEnum cached_gap_mode = this->gapMode;
+	this->gapMode = GAP_MODE_NEWSTATE;
+	try {
+		for (unsigned colIndex = 0; colIndex < nChars; ++colIndex)
+			{
+			const std::set<NxsDiscreteStateCell> cs = GetNamedStateSetOfColumn(colIndex);
+			std::set<NxsDiscreteStateCell> origUnion;
+			set_union(origStateInds.begin(), origStateInds.end(), cs.begin(), cs.end(), inserter(origUnion, origUnion.begin()));
+			if (origUnion.size() > nosi)
+				{
+				std::set<NxsDiscreteStateCell> stdUnion;
+				set_union(stdStateInds.begin(), stdStateInds.end(), cs.begin(), cs.end(), inserter(stdUnion, stdUnion.begin()));
+				if (stdUnion.size() > nssi)
+					return false;
+				stdTypeChars.insert(colIndex);
+				}
+			else
+				origTypeChars.insert(colIndex);
+			}
+		}
+	catch (...)
+		{
+		this->gapMode = cached_gap_mode;
+		throw;
+		}
+	this->gapMode = cached_gap_mode;
+	/* If we get here then the mapping to mixed type will succeed */
+
+	/* copy the incoming matrix and mapper */
+	VecDatatypeMapperAndIndexSet mdm = datatypeMapperVec;
+	const NxsDiscreteDatatypeMapper & oldMapper = mdm[0].first;
+	if (oldMapper.GetUserDefinedEquatesBeforeConversion())
+		return false; /* dealing with equates correctly is not implemented below, so we'll bale out */
+
+	/* add the new mappers */
+	std::map<char, NxsString> noEquates;
+	datatypeMapperVec.clear();
+	NxsDiscreteDatatypeMapper o(odt, origSymb, missing, gap, matchchar, respectingCase, noEquates);
+	datatypeMapperVec.push_back(DatatypeMapperAndIndexSet(o, origTypeChars));
+	NxsDiscreteDatatypeMapper s(NxsCharactersBlock::standard, augmentSymbols, missing, gap, matchchar, respectingCase, noEquates);
+	datatypeMapperVec.push_back(DatatypeMapperAndIndexSet(s, stdTypeChars));
+
+
+	NxsDiscreteDatatypeMapper & newOrigTMapper = datatypeMapperVec[0].first;
+	NxsDiscreteDatatypeMapper & newStdTMapper = datatypeMapperVec[1].first;
+
+	/* now we recode discrete matrix with new state codes */
+	const NxsDiscreteStateCell nOrigStates = (NxsDiscreteStateCell) origSymb.size();
+	std::map<NxsDiscreteStateCell, NxsDiscreteStateCell> oldToNewStateCode;
+	NxsDiscreteStateMatrix::iterator rowIt = discreteMatrix.begin();
+	for (unsigned colIndex = 0; rowIt != discreteMatrix.end(); ++colIndex, ++rowIt)
+		{
+		NxsDiscreteStateRow & row = *rowIt;
+		unsigned column = 0;
+		for (NxsDiscreteStateRow::iterator cell = row.begin(); cell != row.end(); ++cell, ++column)
+			{
+			const NxsDiscreteStateCell initStateCode = *cell;
+			if (initStateCode  >= 0 ) //gap and missing codes do not need translation
+				{
+				std::map<NxsDiscreteStateCell, NxsDiscreteStateCell>::const_iterator otnIt = oldToNewStateCode.find(initStateCode);
+				if (otnIt == oldToNewStateCode.end())
+					{
+					const bool isOrigT = origTypeChars.count(column) > 0;
+					const std::set<NxsDiscreteStateCell> oldSymbols = oldMapper.GetStateSetForCode(initStateCode);
+					const std::string oldNexusString = oldMapper.StateCodeToNexusString(initStateCode);
+					const char oldNexusChar = (oldNexusString.length() == 1 ? oldNexusString[0] : '\0');
+					const bool isPoly =  oldMapper.IsPolymorphic(initStateCode);
+					NxsDiscreteStateCell newStateCode ;
+					if (isOrigT)
+						{ //old symbol indices will still be the new symbol indices
+						newStateCode = newOrigTMapper.StateCodeForStateSet(oldSymbols, isPoly, true, oldNexusChar);
+						newOrigTMapper.StateCodeToNexusString(newStateCode);
+						}
+					else
+						{
+						std::set<NxsDiscreteStateCell> transSymbols;
+						for (std::set<NxsDiscreteStateCell>::const_iterator sIt = oldSymbols.begin(); sIt != oldSymbols.end(); ++sIt)
+							{
+							if (*sIt >= nOrigStates)
+								transSymbols.insert(*sIt - nOrigStates);
+							else
+								{
+								NCL_ASSERT(*sIt < 0);
+								transSymbols.insert(*sIt);
+								}
+							}
+						newStateCode = newStdTMapper.StateCodeForStateSet(transSymbols, isPoly, true, oldNexusChar);
+						newStdTMapper.StateCodeToNexusString(newStateCode);
+						}
+					oldToNewStateCode[initStateCode] = newStateCode;
+					*cell = newStateCode;
+					}
+				else
+					*cell = otnIt->second;
+				}
+			}
+		}
+	datatype = NxsCharactersBlock::mixed;
+	mixedTypeMapping.clear();
+	mixedTypeMapping[odt] = origTypeChars;
+	mixedTypeMapping[NxsCharactersBlock::standard] = stdTypeChars;
+	return true;
+	}
+/*!
+	Called when FORMAT command needs to be parsed from within the DIMENSIONS block. Deals with everything after the
+	token FORMAT up to and including the semicolon that terminates the FORMAT command.
+*/
+void NxsCharactersBlock::HandleFormat(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	errormsg.clear();
+	ProcessedNxsCommand tokenVec;
+	token.ProcessAsCommand( &tokenVec);
+
+	const ProcessedNxsCommand::const_iterator tvEnd = tokenVec.end();
+	NxsPartition dtParts;
+	std::vector<DataTypesEnum> dtv;
+	std::vector<bool> isR;
+	if (!datatypeReadFromFormat)
+		{
+		bool standardDataTypeAssumed = true;
+		bool ignoreCaseAssumed = true;
+		datatype = standard;
+		originalDatatype = standard;
+		ResetSymbols();
+		respectingCase = false;
+		restrictionDataype = false;
+		for (ProcessedNxsCommand::const_iterator wIt = tokenVec.begin(); wIt != tvEnd; ++wIt)
+			{
+			if (wIt->Equals("DATATYPE"))
+				{
+				DemandEquals(wIt, tvEnd, " after keyword DATATYPE");
+				ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, " after \"DATATYPE =\" in FORMAT command");
+				if (wIt->Equals("STANDARD"))
+					{
+					datatype = standard;
+					symbols = "01";
+					}
+				else if (wIt->Equals("DNA"))
+					datatype = dna;
+				else if (wIt->Equals("RNA"))
+					datatype = rna;
+				else if (wIt->Equals("NUCLEOTIDE"))
+					datatype = nucleotide;
+				else if (wIt->Equals("PROTEIN"))
+					datatype = protein;
+				else if (wIt->Equals("RESTRICTION"))
+					{
+					datatype = standard;
+					restrictionDataype = true;
+					}
+				else if (wIt->Equals("CONTINUOUS"))
+					{
+					datatype = continuous;
+					statesFormat = INDIVIDUALS;
+					items = std::vector<std::string>(1, std::string("AVERAGE"));
+					tokens = true;
+					}
+				else if (supportMixedDatatype && wIt->Equals("MIXED"))
+					{
+					datatype = mixed;
+					ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, " after \"DATATYPE=MIXED\" in FORMAT command. Expecting (");
+					if (!wIt->Equals("("))
+						{
+						errormsg << "Expecting ( after \"DATATYPE=MIXED\" but found " << wIt->GetToken();
+						throw NxsException(errormsg, *wIt);
+						}
+					ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, " after \"DATATYPE=MIXED(\" in FORMAT command. Expecting a datatype");
+					ostringstream fakestream;
+					while (!wIt->Equals(")"))
+						{
+						fakestream << ' ' << NxsString::GetEscaped(wIt->GetToken());
+						ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, " in \"DATATYPE=MIXED\" in FORMAT command. Expecting a closing ) to terminate the list.");
+						}
+					fakestream << ';';
+					const std::string accumulated = fakestream.str();
+					istringstream fakeinput(accumulated);
+					NxsToken subToken(fakeinput);
+					try
+						{
+						std::string mt("mixed datatype definition");
+						subToken.GetNextToken();
+						this->ReadPartitionDef(dtParts, *this, mt, "Character", "Datatype=Mixed", subToken, false, true, false);
+						}
+					catch (NxsException & x)
+						{
+						errormsg = x.msg;
+						throw NxsException(errormsg, *wIt);
+						}
+					catch (...)
+						{
+						errormsg << "Error parsing \"DATATYPE=MIXED\" subcommand in FORMAT the command.";
+						throw NxsException(errormsg, *wIt);
+						}
+					for (NxsPartition::const_iterator pIt = dtParts.begin(); pIt != dtParts.end(); ++pIt)
+						{
+						NxsString name(pIt->first.c_str());
+						name.ToUpper();
+						if (name == "RESTRICTION")
+							{
+							dtv.push_back(standard);
+							isR.push_back(true);
+							}
+						else
+							{
+							isR.push_back(false);
+							if (name == "STANDARD")
+								dtv.push_back(standard);
+							else if (name == "DNA")
+								dtv.push_back(dna);
+							else if (name == "RNA")
+								dtv.push_back(rna);
+							else if (name == "NUCLEOTIDE")
+								dtv.push_back(nucleotide);
+							else if (name == "PROTEIN")
+								dtv.push_back(protein);
+							else
+								{
+								errormsg << pIt->first <<  " is not a valid DATATYPE within a " <<  NCL_BLOCKTYPE_ATTR_NAME << " block";
+								throw NxsException(errormsg, *wIt);
+								}
+							}
+						}
+					}
+				else
+					{
+					errormsg << wIt->GetToken() <<  " is not a valid DATATYPE within a " <<  NCL_BLOCKTYPE_ATTR_NAME << " block";
+					throw NxsException(errormsg, *wIt);
+					}
+				datatypeReadFromFormat = true;
+				originalDatatype = datatype;
+				ResetSymbols();
+				standardDataTypeAssumed = false;
+				if (!ignoreCaseAssumed)
+					break;
+				}
+			else if (wIt->Equals("RESPECTCASE"))
+				{
+				ignoreCaseAssumed = false;
+				respectingCase = true;
+				if (!standardDataTypeAssumed)
+					break;
+				}
+			}
+		}
+	for (ProcessedNxsCommand::const_iterator wIt = tokenVec.begin(); wIt != tvEnd; ++wIt)
+		{
+
+		if (wIt->Equals("DATATYPE"))// we should have already processed this
+			{
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "after DATATYPE in FORMAT command"); // =
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "after DATATYPE = in FORMAT command"); // datatype
+			}
+		else if (wIt->Equals("RESPECTCASE"))
+			{
+			if (!respectingCase)
+				{
+				errormsg << "Only one FORMAT command should occur per DATA or CHARACTERS block.";
+				throw NxsException(errormsg, *wIt);
+				}
+			}
+		else if (wIt->Equals("MISSING"))
+			{
+			DemandEquals(wIt, tvEnd, "after keyword MISSING");
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "after \"MISSING = \" in FORMAT command");
+			const std::string t = wIt->GetToken();
+			if (t.length() != 1)
+				{
+				errormsg << "MISSING symbol should be a single character, but " << t << " was specified";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			else if (token.IsPunctuationToken(t) && !token.IsPlusMinusToken(t))
+				{
+				errormsg << "MISSING symbol specified cannot be a punctuation token (" << t << " was specified)";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			else if (token.IsWhitespaceToken(t))
+				{
+				errormsg << "MISSING symbol specified cannot be a whitespace character (" << t << " was specified)";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			missing = t[0];
+			}
+		else if (wIt->Equals("GAP"))
+			{
+			DemandEquals(wIt, tvEnd, "after keyword GAP");
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "after \"GAP = \" in FORMAT command");
+			const std::string t = wIt->GetToken();
+			if (t.length() != 1)
+				{
+				errormsg << "GAP symbol should be a single character, but " << t << " was specified";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			else if (token.IsPunctuationToken(t) && !token.IsPlusMinusToken(t))
+				{
+				errormsg << "GAP symbol specified cannot be a punctuation token " << t << " was specified";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			else if (token.IsWhitespaceToken(t))
+				{
+				errormsg << "GAP symbol specified cannot be a whitespace character " << t << " was specified";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			gap = t[0];
+			}
+		else if (wIt->Equals("MATCHCHAR"))
+			{
+			DemandEquals(wIt, tvEnd, "after keyword MATCHCHAR");
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "after \"MATCHCHAR = \" in FORMAT command");
+			const std::string t = wIt->GetToken();
+			if (t.length() != 1)
+				{
+				errormsg << "MATCHCHAR symbol should be a single character, but " << t << " was specified";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			else if (token.IsPunctuationToken(t) && !token.IsPlusMinusToken(t))
+				{
+				errormsg << "MATCHCHAR symbol specified cannot be a punctuation token (" << t << " was specified)";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			else if (token.IsWhitespaceToken(t))
+				{
+				errormsg << "MATCHCHAR symbol specified cannot be a whitespace character (" << t << " was specified)";
+				WarnDangerousContent(errormsg, *wIt);
+				}
+			matchchar = t[0];
+			}
+		else if (wIt->Equals("SYMBOLS") || wIt->Equals("SYMBOL"))
+			{
+			if (datatype == NxsCharactersBlock::continuous)
+				throw NxsException("SYMBOLS subcommand not allowed for DATATYPE=CONTINUOUS", *wIt);
+			if (restrictionDataype)
+				throw NxsException("SYMBOLS subcommand not allowed for DATATYPE=RESTRICTION", *wIt);
+			NxsDiscreteStateCell numDefStates;
+			unsigned maxNewStates = NCL_MAX_STATES;
+			switch(datatype)
+				{
+				case NxsCharactersBlock::dna:
+				case NxsCharactersBlock::rna:
+				case NxsCharactersBlock::nucleotide:
+					numDefStates = 4;
+					maxNewStates = NCL_MAX_STATES-4;
+					break;
+
+				case NxsCharactersBlock::protein:
+					numDefStates = 21;
+					maxNewStates = NCL_MAX_STATES-21;
+					break;
+
+				default:
+					numDefStates = 0; // replace symbols list for standard datatype
+					symbols.clear();
+					maxNewStates = NCL_MAX_STATES;
+				}
+			DemandEquals(wIt, tvEnd, "after keyword SYMBOLS");
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "\" to start the symbols list");
+			if (!wIt->Equals("\""))
+				{
+				errormsg << "Expecting \" after Symbols= but " << wIt->GetToken() << " was found";
+				throw NxsException(errormsg, *wIt);
+				}
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "closing \" of symbols list");
+			NxsString s;
+			while (!wIt->Equals("\""))
+				{
+				s += wIt->GetToken().c_str();
+				ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "closing \" of symbols list");
+				}
+
+			const std::string tos = NxsString::strip_whitespace(s);
+			const char * to = tos.c_str();
+			unsigned tlen = (unsigned)tos.length();
+			if (tlen > maxNewStates)
+				{
+				errormsg << "SYMBOLS defines " << tlen << " new states but only " << maxNewStates << " new states allowed for this DATATYPE";
+				throw NxsException(errormsg, *wIt);
+				}
+			// Check to make sure user has not used any symbols already in the
+			// default symbols list for this data type
+			//
+			std::string preprocessedS;
+			for (unsigned i = 0; i < tlen; i++)
+				{
+				if (to[i] == '~')
+					{
+					if (i == 0 || i == tlen -1)
+						{
+						errormsg << "A ~ in a SYMBOLS list is interpreted as a range of symbols.  The ~ cannot be the first or last character in the symbols list";
+						throw NxsException(errormsg, token);
+						}
+					const int jj = i - 1 ;
+					const char prevChar = to[jj];
+					const char nextChar = to[i+1];
+					if ((isdigit(prevChar) && isdigit(nextChar)) || (isalpha(prevChar) && isalpha(nextChar)))
+						{
+						if (nextChar > prevChar)
+							{
+							for (char c = (char)((int)prevChar + 1) ; c < nextChar;)
+								{
+								preprocessedS.append(1, c);
+								c = (char) ((int)c + 1);
+								}
+							}
+						else
+							{
+							errormsg << "Endpoint of SYMBOLS range must be greater than the starting point.  This was not true of " << prevChar << '~' << nextChar;
+							throw NxsException(errormsg, token);
+							}
+						}
+					else
+						{
+						errormsg << prevChar << '~' << nextChar << " is an illegal SYMBOLS range. A range must go from a letter to a letter or from a number to number" ;
+						throw NxsException(errormsg, token);
+						}
+					}
+				else
+					preprocessedS += to[i];
+				}
+			NxsString processedS;
+			for (std::string::const_iterator pp = preprocessedS.begin(); pp != preprocessedS.end(); ++pp)
+				{
+				const char c = *pp;
+				if (IsInSymbols(c))
+					{
+					errormsg << "The character " << c << " defined in SYMBOLS is predefined for this DATATYPE and should not occur in a SYMBOLS statement";
+					if (nexusReader)
+						{
+						nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+						errormsg.clear();
+						}
+					}
+				else if (   (respectingCase && (userEquates.find(c) != userEquates.end()))
+						 || (! respectingCase && (userEquates.find(toupper(c)) != userEquates.end() || userEquates.find(tolower(*pp)) != userEquates.end())))
+					{
+					errormsg << "The character " << *pp << " defined in SYMBOLS subcommand, has already been introduced as an EQUATE key.  The use of a character as both a state symbol and an equate key is not allowed.";
+					throw NxsException(errormsg, token);
+					}
+				else
+					processedS += *pp;
+				}
+			if (!processedS.empty())
+				{
+				if (this->datatype == dna || this->datatype == rna || this->restrictionDataype || this->datatype == protein)
+					{
+					if (this->allowAugmentingOfSequenceSymbols)
+						{
+						errormsg << "Adding symbols to the " << GetNameOfDatatype(this->datatype) << " datatype will cause the matrix to be treated as if it were a";
+						if (this->convertAugmentedToMixed)
+							errormsg << " MIXED datatype matrix";
+						else
+							errormsg << " STANDARD datatype matrix";
+						if (!this->convertAugmentedToMixed)
+							nexusReader->NexusWarnToken(errormsg, NxsReader::AMBIGUOUS_CONTENT_WARNING, token);
+						errormsg.clear();
+						}
+					else
+						{
+						errormsg << "Symbols cannot be added to the " << GetNameOfDatatype(this->datatype) << " datatype.";
+						throw NxsException(errormsg, token);
+						}
+					}
+				// If we've made it this far, go ahead and add the user-defined
+				// symbols to the end of the list of predefined symbols
+				//
+				symbols += processedS.c_str();
+				}
+			}
+
+		else if (wIt->Equals("EQUATE"))
+			{
+			if (datatype == NxsCharactersBlock::continuous)
+				throw NxsException("EQUATE subcommand not allowed for DATATYPE=CONTINUOUS", *wIt);
+
+			DemandEquals(wIt, tvEnd, "after keyword EQUATE");
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "\" to start the Equate definition");
+			if (!wIt->Equals("\""))
+				{
+				errormsg << "Expecting '\"' after keyword EQUATE but found " << wIt->GetToken() << " instead";
+				throw NxsException(errormsg, *wIt);
+				}
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "\" to end the Equate definition");
+			while (!wIt->Equals("\""))
+				{
+				std::string t = wIt->GetToken();
+				if (t.length() != 1)
+					{
+					errormsg << "Expecting single-character EQUATE symbol but found " << wIt->GetToken() << " instead";
+					throw NxsException(errormsg, *wIt);
+					}
+				const char ch = t[0];
+				bool badEquateSymbol = false;
+
+				// Equate symbols cannot be punctuation (except for + and -)
+				//
+				if (token.IsPunctuationToken(t) && !token.IsPlusMinusToken(t))
+					badEquateSymbol = true;
+				else if (ch == '^')
+					badEquateSymbol = true;
+				if (badEquateSymbol)
+					{
+					errormsg << "EQUATE symbol specified (" << wIt->GetToken() <<  ") is not valid. Equate symbols cannot be any of the following: ()[]{}/\\,;:=*'\"`<>^";
+					WarnDangerousContent(errormsg, *wIt);
+					}
+				if (ch == missing || ch == matchchar || ch == gap || IsInSymbols(ch))
+					{
+					errormsg << "EQUATE symbol specified (" << wIt->GetToken() <<  ") is not valid; An Equate symbol cannot be a state symbol or identical to the  missing,  gap, or matchchar symbols.";
+					throw NxsException(errormsg, *wIt);
+					}
+
+				DemandEquals(wIt, tvEnd, " in EQUATE definition");
+				ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "State or set of states in Equate definition");
+				NxsString s;
+				s = wIt->GetToken().c_str();
+				if (wIt->Equals("{"))
+					{
+					while (!wIt->Equals("}"))
+						{
+						ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "} to close the state set in an equate definition");
+						s += wIt->GetToken().c_str();
+						}
+					}
+				else if (wIt->Equals("("))
+					{
+					while (!wIt->Equals(")"))
+						{
+						ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, ") to close the state set in an equate definition");
+						s += wIt->GetToken().c_str();
+						}
+					}
+				const std::string nows = NxsString::strip_whitespace(s);
+				userEquates[ch] = NxsString(nows.c_str());
+				ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "\" to end the Equate definition");
+				}
+			}
+
+		else if (wIt->Equals("LABELS"))
+			labels = true;
+		else if (wIt->Equals("NOLABELS"))
+			labels = false;
+		else if (wIt->Equals("TRANSPOSE"))
+			transposing = true;
+		else if (wIt->Equals("INTERLEAVE"))
+			interleaving = true;
+		else if (wIt->Equals("ITEMS"))
+			{
+			DemandEquals(wIt, tvEnd, "after keyword ITEMS");
+			items.clear();
+			// This should be STATES (no other item is supported at this time)
+			//
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "after \"ITEMS =\" in FORMAT command");
+			if (datatype == NxsCharactersBlock::continuous)
+				{
+				std::string s;
+				if (wIt->Equals("("))
+					{
+					ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, ") to close Items list in FORMAT command");
+					while (!wIt->Equals(")"))
+						{
+						s = wIt->GetToken();
+						NxsString::to_upper(s);
+						items.push_back(std::string(s.c_str()));
+						ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, ") to close Items list in FORMAT command");
+						}
+					}
+				else
+					{
+					s = wIt->GetToken();
+					NxsString::to_upper(s);
+					items.push_back(std::string(s.c_str()));
+					}
+				}
+			else
+				{
+				if (!wIt->Equals("STATES"))
+					throw NxsException("Sorry, only ITEMS=STATES is supported for discrete datatypes at this time", *wIt);
+				items = std::vector<std::string>(1, std::string("STATES"));
+				}
+			}
+		else if (wIt->Equals("STATESFORMAT"))
+			{
+			DemandEquals(wIt, tvEnd, "after keyword STATESFORMAT");
+			ProcessedNxsToken::IncrementNotLast(wIt, tvEnd, "after \"STATESFORMAT =\" in FORMAT command");
+			if (wIt->Equals("STATESPRESENT"))
+				statesFormat = STATES_PRESENT;
+			else
+				{
+				if (datatype == NxsCharactersBlock::continuous)
+					{
+					if (wIt->Equals("INDIVIDUALS"))
+						statesFormat = INDIVIDUALS;
+					else
+						throw NxsException("Sorry, only STATESFORMAT=STATESPRESENT or STATESFORMAT=INDIVIDUALS are supported for continuous datatypes at this time", *wIt);
+					}
+				else
+					throw NxsException("Sorry, only STATESFORMAT=STATESPRESENT supported for discrete datatypes at this time", *wIt);
+				}
+			}
+		else if (wIt->Equals("TOKENS"))
+			tokens = true;
+		else if (wIt->Equals("NOTOKENS"))
+			{
+			if (datatype == NxsCharactersBlock::continuous)
+				throw NxsException("NOTOKENS is not allowed for the CONTINUOUS datatype", *wIt);
+			tokens = false;
+			}
+		}
+	if (IsInSymbols(missing))
+		{
+		errormsg << "The \"missing\" character \'" << missing << "\' may not be included in the SYMBOLS list.";
+		throw NxsException(errormsg, *tokenVec.begin());
+		}
+	if (IsInSymbols(matchchar))
+		{
+		errormsg << "The \"matchchar\" character \'" << matchchar << "\' may not be included in the SYMBOLS list.";
+		throw NxsException(errormsg, *tokenVec.begin());
+		}
+	if (IsInSymbols(gap))
+		{
+		errormsg << "The \"gap\" character \'" << gap << "\' may not be included in the SYMBOLS list.";
+		throw NxsException(errormsg, *tokenVec.begin());
+		}
+
+	if (matchchar != '\0')
+		{
+		if ((matchchar == gap) || (!respectingCase && toupper(matchchar) == toupper(gap)))
+			{
+			errormsg << "MatchChar and Gap symbol cannot be identical!  Both were set to " << gap;
+			throw NxsException(errormsg, *tokenVec.begin());
+			}
+		if ((matchchar == missing) || (!respectingCase && toupper(matchchar) == toupper(missing)))
+			{
+			errormsg << "MatchChar and Missing symbol cannot be identical!  Both were set to " << missing;
+			throw NxsException(errormsg, *tokenVec.begin());
+			}
+		}
+	if ((gap != '\0') && ((gap == missing) || (!respectingCase && toupper(gap) == toupper(missing))))
+		{
+		errormsg << "Gap symbol and Missing symbol cannot be identical!  Both were set to " << missing;
+		throw NxsException(errormsg, *tokenVec.begin());
+		}
+
+	// Perform some last checks before leaving the FORMAT command
+	//
+	if (!tokens && datatype == continuous)
+		GenerateNxsException(token, "TOKENS must be defined for DATATYPE=CONTINUOUS");
+	if (tokens && (datatype == dna || datatype == rna || datatype == nucleotide))
+		GenerateNxsException(token, "TOKENS not allowed for the DATATYPEs DNA, RNA, or NUCLEOTIDE");
+	CreateDatatypeMapperObjects(dtParts, dtv);
+	if (IsMixedType() && tokens)
+		{
+		errormsg = "The combination of DATATYPE=Mixed  and TOKENS are not currently supported.";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	unsigned mapInd = 0;
+	for (std::vector<bool>::const_iterator b = isR.begin(); b != isR.end(); ++b, ++mapInd)
+		{
+		if (*b)
+			{
+			DatatypeMapperAndIndexSet &mapper = datatypeMapperVec.at(mapInd);
+			mapper.first.SetWasRestrictionDataype(true);
+			}
+		}
+	}
+
+/*! creates a standard datatype mapper (symbols "01" and no gaps or equates) */
+NxsDiscreteDatatypeMapper::NxsDiscreteDatatypeMapper()
+	:geneticCode(NXS_GCODE_NO_CODE),
+	datatype(NxsCharactersBlock::standard),
+	restrictionDataype(false),
+	userDefinedEquatesBeforeConversion(false)
+	{
+	symbols.assign("01");
+	matchChar = '\0';
+	gapChar = '\0';
+	missing = '?';
+	respectCase = false;
+	RefreshMappings(0L);
+	}
+
+NxsDiscreteDatatypeMapper & NxsDiscreteDatatypeMapper::operator=(const NxsDiscreteDatatypeMapper& other)
+	{
+	symbols = other.symbols;
+	lcsymbols = other.lcsymbols;
+	nStates = other.nStates;
+	matchChar = other.matchChar;
+	gapChar = other.gapChar;
+	missing = other.missing;
+	respectCase = other.respectCase;
+	extraEquates = other.extraEquates;
+	datatype = other.datatype;
+	geneticCode = other.geneticCode;
+	sclOffset = other.sclOffset;
+	stateSetsVec = other.stateSetsVec;
+	if (stateSetsVec.empty())
+		stateCodeLookupPtr = 0L;
+	else
+		stateCodeLookupPtr = &stateSetsVec[-sclOffset];
+	charToStateCodeLookup = other.charToStateCodeLookup;
+	if (charToStateCodeLookup.empty())
+		cLookup = 0L;
+	else
+		cLookup = &charToStateCodeLookup[127];
+	restrictionDataype = other.restrictionDataype;
+	userDefinedEquatesBeforeConversion = other.userDefinedEquatesBeforeConversion;
+	return *this;
+	}
+
+/*! creates a datatype mapper for a datatype with the default symbols, and possibly a gap char.
+
+	Uses ? as the missing symbol.
+*/
+NxsDiscreteDatatypeMapper::NxsDiscreteDatatypeMapper(
+	NxsCharactersBlock::DataTypesEnum datatypeE, /*!< the datatype enum facet -- cannot be mixed*/
+	bool usegaps) /*!< if true then '-' will be used as the gapChar*/
+	:geneticCode(NXS_GCODE_NO_CODE),
+	cLookup(NULL),
+	stateCodeLookupPtr(NULL),
+	matchChar('.'),
+	gapChar('\0'),
+	missing('?'),
+	respectCase(false),
+	datatype(datatypeE),
+	restrictionDataype(false),
+	userDefinedEquatesBeforeConversion(false)
+	{
+	symbols = NxsCharactersBlock::GetDefaultSymbolsForType(datatype);
+	if (usegaps)
+		gapChar = '-';
+	if (datatype == NxsCharactersBlock::mixed)
+		throw NxsException("Cannot create a mixed datatype mapper"); // this should be the only empty string-generating datatype
+	RefreshMappings(0L);
+	}
+
+/*! \returns true if this and other have:
+		The same symbols list,
+		the same interpretation of state codes.
+
+	Note that the "keys" used in equates may differ (that is a syntactic difference not a semantic one) even if the function returns true.
+
+	This function is useful when checking to see if a Datatype differs significantly from the default type.  If two types are semantically
+	equivalent then their state-coded matrices can be concatenated (or you can manipulate either matrix using the same operations).
+*/
+bool NxsDiscreteDatatypeMapper::IsSemanticallyEquivalent(const NxsDiscreteDatatypeMapper &other) const
+	{
+	if (datatype != other.datatype)
+		return false;
+	if (symbols != other.symbols)
+		return false;
+	bool thisHasGap = (gapChar != '\0');
+	bool otherHasGap = (other.gapChar != '\0');
+	if (thisHasGap != otherHasGap)
+		return false;
+	const NxsDiscreteStateCell nsc = (NxsDiscreteStateCell)GetHighestStateCode();
+	if(nsc != (NxsDiscreteStateCell) other.GetHighestStateCode())
+		return false;
+	for (NxsDiscreteStateCell i = 0; i <= nsc; ++i)
+		{
+		if (GetStateSetForCode(i) != other.GetStateSetForCode(i))
+			return false;
+		}
+	return true;
+	}
+
+/*!
+	Must be called when the symbols list changes.
+	Uses symbols, gap, missing, respectCase,  extraEquates, and datatype fields to establish new mappings.
+	token can be NULL if the call is not triggered by the reading of a NEXUS token.
+*/
+void NxsDiscreteDatatypeMapper::RefreshMappings(NxsToken *token)
+	{
+	nStates = (unsigned)symbols.length();
+	if (nStates ==  0)
+		{
+		if (datatype != NxsCharactersBlock::continuous)
+			throw NxsException("Cannot create a datatype mapper with no symbols");
+		return;
+		}
+	if (!respectCase)
+		{
+		NxsString::to_upper(symbols);
+		lcsymbols = symbols;
+		}
+	else
+		lcsymbols.clear();
+
+	NxsString::to_lower(lcsymbols);
+
+	if (missing == '\0')
+		throw NxsException("Cannot create a datatype mapper with no missing data symbol");
+
+	charToStateCodeLookup.assign(384, NXS_INVALID_STATE_CODE); /*256+128 = 384 -- this way we can deal with signed or unsigned chars by pointing cLookup to element 128*/
+	cLookup = &charToStateCodeLookup[127];
+	stateIntersectionMatrix.clear();
+	isStateSubsetMatrix.clear();
+	isStateSubsetMatrixGapsMissing.clear();
+
+	stateSetsVec.clear();
+	stateCodeLookupPtr = 0L;
+	sclOffset = (gapChar == '\0' ? -1 : -2);
+
+	std::string bogus;
+	std::istringstream bogusStream(bogus);
+	NxsToken bogusToken(bogusStream);
+	token = (token == NULL ? &bogusToken : token);
+
+	/* add the "fundamental" states. */
+	std::set<NxsDiscreteStateCell> stSet;
+	std::set<NxsDiscreteStateCell> missingSet;
+	if (gapChar != '\0')
+		{
+		stSet.insert(NXS_GAP_STATE_CODE);
+		/* this is the one of only 2 times that  we don't call AddStateSet to add a state set
+			we do this to avoid illegal indexing of stateSets[1] when there
+			is only one element in the vector.
+		*/
+		stateSetsVec.push_back(NxsDiscreteStateSetInfo(stSet, false, gapChar));
+		cLookup[(int) gapChar] = NXS_GAP_STATE_CODE;
+
+		missingSet.insert(NXS_GAP_STATE_CODE);
+		}
+
+
+		/*
+			Add the missing state code
+			this is the other time that we don't call AddStateSet (to avoid illegal indexing).
+		*/
+	NCL_ASSERT(missing != '\0');
+	NCL_ASSERT(nStates > 0);
+	for (NxsDiscreteStateCell s = 0; s < (NxsDiscreteStateCell) nStates; ++s)
+		missingSet.insert(s);
+
+	char sym = (respectCase ? missing : (char) toupper(missing));
+	stateSetsVec.push_back(NxsDiscreteStateSetInfo(missingSet, false, sym));
+	const NxsDiscreteStateCell stateCode = (const NxsDiscreteStateCell)stateSetsVec.size() + sclOffset - 1;
+	NCL_ASSERT(NXS_MISSING_CODE == stateCode);
+	if (respectCase)
+		cLookup[(int) missing] = stateCode;
+	else
+		{
+		cLookup[(int) tolower(missing)] = stateCode;
+		cLookup[(int) toupper(missing)] = stateCode;
+		}
+	NCL_ASSERT(cLookup[(int) missing] == NXS_MISSING_CODE);
+	for (NxsDiscreteStateCell s = 0; s < (NxsDiscreteStateCell) nStates; ++s)
+		{
+		stSet.clear();
+		stSet.insert(s);
+		AddStateSet(stSet, symbols[s], respectCase, false);
+		}
+
+	/* add the default equates */
+	std::map<char, NxsString> defEq = NxsCharactersBlock::GetDefaultEquates(datatype);
+
+
+
+	bool convertToStandard = false;
+	if (((datatype == NxsCharactersBlock::nucleotide) || (datatype == NxsCharactersBlock::dna)) && symbols != "ACGT")
+		convertToStandard = true;
+	else if ((datatype == NxsCharactersBlock::rna) && symbols != "ACGU")
+		convertToStandard = true;
+	else if ((datatype == NxsCharactersBlock::protein) && symbols != "ACDEFGHIKLMNPQRSTVWY*")
+		convertToStandard = true;
+	if (convertToStandard)
+		{
+		if (!extraEquates.empty())
+			userDefinedEquatesBeforeConversion = true;
+		defEq.insert(extraEquates.begin(), extraEquates.end());
+		extraEquates.clear();
+		defEq.swap(extraEquates);
+		/* respectcase is only "applicable" to Standard datatype
+			Any symbol extension will be at the end of the symbols list,
+			so here we add the lower case symbols as equates.
+		*/
+		if (respectCase)
+			{
+			std::string lcsym = NxsCharactersBlock::GetDefaultSymbolsForType(datatype);
+			NxsString::to_lower(lcsym);
+			std::string ucsym = lcsym;
+			NxsString::to_upper(ucsym);
+			for (unsigned i = 0; i < ucsym.length(); ++i)
+				{
+				if (ucsym[i] != lcsym[i])
+					{
+					NxsString u;
+					u.append(1, ucsym[i]);
+					extraEquates[lcsym[i]] = u;
+					}
+				}
+			}
+		datatype =  NxsCharactersBlock::standard;
+		}
+
+	/* It is nice to put the all-states code at state code = num_states So here, we'll put this equate in that slot (if such an equate exists)*/
+	std::set<char> targetSet(symbols.begin(), symbols.end());
+	char allStateEquateKey = '\0';
+	std::map<char, NxsString>::const_iterator eqIt = defEq.begin();
+	NxsString taxonName;
+	for (; eqIt != defEq.end(); ++eqIt)
+		{
+		const char c = eqIt->first;
+		const char u = toupper(c);
+		bool addEq = true;
+		if (c == missing || c == matchChar || c == gapChar)
+			addEq = false;
+		if (!respectCase && (u == toupper(missing) || u == toupper(matchChar) || u == toupper(gapChar)))
+			addEq = false;
+		if (addEq)
+			{
+			const NxsString & s = eqIt->second;
+			unsigned slen = (unsigned)s.length();
+			if (slen == 2 + symbols.length())
+				{
+				if (s[0] == '{' && s[slen -1] == '}')
+					{
+					std::set<char> contained;
+					for (unsigned j = 1; j < slen - 1; ++j)
+						contained.insert(s[j]);
+					if (contained == targetSet)
+						{
+						allStateEquateKey = c;
+						NxsDiscreteStateCell sc = StateCodeForNexusPossibleMultiStateSet(allStateEquateKey, s, *token, UINT_MAX, UINT_MAX, 0L, taxonName);
+						cLookup[(int) allStateEquateKey] = sc;
+						break;
+						}
+					}
+				}
+
+			}
+		}
+
+	eqIt = defEq.begin();
+	for (; eqIt != defEq.end(); ++eqIt)
+		{
+		const char c = eqIt->first;
+		if (c == allStateEquateKey)
+			continue;
+		const char u = toupper(c);
+		bool addEq = true;
+		if (c == missing || c == matchChar || c == gapChar)
+			addEq = false;
+		if (!respectCase && (u == toupper(missing) || u == toupper(matchChar) || u == toupper(gapChar)))
+			addEq = false;
+		if (addEq)
+			{
+			const NxsString & s = eqIt->second;
+			NxsDiscreteStateCell sc = StateCodeForNexusPossibleMultiStateSet(c, s, *token, UINT_MAX, UINT_MAX, 0L, taxonName);
+			cLookup[(int) c] = sc;
+			}
+		}
+
+
+
+
+	/* add user-defined equates, and only retain the new ones (those that are not datatype defaults). */
+	std::map<char, NxsString> neededExtraEquates;
+	for (eqIt = extraEquates.begin(); eqIt != extraEquates.end(); ++eqIt)
+		{
+		const char c = eqIt->first;
+		const char u = toupper(c);
+		if (PositionInSymbols(c) == NXS_INVALID_STATE_CODE)
+			{
+			bool addEq = true;
+			if (c == missing || c == matchChar || c == gapChar)
+				addEq = false;
+			if (!respectCase && (u == toupper(missing) || u == toupper(matchChar) || u == toupper(gapChar)))
+				addEq = false;
+			if (addEq)
+				{
+				const NxsDiscreteStateCell prevCode = cLookup[(int) c];
+				const NxsString & s = eqIt->second;
+				NxsDiscreteStateCell sc = StateCodeForNexusPossibleMultiStateSet(c, s, *token, UINT_MAX, UINT_MAX, 0L, taxonName);
+				cLookup[(int) c] = sc;
+				if (sc != prevCode) /* the equate was new */
+					neededExtraEquates[c] = s;
+				}
+			}
+		else
+			{
+			NCL_ASSERT(convertToStandard); // a equate key that is equal to a symbol can happen if the symbols list is augmented (resulting in a conversion to standard datatype)
+			}
+		}
+	extraEquates = neededExtraEquates;
+	}
+
+/*!
+	Returns the state code of a (possible new state set) `sset`.  This may trigger the reallocation of mapping info.
+	nexusSymbol can be '\0' if there is not a single-character symbol that represents this state set.
+
+	if `addToLookup` is false and the state set is not found then NXS_INVALID_STATE_CODE will be returned.
+
+	if the stateset is added with a `nexusSymbol` then the new "symbol" will be case-sensitive
+	(this is an mechanism for entering equates and equates are always case sensitive).
+
+	New "fundamental" states can NOT be introduced using this function -- if unknown states are encountered, an exception will be generated.
+*/
+NxsDiscreteStateCell NxsDiscreteDatatypeMapper::StateCodeForStateSet(const std::set<NxsDiscreteStateCell> & sset, bool isPolymorphic, bool addToLookup, char nexusSymbol)
+	{
+	if (sset.size() == 1)
+		{
+		NxsDiscreteStateCell c = *sset.begin();
+		ValidateStateIndex(c);
+		return c;
+		}
+	NCL_ASSERT(stateCodeLookupPtr);
+	NxsDiscreteStateSetInfo *sclStart = stateCodeLookupPtr + nStates;
+	const NxsDiscreteStateCell nCodes = (NxsDiscreteStateCell)stateSetsVec.size();
+
+	/*we can start at nStates, because < nStates will be handled in the sset.size() == 1 above */
+	for (NxsDiscreteStateCell i = nStates - sclOffset; i < nCodes; ++i)
+		{
+		NxsDiscreteStateSetInfo & stateSetInfo = *sclStart++;
+		if (sset == stateSetInfo.states && isPolymorphic == stateSetInfo.isPolymorphic)
+			return i + sclOffset;
+		}
+	for (std::set<NxsDiscreteStateCell>::const_iterator sIt = sset.begin(); sIt != sset.end(); ++sIt)
+		ValidateStateIndex(*sIt);
+	if (!isPolymorphic)
+		{
+		const unsigned nsymbs = (const unsigned)sset.size();
+		if (gapChar != '\0' && nsymbs == GetNumStatesIncludingGap())
+			return NXS_MISSING_CODE;
+		}
+	if (!addToLookup)
+		return NXS_INVALID_STATE_CODE;
+	return AddStateSet(sset, nexusSymbol, true, isPolymorphic);
+	}
+
+/*!
+	Adds a new state set and returns its code.
+	Does NOT check if the state set is present.
+	It is also MANDATORY that this function be called with the fundamental states first (and in order) before
+	 being called with any multi state sets (this is done by RefreshMappings)
+*/
+NxsDiscreteStateCell NxsDiscreteDatatypeMapper::AddStateSet(const std::set<NxsDiscreteStateCell> & states, char nexusSymbol, bool symRespectCase, bool isPolymorphic)
+	{
+	stateIntersectionMatrix.clear();
+	isStateSubsetMatrix.clear();
+	isStateSubsetMatrixGapsMissing.clear();
+
+
+	bool reallyIsPoly = (states.size() > 1 && isPolymorphic);
+	char sym = (symRespectCase ? nexusSymbol : (char) toupper(nexusSymbol));
+	stateSetsVec.push_back(NxsDiscreteStateSetInfo(states, reallyIsPoly, sym));
+	/* if we have gaps, then the sclOffset is -1 and we want to enable
+		stateCodeLookup[-1], so we set stateCodeLookup to &stateSets[1]
+		hence the -sclOffset below
+	*/
+	stateCodeLookupPtr = &stateSetsVec[-sclOffset];
+
+	const NxsDiscreteStateCell stateCode = (const NxsDiscreteStateCell)stateSetsVec.size() + sclOffset - 1;
+	if (nexusSymbol != '\0')
+		{
+		if (symRespectCase)
+			cLookup[(int) nexusSymbol] = stateCode;
+		else
+			{
+			cLookup[(int) tolower(nexusSymbol)] = stateCode;
+			cLookup[(int) toupper(nexusSymbol)] = stateCode;
+			}
+		}
+	return stateCode;
+	}
+
+
+
+/*!
+	Throws an NxsNCLAPIException  if `c` is not a valid index of one of the "fundamental" states for the datatype.
+*/
+void NxsDiscreteDatatypeMapper::ValidateStateIndex(NxsDiscreteStateCell c) const
+	{
+	if (c < NXS_MISSING_CODE)
+		{
+		if (c == NXS_GAP_STATE_CODE)
+			{
+			if (gapChar == '\0')
+				throw NxsNCLAPIException("Illegal usage of NXS_GAP_STATE_CODE in a datatype without gaps");
+			return;
+			}
+		if (c == NXS_INVALID_STATE_CODE)
+			throw NxsNCLAPIException("Illegal usage of NXS_INVALID_STATE_CODE as a state index");
+		throw NxsNCLAPIException("Illegal usage of unknown negative state index");
+		}
+	else if (c >= (NxsDiscreteStateCell) nStates)
+		throw NxsNCLAPIException("Illegal usage of state index >= the number of states");
+	}
+
+/*!
+	Throws an NxsNCLAPIException  if `c` is not a valid state code.
+*/
+void NxsDiscreteDatatypeMapper::ValidateStateCode(NxsDiscreteStateCell c) const
+	{
+	if (c < sclOffset)
+		{
+		if (c == NXS_GAP_STATE_CODE)
+			{
+			if (gapChar == '\0')
+				throw NxsNCLAPIException("Illegal usage of NXS_GAP_STATE_CODE in a datatype without gaps");
+			}
+		if (c == NXS_INVALID_STATE_CODE)
+			throw NxsNCLAPIException("Illegal usage of NXS_INVALID_STATE_CODE as a state code");
+		throw NxsNCLAPIException("Illegal usage of unknown negative state index");
+		}
+	else if (c >= (((NxsDiscreteStateCell) stateSetsVec.size()) + sclOffset))
+	    {
+	    NxsString err = "Illegal usage of state code > the highest state code. c = ";
+	    err << int(c) << " (NxsDiscreteStateCell) stateSetsVec.size() = " << (NxsDiscreteStateCell) stateSetsVec.size();
+	    err << " sclOffset = " << sclOffset;
+	    throw NxsNCLAPIException(err);
+	    }
+	}
+
+
+void NxsDiscreteDatatypeMapper::GenerateNxsExceptionMatrixReading(char const* message, unsigned int taxInd, unsigned int charInd,
+NxsToken* token, const NxsString &nameStr)
+	{
+	NxsString e = "Error reading character ";
+	e << charInd + 1<<" for taxon " << taxInd + 1;
+	if (!nameStr.empty())
+		{
+		NxsString nasn;
+		nasn << taxInd + 1;
+		if (nasn != nameStr)
+			e << " (name \""<< nameStr <<"\")";
+		}
+	e << ":\n" << message;
+	if (token)
+		throw NxsException(e, *token);
+	else
+		throw NxsException(e);
+	}
+
+/*!
+	Returns true if the state code maps to a collection of states that were flagged as polymorphic.
+	generates a NxsNCLAPIException if `c` is not a valid state code
+*/
+bool NxsDiscreteDatatypeMapper::IsPolymorphic(NxsDiscreteStateCell c) const
+	{
+	NCL_ASSERT(stateCodeLookupPtr);
+	ValidateStateCode(c);
+	return stateCodeLookupPtr[c].isPolymorphic;
+	}
+
+
+/*!
+	Returns NXS_INVALID_STATE_CODE or the index of `c` in the symbols list.
+	case-sensitivity is controlled by this->respectCase attribute.
+
+	NOTE: the gap "state" and missing characters are NOT in the symbols list.
+*/
+NxsDiscreteStateCell NxsDiscreteDatatypeMapper::PositionInSymbols(char c) const
+	{
+	NxsDiscreteStateCell p = (NxsDiscreteStateCell)symbols.find(c);
+	if (p >= 0 && p < (NxsDiscreteStateCell) nStates)
+		return p;
+	if (!respectCase)
+		{
+		p = (NxsDiscreteStateCell)lcsymbols.find(c);
+		if (p >= 0 && p < (NxsDiscreteStateCell) nStates)
+			return p;
+		}
+	return NXS_INVALID_STATE_CODE;
+	}
+
+
+/*!
+	Returns the NEXUS reperesenation of the state code `scode` which may be a
+	multiple character string such as {DNY}
+   Generates a NxsNCLAPIException if `c` is not a valid state code.
+	If the string cannot be expressed (insufficient symbols are defined) then
+	`demandSymbols` controls the behavior.  If `demandSymbols` is true than a
+	NxsNCLAPIException is thrown. If `demandSymbols` is false then no output is
+	written.
+*/
+void NxsDiscreteDatatypeMapper::WriteStateCodeAsNexusString(std::ostream & out, NxsDiscreteStateCell scode, bool demandSymbols) const
+	{
+	//out << "WriteStateCodeAsNexusString-debug scode=" << scode<< '\n';
+	ValidateStateCode(scode);
+	const NxsDiscreteStateSetInfo & stateSetInfo =  stateCodeLookupPtr[scode];
+	NCL_ASSERT (&(stateSetsVec.at(scode-sclOffset)) == &stateSetInfo);
+	char c = stateSetInfo.nexusSymbol;
+	if (c != '\0')
+		{
+		out << c;
+		return;
+		}
+	std::string towrite;
+	std::set<NxsDiscreteStateCell>::const_iterator sIt = stateSetInfo.states.begin();
+	const std::set<NxsDiscreteStateCell>::const_iterator endIt = stateSetInfo.states.end();
+	for (; sIt != endIt; ++sIt)
+		{
+		const NxsDiscreteStateCell state = *sIt;
+		const NxsDiscreteStateSetInfo & subStateSetInfo =  stateCodeLookupPtr[state];
+		const char subc = subStateSetInfo.nexusSymbol;
+		if (subc != '\0')
+			towrite.append(1, subc);
+		else if (demandSymbols)
+			{
+			NxsString err("No symbol found for state code ");
+			err << state;
+			throw NxsNCLAPIException(err);
+			}
+		else
+			return;
+		}
+
+	out <<	(stateSetInfo.isPolymorphic ? '(' : '{');
+	out << towrite;
+	out <<	(stateSetInfo.isPolymorphic ? ')' : '}');
+	}
+
+unsigned NxsDiscreteDatatypeMapper::GetNumStatesInStateCode(NxsDiscreteStateCell scode) const
+	{
+	ValidateStateCode(scode);
+	const NxsDiscreteStateSetInfo & stateSetInfo =  stateCodeLookupPtr[scode];
+	return (unsigned)stateSetInfo.states.size();
+	}
+
+void NxsDiscreteDatatypeMapper::WriteStartOfFormatCommand(std::ostream & out) const
+	{
+	out << "    FORMAT Datatype=" << NxsCharactersBlock::GetNameOfDatatype(datatype);
+	if (this->missing != '?')
+		{
+		out << " Missing=";
+		out << this->missing;
+		}
+	if (this->gapChar != '\0')
+		{
+		out << "  Gap=";
+		out << this->gapChar;
+		}
+	if (this->datatype != NxsCharactersBlock::continuous)
+		{
+		unsigned numDefStates = 4;
+		if (this->datatype == NxsCharactersBlock::protein)
+			numDefStates = 21;
+		else if (this->datatype == NxsCharactersBlock::standard)
+			numDefStates = 0;
+		unsigned nSym = (unsigned)this->symbols.length();
+		if (nSym > numDefStates && this->datatype != NxsCharactersBlock::codon)
+			{
+			out << " Symbols=\"";
+			for (unsigned i = numDefStates; i < nSym; ++i)
+				{
+				char c = symbols[i];
+				if (c == '\0')
+					break;
+				out << c;
+				}
+			out <<"\"";
+			}
+		}
+	const std::map<char, NxsString> defEquates = NxsCharactersBlock::GetDefaultEquates(datatype);
+	std::map<char, NxsString> toWrite;
+	const std::map<char, NxsString>::const_iterator notFound = defEquates.end();
+	std::map<char, NxsString>::const_iterator inDefEquates;
+	for (std::map<char, NxsString>::const_iterator i = extraEquates.begin(); i != extraEquates.end(); ++i)
+		{
+		const char key =  (*i).first;
+		const NxsString val =  i->second;
+		inDefEquates = defEquates.find(key);
+		if (inDefEquates == notFound || inDefEquates->second != val)
+			toWrite[key] = val;
+		}
+	if (toWrite.size() > 0)
+		{
+		out << " Equate=\"";
+		for (std::map<char, NxsString>::const_iterator j = toWrite.begin(); j != toWrite.end(); ++j)
+			out << ' ' << j->first << '=' << j->second;
+		out <<"\"";
+		}
+	}
+
+bool NxsCharactersBlock::HandleNextContinuousState(NxsToken &token, unsigned taxNum, unsigned charNum, ContinuousCharRow & row, const NxsString & )
+	{
+	if (interleaving)
+		token.SetLabileFlagBit(NxsToken::newlineIsToken);
+	token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation);
+	std::vector<double> v;
+	std::vector<int> scored;
+	token.GetNextToken();
+	NxsString t;
+	if (interleaving && token.AtEOL())
+		return false;
+	if (token.Equals("("))
+		{
+		token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation);
+		token.GetNextToken();
+		while (!token.Equals(")"))
+			{
+			t = token.GetToken();
+			if (t.length() == 1 && (t[0] == missing || t[0] == gap))
+				{
+				v.push_back(DBL_MAX);
+				scored.push_back(0);
+				}
+			else if (t.length() == 1 && t[0] == matchchar)
+				{
+				v.push_back(DBL_MAX);
+				scored.push_back(2);
+				}
+			else if (!t.IsADouble())
+				GenerateUnexpectedTokenNxsException(token, "a number");
+			else
+				{
+				v.push_back(t.ConvertToDouble());
+				scored.push_back(1);
+				}
+			token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation);
+			token.GetNextToken();
+			}
+		}
+	else
+		{
+		t = token.GetToken();
+		if (t.length() == 1 && (t[0] == missing || t[0] == gap))
+			{
+			v.push_back(DBL_MAX);
+			scored.push_back(0);
+			}
+		else if (t.length() == 1 && t[0] == matchchar)
+			{
+			v.push_back(DBL_MAX);
+			scored.push_back(2);
+			}
+		else if (!t.IsADouble())
+			GenerateUnexpectedTokenNxsException(token, "a number");
+		else
+			{
+			v.push_back(t.ConvertToDouble());
+			scored.push_back(1);
+			}
+		}
+	unsigned n_read = (unsigned)v.size();
+	if (n_read < items.size())
+		{
+		errormsg.clear();
+		errormsg << "For each cell of the MATRIX a value for each of the " << (unsigned)items.size() <<  " ITEMS listed in the FORMAT command is expected.\nOnly " <<  n_read << " values read.";
+		GenerateNxsException(token);
+		}
+	// We've read in the state now, so if this character has been eliminated, we don't want to go any further with it
+	//
+	if (charNum == UINT_MAX)
+		return true;
+
+	if (charNum > row.size())
+		GenerateNxsException(token, "Internal Error: character index out of range in continuousMatrix.");
+
+	ContinuousCharCell & cell = row[charNum];
+	cell.clear();
+
+	std::vector<std::string >::const_iterator itemIt = items.begin();
+	std::string key;
+	unsigned curr_ind_in_v = 0;
+	for (; itemIt != items.end(); ++itemIt, ++curr_ind_in_v)
+		{
+		key = *itemIt;
+		if (scored[curr_ind_in_v] == 1)
+			cell[key] = vector<double>(1, v[curr_ind_in_v]);
+		else if (scored[curr_ind_in_v] == 0)
+			cell[key] = vector<double>();
+		else
+			{
+			if (taxNum == 0)
+				GenerateNxsException(token, "MATCHCHAR cannot be used in the first taxon");
+			const vector<double> & first_taxon_vector = continuousMatrix[0][charNum][key];
+			if (first_taxon_vector.empty())
+				GenerateNxsException(token, "First taxon does not have a value to copy, but a MATCHCHAR was found.");
+			else
+				cell[key] = vector<double>(1, first_taxon_vector[0]);
+			}
+		}
+	unsigned curr_ind_mapped = 1;
+	if (!key.empty() && curr_ind_in_v < n_read)
+		{
+		vector<double> & curr_cell_vector = cell[key];
+		for (; curr_ind_in_v < n_read; ++curr_ind_in_v, ++curr_ind_mapped)
+			{
+			if (scored[curr_ind_in_v] == 1)
+				curr_cell_vector.push_back(v[curr_ind_in_v]);
+			else if (scored[curr_ind_in_v] != 0)
+				curr_cell_vector.push_back(DBL_MAX);
+			else
+				{
+				if (taxNum == 0)
+					GenerateNxsException(token, "MATCHCHAR cannot be used in the first taxon");
+				const vector<double> & first_taxon_vector = continuousMatrix[0][charNum][key];
+				if (first_taxon_vector.size() < curr_ind_mapped+1)
+					GenerateNxsException(token, "First taxon does not have a value to copy, but a MATCHCHAR was found.");
+				else
+					curr_cell_vector.push_back(first_taxon_vector[curr_ind_mapped]);
+				}
+			}
+		}
+	return true;
+	}
+
+NxsDiscreteStateCell NxsDiscreteDatatypeMapper::StateCodeForNexusChar(
+  const char currChar,
+  NxsToken *token,
+  unsigned taxNum,		/* the taxon index, in range [0..`ntax') */
+  unsigned charNum,		/* the character index, in range [0..`nChar') */
+  const NxsDiscreteStateRow * firstTaxonRow,
+  const NxsString & nameStr) const
+  	{
+	NxsDiscreteStateCell currState = cLookup[static_cast<int>(currChar)];
+	if (currState == NXS_INVALID_STATE_CODE)
+		{
+		NxsString emsg;
+		if (currChar == matchChar)
+			{
+			if (firstTaxonRow == NULL)
+				GenerateNxsExceptionMatrixReading("Unexpected use of MatchChar in first taxon with data.", taxNum, charNum, token, nameStr);
+			if (firstTaxonRow->size() <= charNum)
+				{
+				emsg << "MatchChar found for character number "  << charNum+1 << " but the first taxon does not have a character state stored for this character.";
+				GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, token, nameStr);
+				}
+			currState = (*firstTaxonRow)[charNum];
+			}
+		else
+			{
+			emsg << "Invalid state specified \"" << currChar << "\"";
+			GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, token, nameStr);
+			}
+		}
+	return currState;
+	}
+
+bool NxsCharactersBlock::HandleNextDiscreteState(
+  NxsToken &token,
+  unsigned taxNum,
+  unsigned charNum,
+  NxsDiscreteStateRow & row,
+  NxsDiscreteDatatypeMapper &mapper,
+  const NxsDiscreteStateRow * firstTaxonRow,
+  const NxsString & nameStr)
+  	{
+  	if (interleaving)
+		token.SetLabileFlagBit(NxsToken::newlineIsToken);
+	NCL_ASSERT(!tokens);
+	token.SetLabileFlagBit(NxsToken::parentheticalToken);
+	token.SetLabileFlagBit(NxsToken::curlyBracketedToken);
+	token.SetLabileFlagBit(NxsToken::singleCharacterToken);
+
+	token.GetNextToken();
+
+	if (interleaving && token.AtEOL())
+		return false;
+	const NxsString &stateAsNexus = token.GetTokenReference();
+	NxsDiscreteStateCell sc =  mapper.EncodeNexusStateString(stateAsNexus, token, taxNum, charNum, firstTaxonRow, nameStr);
+	NCL_ASSERT(charNum < row.size());
+	row[charNum] = sc;
+	return true;
+	}
+
+NxsDiscreteStateCell NxsDiscreteDatatypeMapper::StateCodeForNexusPossibleMultiStateSet(
+  const char nexusSymbol,
+  const std::string &stateAsNexus,
+  NxsToken & token,	/* the token used to read from `in' */
+  const unsigned taxNum,		/* the taxon index, in range [0..`ntax') */
+  const unsigned charNum,		/* the character index, in range [0..`nChar') */
+  const NxsDiscreteStateRow * firstTaxonRow, const NxsString &nameStr)
+	{
+	NCL_ASSERT(stateAsNexus.length() > 0);
+	const char firstChar = stateAsNexus[0];
+	if (firstChar == '(' || firstChar == '{')
+		return StateCodeForNexusMultiStateSet(nexusSymbol, stateAsNexus, &token, taxNum, charNum, firstTaxonRow, nameStr);
+	if (stateAsNexus.length() > 1)
+		{
+		NxsString emsg;
+		emsg << "Expecting  {} or () around a multiple character state set.  Found " << stateAsNexus << " for taxon " << nameStr;
+		GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, &token, nameStr);
+		}
+
+	NxsDiscreteStateCell currState = StateCodeForNexusChar(firstChar, &token, taxNum, charNum, firstTaxonRow, nameStr);
+	cLookup[(int) nexusSymbol] = currState;
+	return currState;
+	}
+
+NxsDiscreteStateCell NxsDiscreteDatatypeMapper::StateCodeForNexusMultiStateSet(
+  const char nexusSymbol,
+  const std::string &stateAsNexus,
+  NxsToken * token,	/* the token used to read from `in' */
+  const unsigned taxNum,		/* the taxon index, in range [0..`ntax') */
+  const unsigned charNum,		/* the character index, in range [0..`nChar') */
+  const NxsDiscreteStateRow * firstTaxonRow,
+  const NxsString &nameStr)
+  	{
+	const char firstChar = stateAsNexus[0];
+	NxsString emsg;
+	const bool poly = (firstChar == '(');
+	if ((!poly) && firstChar != '{')
+		{
+		emsg << "Expecting a state symbol of set of symbols in () or  {} braces.  Found " << stateAsNexus;
+		GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, token, nameStr);
+		}
+	bool tildeFound = false;
+	NxsDiscreteStateCell prevState = NXS_INVALID_STATE_CODE;
+	char prevChar = firstChar;
+	std::string::const_iterator cIt = stateAsNexus.begin();
+	std::string::const_iterator endIt = stateAsNexus.end();
+	--endIt;
+	NCL_ASSERT((poly && *endIt == ')') || (!poly && *endIt == '}'));
+	std::set<NxsDiscreteStateCell> sset;
+	for (++cIt; cIt != endIt; ++cIt)
+		{
+		const char currChar = *cIt;
+		if ((strchr("\n\r \t", currChar) == NULL) && currChar != ',')
+			{
+			if (currChar == '~')
+				{
+				if (prevState < 0 || prevState >= (NxsDiscreteStateCell)nStates)
+					{
+					emsg << "A state range cannot start with " << prevChar;
+					GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, token, nameStr);
+					}
+				tildeFound = true;
+				}
+			else
+				{
+				// Add state symbol and record if it is the first or last one in case we encounter a tilde
+				NxsDiscreteStateCell currState;
+				if (tildeFound)
+					{
+					currState = PositionInSymbols(currChar);
+					if (currState == NXS_INVALID_STATE_CODE)
+						{
+						emsg << "A state range cannot end with " << currChar;
+						GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, token, nameStr);
+						}
+					if (currState < prevState)
+						{
+						emsg << prevChar << '~' << currChar << " is not a valid state range (the end state is a lower index than the start)";
+						GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, token, nameStr);
+						}
+					for (NxsDiscreteStateCell i = prevState; i <= currState; ++i)
+						sset.insert(i);
+					tildeFound = false;
+					}
+				else
+					{
+					currState = StateCodeForNexusChar(currChar, token, taxNum, charNum, firstTaxonRow, nameStr);
+					sset.insert(currState);
+					}
+				prevState = currState;
+				prevChar = currChar;
+				}
+			}
+		}
+	if (prevChar == '~')
+		{
+		emsg << "State range not terminated -- ending in ~" << *endIt;
+		GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, token, nameStr);
+		}
+	if (sset.empty())
+		{
+		emsg << "An illegal (empty) state range was found \"" << stateAsNexus << '\"';
+		GenerateNxsExceptionMatrixReading(emsg, taxNum, charNum, token, nameStr);
+		}
+	return StateCodeForStateSet(sset, poly, true, nexusSymbol);
+	}
+
+
+
+/*!
+	Called from HandleNextState to read in the next state when TOKENS was specified. Looks up state in character
+	states listed for the character to make sure it is a valid state, and returns state's value (0, 1, 2, ...). Note:
+	does NOT handle adding the state's value to matrix. Save the return value (call it k) and use the following command
+	to add it to matrix: matrix->AddState(i, j, k);
+*/
+bool NxsCharactersBlock::HandleNextTokenState(
+  NxsToken &token,
+  unsigned taxNum,
+  unsigned charNum,
+  NxsDiscreteStateRow & row,
+  NxsDiscreteDatatypeMapper &mapper,
+  const NxsDiscreteStateRow * firstTaxonRow,
+  const NxsString & nameStr)
+  {
+	if (interleaving)
+		token.SetLabileFlagBit(NxsToken::newlineIsToken);
+	token.GetNextToken();
+	if (interleaving && token.AtEOL())
+		return false;
+	if (token.GetTokenLength() ==  0)
+		GenerateNxsException(token, "Unexpected empty token encountered");
+
+	int polymorphism = token.Equals("(");
+	int uncertainty	 = token.Equals("{");
+	if (!uncertainty && !polymorphism)
+		{
+		row[charNum] = HandleTokenState(token, taxNum, charNum, mapper, firstTaxonRow, nameStr);
+		return true;
+		}
+
+	/*TODO - supporting this requires more bookeeping to allow the mapper to deal with
+	anonymous fundamental states  -- difficult because we don't know the number of symbols in TOKENS mode.*/
+	errormsg = "Currently polymorphism and ambiguity are not supported for matrices in TOKENS mode: ";
+	errormsg << token.GetToken() << " found while reading character " << charNum + 1 << " of taxon \"" << nameStr << '\"';
+	throw NxsException(errormsg, token);
+
+	bool tildeFound = false;
+	NxsDiscreteStateCell prevState = NXS_INVALID_STATE_CODE;
+	std::string prevToken = token.GetToken();
+	std::set<NxsDiscreteStateCell> sset;
+	for (;;)
+		{
+		// OPEN ISSUE: What about newlines if interleaving? I'm assuming
+		// that the newline must come between characters to count.
+
+		token.SetLabileFlagBit(NxsToken::tildeIsPunctuation);
+		token.GetNextToken();
+
+		if (token.Equals(","))
+			{
+			; /*Mesquite exports with , in state sets. We'll ignore the comma*/
+			}
+		if (polymorphism)
+			{
+			if (token.Equals(")"))
+				{
+				if (tildeFound)
+					mapper.GenerateNxsExceptionMatrixReading("Range of states still being specified when ')' encountered", taxNum, charNum, &token, nameStr);
+				break;
+				}
+			if (token.Equals("{"))
+				mapper.GenerateNxsExceptionMatrixReading("Illegal range of states '{' found inside '()'", taxNum, charNum, &token, nameStr);
+
+			}
+		else if (uncertainty)
+			{
+			if (token.Equals("}"))
+				{
+				if (tildeFound)
+					mapper.GenerateNxsExceptionMatrixReading("Range of states still being specified when '}' encountered", taxNum, charNum, &token, nameStr);
+				break;
+				}
+			if (token.Equals("("))
+				mapper.GenerateNxsExceptionMatrixReading("Illegal range of states '(' found inside '{}'", taxNum, charNum, &token, nameStr);
+			}
+		else if (token.Equals("~"))
+			{
+			if (prevState < 0 || prevState >= (NxsDiscreteStateCell)symbols.length())
+				{
+				errormsg.clear();
+				errormsg << "A state range cannot start with " << prevToken;
+				mapper.GenerateNxsExceptionMatrixReading(errormsg, taxNum, charNum, &token, nameStr);
+				}
+			tildeFound = true;
+			}
+		else
+			{
+			NxsDiscreteStateCell currState;
+			if (tildeFound)
+				{
+				currState = HandleTokenState(token, taxNum, charNum, mapper, firstTaxonRow, nameStr);
+				if (currState <= prevState)
+					{
+					errormsg = "Last state in specified range (";
+					errormsg << token.GetToken() << ") must be greater than the first";
+					mapper.GenerateNxsExceptionMatrixReading(errormsg, taxNum, charNum, &token, nameStr);
+					}
+				for (NxsDiscreteStateCell i = prevState; i <= currState; ++i)
+					sset.insert(i);
+				tildeFound = false;
+				}
+			else
+				{
+				// Add current state, then set first to that state's value
+				// State's value is its position within the list of states
+				// for that character
+				//
+				currState = HandleTokenState(token, taxNum, charNum, mapper, firstTaxonRow, nameStr);
+				sset.insert(currState);
+				}
+			prevState = currState;
+			prevToken = token.GetToken();
+			}
+		}
+
+	if (prevToken == "~")
+		{
+		errormsg.clear();
+		errormsg << "State range not terminated -- ending in ~" << token.GetToken();
+		mapper.GenerateNxsExceptionMatrixReading(errormsg, taxNum, charNum, &token, nameStr);
+		}
+	if (sset.empty())
+		{
+		errormsg.clear();
+		errormsg << "An illegal (empty) state range -- either  {} or ()";
+		mapper.GenerateNxsExceptionMatrixReading(errormsg, taxNum, charNum, &token, nameStr);
+		}
+	row[charNum] = mapper.StateCodeForStateSet(sset, (const bool)(polymorphism != 0), true, '\0');
+	return true;
+	}
+
+NxsDiscreteStateCell NxsCharactersBlock::HandleTokenState(
+  NxsToken &token,	/* the token used to read from `in' */
+  unsigned taxNum,
+  unsigned charNum,
+  NxsDiscreteDatatypeMapper &,
+  const NxsDiscreteStateRow * ,
+  const NxsString & nameStr)
+  	{
+	// Token may be one of the character states listed for character charNum in charStates
+	const std::string t = token.GetToken(respectingCase);
+	NxsStringVectorMap::const_iterator bagIter	= charStates.find(charNum);
+	/*
+	 if (bagIter == charStates.end())
+		return mapper.EncodeNexusStateString(t, token, taxNum, charNum, firstTaxonRow);
+	*/
+	NxsStringVector::const_iterator ci_begin	= bagIter->second.begin();
+	NxsStringVector::const_iterator ci_end		= bagIter->second.end();
+	NxsStringVector::const_iterator cit;
+	NxsDiscreteStateCell k = 0;
+	for (; ci_begin != ci_end; ++ci_begin, ++k)
+		{
+		if (respectingCase)
+			{
+			if (*ci_begin == t)
+				return k;
+			}
+		else
+			{
+			if (NxsString::case_insensitive_equals(t.c_str(), ci_begin->c_str()))
+				return k;
+			}
+		}
+	//return mapper.EncodeNexusStateString(t, token, taxNum, charNum, firstTaxonRow);
+	errormsg = "Unrecognized state ";
+	errormsg << t << " found while reading character " << charNum + 1 << " of taxon number " << taxNum + 1;
+	if (!nameStr.empty())
+		errormsg << "(name \"" << nameStr << "\")";
+	throw NxsException(errormsg, token);
+	}
+
+
+unsigned NxsCharactersBlock::GetMaxIndex() const
+	{
+	unsigned nct = GetNCharTotal();
+	if (nct == 0)
+		return UINT_MAX;
+	return nct - 1;
+	}
+
+/*!
+ Returns the number of indices that correspond to the label (and the number
+ of items that would be added to *inds if inds points to an empty set).
+*/
+unsigned NxsCharactersBlock::GetIndicesForLabel(const std::string &label, NxsUnsignedSet *inds) const
+	{
+	NxsString emsg;
+	const unsigned numb = CharLabelToNumber(label);
+	if (numb != 0)
+		{
+		if (inds)
+			inds->insert(numb - 1);
+		return 1;
+		}
+	if (!defCodonPosPartitionName.empty())
+		{
+		std::string t(label);
+		NxsString::to_upper(t);
+		std::string n;
+		if (t == "POS1")
+			n.assign("1");
+		else if (t == "POS2")
+			n.assign("2");
+		else if (t == "POS3")
+			n.assign("3");
+		else if (t == "NONCODING")
+			n.assign("N");
+		if (!n.empty())
+			{
+			NxsPartitionsByName::const_iterator pit = codonPosPartitions.find(defCodonPosPartitionName);
+			if (pit != codonPosPartitions.end())
+				{
+				const NxsPartition & p = pit->second;
+				for (NxsPartition::const_iterator s = p.begin(); s != p.end(); ++s)
+					{
+					if (NxsString::case_insensitive_equals(n.c_str(), s->first.c_str()))
+						{
+						unsigned nel = (unsigned)s->second.size();
+						if (inds)
+							inds->insert(s->second.begin(), s->second.end());
+						return nel;
+						}
+					}
+				}
+			}
+		}
+	if (NxsString::case_insensitive_equals(label.c_str(), "CONSTANT"))
+		{
+		NxsUnsignedSet c;
+		FindConstantCharacters(c);
+		if (inds)
+			inds->insert(c.begin(), c.end());
+		return (unsigned)c.size();
+		}
+	if (NxsString::case_insensitive_equals(label.c_str(), "GAPPED"))
+		{
+		NxsUnsignedSet c;
+		FindGappedCharacters(c);
+		if (inds)
+			inds->insert(c.begin(), c.end());
+		return (unsigned)c.size();
+		}
+	return GetIndicesFromSetOrAsNumber(label, inds, charSets, GetMaxIndex(), "character");
+	}
+
+/*!
+	Returns true if this set replaces an older definition.
+*/
+bool NxsCharactersBlock::AddNewIndexSet(const std::string &label, const NxsUnsignedSet & inds)
+	{
+	NxsString ls(label.c_str());
+	bool replaced = charSets.count(ls) > 0;
+	charSets[ls] = inds;
+	return replaced;
+	}
+
+/*!
+	Returns true if this set replaces an older definition.
+*/
+bool NxsCharactersBlock::AddNewPartition(const std::string &label, const NxsPartition & inds)
+	{
+	NxsString ls(label.c_str());
+	ls.ToUpper();
+	bool replaced = charPartitions.count(ls) > 0;
+	charPartitions[ls] = inds;
+	return replaced;
+	}
+
+/*!
+	Returns true if this set replaces an older definition.
+*/
+bool NxsCharactersBlock::AddNewCodonPosPartition(const std::string &label, const NxsPartition & inds, bool isDef)
+	{
+	NxsString ls(label.c_str());
+	ls.ToUpper();
+	bool replaced = codonPosPartitions.count(ls) > 0;
+	codonPosPartitions[ls] = inds;
+	if (isDef)
+		defCodonPosPartitionName = ls;
+	return replaced;
+	}
+
+/*!
+	Returns true if this set replaces an older definition.
+*/
+bool NxsCharactersBlock::AddNewExSet(const std::string &label, const NxsUnsignedSet & inds)
+	{
+	NxsString ls(label.c_str());
+	bool replaced = exSets.count(ls) > 0;
+	exSets[ls] = inds;
+	return replaced;
+	}
+
+/*! In v2.1 of the API, the NxsTaxaBlockAPI and NxsAssumptionsBlockAPI pointers
+	are usually NULL.  These block assignments are made during the parse.
+*/
+NxsCharactersBlock::NxsCharactersBlock(
+  NxsTaxaBlockAPI *tb,			/* the taxa block object to consult for taxon labels (can be 0L)*/
+  NxsAssumptionsBlockAPI *ab)	/* the assumptions block object to consult for exclusion sets (can be 0L) */
+  	:NxsTaxaBlockSurrogate(tb, NULL)
+	{
+	assumptionsBlock = ab;
+	NCL_BLOCKTYPE_ATTR_NAME = "CHARACTERS";
+	supportMixedDatatype = false;
+	convertAugmentedToMixed = false;
+	allowAugmentingOfSequenceSymbols = false;
+	writeInterleaveLen = -1;
+	Reset();
+	}
+/*! Excludes characters whose indices are contained in the set `exset'.
+	\returns number of characters actually excluded (some may have already been excluded).
+*/
+unsigned NxsCharactersBlock::ApplyExset(
+  NxsUnsignedSet &exset)	/* set of character indices to exclude in range [0..`nChar') */
+	{
+	excluded.clear();
+	set_union(eliminated.begin(), eliminated.end(), exset.begin(), exset.end(), inserter(excluded, excluded.begin()));
+	return (unsigned) excluded.size();
+	}
+
+/*! Includes characters whose indices are contained in the set `inset'.
+	\returns number of characters that are included after the operation
+*/
+unsigned NxsCharactersBlock::ApplyIncludeset(
+  NxsUnsignedSet &inset)	/* set of character indices to include in range [0..`nChar') */
+	{
+	NxsUnsignedSet inc(inset);
+	inc.erase(eliminated.begin(), eliminated.end());
+	excluded.erase(inc.begin(), inc.end());
+	return nChar - (unsigned) excluded.size();
+	}
+
+/*! Converts a character label to a 1-offset number corresponding to the character's position based on data from
+	the CharLabels NEXUS command.
+	If `s' is not a valid character label, returns the value 0.
+*/
+unsigned NxsCharactersBlock::CharLabelToNumber(
+  const std::string &inp) const	/* the character label to convert */
+	{
+	NxsString s(inp.c_str());
+	s.ToUpper();
+	std::map<std::string, unsigned>::const_iterator ltindIt = ucCharLabelToIndex.find(s);
+	if (ltindIt == ucCharLabelToIndex.end())
+		return 0;
+	return 1 + ltindIt->second;
+	}
+
+/*!
+	Transfers all data from `other' to this object, leaving `other' completely empty. Used to convert a NxsDataBlock
+	object to a NxsCharactersBlock object in programs where it is desirable to just have a NxsCharactersBlock for
+	storage but also allow users to enter the information in the form of the deprecated NxsDataBlock. This function
+	does not make a copy of such things as the data matrix, instead just transferring the pointer to that object from
+	other to this. This is whay it was named Consume rather than CopyFrom.
+*/
+void NxsCharactersBlock::Consume(
+  NxsCharactersBlock &other)	/* NxsCharactersBlock object from which to copy */
+	{
+	if (assumptionsBlock)
+		assumptionsBlock->SetCallback(NULL);
+	assumptionsBlock = other.assumptionsBlock;
+	other.assumptionsBlock = NULL;
+	if (assumptionsBlock)
+		assumptionsBlock->SetCallback(this);
+
+	nChar = other.nChar;
+	nTaxWithData = other.nTaxWithData;
+	matchchar = other.matchchar;
+	respectingCase = other.respectingCase;
+	transposing = other.transposing;
+	interleaving = other.interleaving;
+	tokens = other.tokens;
+	labels = other.labels;
+	missing = other.missing;
+	gap = other.gap;
+	gapMode = other.gapMode;
+	symbols = other.symbols;
+	userEquates = other.userEquates;
+	defaultEquates = other.defaultEquates;
+	discreteMatrix = other.discreteMatrix;
+	continuousMatrix = other.continuousMatrix;
+	eliminated = other.eliminated;
+	excluded = other.excluded;
+	ucCharLabelToIndex = other.ucCharLabelToIndex;
+	indToCharLabel = other.indToCharLabel;
+	charStates = other.charStates;
+	globalStateLabels = other.globalStateLabels;
+	items = other.items;
+	charSets = other.charSets;
+	charPartitions = other.charPartitions;
+	exSets = other.exSets;
+	datatype = other.datatype;
+	originalDatatype = other.originalDatatype;
+	datatypeReadFromFormat = other.datatypeReadFromFormat;
+	statesFormat = other.statesFormat;
+	datatypeMapperVec = other.datatypeMapperVec;
+	isEmpty = false;
+	isUserSupplied = other.isUserSupplied;
+	supportMixedDatatype = other.supportMixedDatatype;
+	convertAugmentedToMixed = other.convertAugmentedToMixed;
+	allowAugmentingOfSequenceSymbols = other.allowAugmentingOfSequenceSymbols;
+	writeInterleaveLen = other.writeInterleaveLen;
+	other.Reset();
+	transfMgr.Reset();
+	}
+
+
+void NxsCharactersBlock::WriteStatesForTaxonAsNexus(
+  std::ostream &out,			/* output stream on which to print matrix */
+  unsigned taxNum,
+  unsigned beginCharInd,
+  unsigned endCharInd) const	{
+  	NCL_ASSERT(endCharInd <= this->nChar);
+
+	if (datatype == continuous)
+		{
+		const ContinuousCharRow & row = GetContinuousMatrixRow(taxNum);
+		if (!row.empty())
+			{
+			NCL_ASSERT(endCharInd <= row.size());
+			for (unsigned charInd = beginCharInd; charInd < endCharInd; ++charInd)
+				{
+				out << ' ';
+				ShowStateLabels(out, taxNum, charInd, UINT_MAX);
+				}
+			}
+		}
+	else
+		{
+		const NxsDiscreteStateRow & row = GetDiscreteMatrixRow(taxNum);
+		const unsigned rs = (const unsigned)row.size();
+		NCL_ASSERT(endCharInd <= rs);
+		if (rs > 0)
+			{
+			if (this->datatype == NxsCharactersBlock::codon)
+				{
+				for (unsigned charInd = beginCharInd; charInd < endCharInd; ++charInd)
+					{
+					NxsDiscreteStateCell sc = row[charInd];
+					if (sc == NXS_GAP_STATE_CODE)
+						out << gap << gap << gap;
+					else if (sc >= 0 && sc < (NxsDiscreteStateCell) globalStateLabels.size())
+						out << globalStateLabels[sc];
+					else
+						out << missing << missing << missing;
+					}
+				}
+			else
+				{
+				const NxsDiscreteDatatypeMapper * dm = GetDatatypeMapperForChar(0);
+				if (dm == NULL)
+					throw NxsNCLAPIException("No DatatypeMapper in WriteStatesForTaxonAsNexus");
+				if (IsMixedType())
+					{
+
+					for (unsigned charInd = beginCharInd; charInd < endCharInd; ++charInd)
+						{
+						dm = GetDatatypeMapperForChar(charInd);
+						if (dm == NULL)
+							{
+							errormsg = "No DatatypeMapper for character ";
+							errormsg << charInd + 1 << " in WriteStatesForTaxonAsNexus";
+							throw NxsNCLAPIException(errormsg);
+							}
+						const NxsDiscreteStateCell c = row.at(charInd);
+						dm->WriteStateCodeAsNexusString(out, c);
+						}
+					}
+				else
+					{
+					if (tokens)
+						{
+						for (unsigned charInd = beginCharInd; charInd < endCharInd; ++charInd)
+							{
+							NxsDiscreteStateCell sc = row[charInd];
+							out << ' ';
+							if (sc == NXS_GAP_STATE_CODE)
+								out << gap;
+							else
+								{
+								NxsString sl = GetStateLabel(charInd, sc); /*v2.1to2.2 4 */
+								if (sl == " ")
+									{
+									errormsg = "Writing character state ";
+									errormsg << 1 + sc << " for character " << 1+charInd << ", but no appropriate chararcter label or symbol was found.";
+									throw NxsNCLAPIException(errormsg);
+									}
+								else
+									out  << NxsString::GetEscaped(sl);
+								}
+							}
+						}
+					else
+						{
+						std::vector<NxsDiscreteStateCell>::const_iterator endIt = row.begin() + beginCharInd;
+						std::vector<NxsDiscreteStateCell>::const_iterator begIt = endIt;
+						if (endCharInd == row.size())
+							endIt = row.end();
+						else
+							endIt += endCharInd - beginCharInd;
+						dm->WriteStateCodeRowAsNexus(out, begIt, endIt);
+						}
+					}
+				}
+			}
+		}
+	}
+
+
+/*!
+	Provides a dump of the contents of the `matrix' variable. Useful for testing whether data is being read as
+	expected. If marginText is NULL, matrix output is placed flush left. If each line of output should be prefaced with
+	a tab character, specify "\t" for `marginText'.
+*/
+void NxsCharactersBlock::DebugShowMatrix(
+  std::ostream &out,			/* output stream on which to print matrix */
+  bool ,	/* deprecated, matchchar no longer used for output */
+  const char *marginText) const /* for printing first on each line */
+	{
+	if (!taxa)
+		return;
+	const unsigned width = taxa->GetMaxTaxonLabelLength();
+	const unsigned ntt = GetNTaxTotal();
+	for (unsigned i = 0; i < ntt; i++)
+		{
+		bool skip = true;
+		if (datatype == continuous)
+			{
+			const ContinuousCharRow & row = GetContinuousMatrixRow(i);
+			skip = row.empty();
+			}
+		else
+			{
+			const NxsDiscreteStateRow & row = GetDiscreteMatrixRow(i);
+			skip = row.empty();
+			}
+		if (!skip)
+			{
+			if (marginText != NULL)
+				out << marginText;
+			const NxsString currTaxonLabel = taxa->GetTaxonLabel(i); /*v2.1to2.2 4 */
+			out << currTaxonLabel;
+			unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+			unsigned diff = width - currTaxonLabelLen;
+			std::string spacer(diff+5, ' ');
+			out << spacer;
+			WriteStatesForTaxonAsNexus(out, i, 0, nChar);
+			out << endl;
+			}
+		}
+	}
+
+unsigned NxsCharactersBlock::GetMaxObsNumStates(bool countMissingStates, bool onlyActiveChars) NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	unsigned maxN = 1;
+	for (unsigned j = 0; j < nChar; j++)
+		{
+		if (!onlyActiveChars || IsActiveChar(j))
+			maxN = std::max(maxN, GetObsNumStates(j, countMissingStates));
+		}
+	return maxN;
+	}
+
+/*!
+	Performs a count of the number of active characters.
+*/
+unsigned NxsCharactersBlock::GetNumActiveChar() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	unsigned num_active_char = 0;
+	for (unsigned i = 0; i < nChar; i++)
+		{
+		if (IsActiveChar(i))
+			num_active_char++;
+		}
+	return num_active_char;
+	}
+
+
+
+/* Returns label for character state `j' at character `i', if a label has been specified. If no label was specified,
+	returns string containing a single blank (i.e., " ").
+*/
+NxsString NxsCharactersBlock::GetStateLabelImpl( /*v2.1to2.2 4 */
+  unsigned i,	/* the locus in range [0..`nChar') */
+  unsigned j) const	/* the 0-offset index of the state of interest */
+	{
+	NxsString s = " ";
+	NxsStringVectorMap::const_iterator cib = charStates.find(i);
+	if (cib != charStates.end() && j < static_cast<unsigned>(cib->second.size()))
+		return cib->second[j];
+	if (!globalStateLabels.empty() && (j < globalStateLabels.size()))
+		return globalStateLabels[j];
+	return s;
+	}
+
+
+/*!
+	Returns true if `ch' can be found in the `symbols' array. The value of `respectingCase' is used to determine
+	whether or not the search should be case sensitive. Assumes `symbols' is non-NULL.
+*/
+bool NxsCharactersBlock::IsInSymbols(
+  char ch) NCL_COULD_BE_CONST /* the symbol character to search for */ /*v2.1to2.2 1 */
+	{
+	char char_in_question = (respectingCase ? ch : (char)toupper(ch));
+	for (std::string::const_iterator sIt = symbols.begin(); sIt != symbols.end(); ++sIt)
+		{
+		const char char_in_symbols = (respectingCase ? *sIt : (char)toupper(*sIt));
+		if (char_in_symbols == char_in_question)
+			return true;
+		}
+	return false;
+	}
+
+/*!
+	Called when CHARLABELS command needs to be parsed from within the DIMENSIONS block. Deals with everything after
+	the token CHARLABELS up to and including the semicolon that terminates the CHARLABELS command. If an ELIMINATE
+	command has been processed, labels for eliminated characters will not be stored.
+*/
+void NxsCharactersBlock::HandleCharlabels(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	ucCharLabelToIndex.clear();
+	indToCharLabel.clear();
+	unsigned ind = 0;
+	for (;;)
+		{
+		token.GetNextToken();
+		if (token.Equals(";"))
+			break;
+		else
+			{
+			if (ind >= nChar)
+				GenerateNxsException(token, "Number of character labels exceeds NCHAR specified in DIMENSIONS command");
+			NxsString t = token.GetToken();
+			if (t != " ")
+				{
+				indToCharLabel[ind] = t;
+				t.ToUpper();
+				ucCharLabelToIndex[t] = ind;
+				}
+			ind++;
+			}
+		}
+	}
+
+/*!
+	Called when CHARSTATELABELS command needs to be parsed from within the CHARACTERS block. Deals with everything
+	after the token CHARSTATELABELS up to and including the semicolon that terminates the CHARSTATELABELS command.
+	CharLabels data structures  will store labels only for characters that have not been eliminated, and likewise for
+	`charStates'. Specifically, `charStates[0]' refers to the vector of character state labels for the first
+	non-eliminated character.
+*/
+void NxsCharactersBlock::HandleCharstatelabels(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	unsigned currChar = 0;
+	bool semicolonFoundInInnerLoop = false;
+	bool tokenAlreadyRead = false;
+	bool save = true;
+
+	charStates.clear();
+	ucCharLabelToIndex.clear();
+	indToCharLabel.clear();
+
+	for (;;)
+		{
+		save = true;
+
+		if (semicolonFoundInInnerLoop)
+			break;
+
+		if (tokenAlreadyRead)
+			tokenAlreadyRead = false;
+		else
+			token.GetNextToken();
+
+		if (token.Equals(";"))
+			break;
+
+		// Token should be the character number; create a new association
+		//
+		int sn = -1;
+        try {
+            sn = token.GetToken().ConvertToInt();
+            }
+        catch (NxsString::NxsX_NotANumber &x)
+            {
+            }
+		unsigned n = (unsigned)sn;
+		if (sn < 1 || n > nChar || n <= currChar)
+			{
+			errormsg = "Invalid character number (";
+			errormsg += token.GetToken();
+			errormsg += ") found in CHARSTATELABELS command (either out of range or not interpretable as an integer)";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+
+		currChar = n;
+
+		token.GetNextToken();
+
+		// Token should be the character label or / if there is no label
+		//	' ' is a placeholder for no label.
+		//
+		if (save)
+			{
+			NxsString t = token.GetToken();
+			if (t != " " && !token.Equals("/"))
+				{
+				indToCharLabel[currChar - 1] = t;
+				t.ToUpper();
+				ucCharLabelToIndex[t] = currChar - 1;
+				}
+			}
+		if (!token.Equals("/"))
+			token.GetNextToken();
+
+		// Token should be a slash character if state labels were provided for this character; otherwise,
+		// token should be one of the following:
+		// 1) the comma separating information for different characters, in which case we read in the
+		//	  next token (which should be the next character number)
+		// 2) the semicolon indicating the end of the command
+		//
+		if (!token.Equals("/"))
+			{
+			if (!token.Equals(",") && !token.Equals(";"))
+				{
+				errormsg = "Expecting a comma or semicolon here, but found \"";
+				errormsg += token.GetToken();
+				errormsg += "\" instead";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			if (token.Equals(","))
+				token.GetNextToken();
+			tokenAlreadyRead = true;
+			continue;
+			}
+
+		// Now create a new association for the character states list
+
+		for (;;)
+			{
+			token.GetNextToken();
+
+			if (token.Equals(";"))
+				{
+				semicolonFoundInInnerLoop = true;
+				break;
+				}
+
+			if (token.Equals(","))
+				break;
+
+			if (save)
+				{
+				if (datatype == continuous)
+					GenerateNxsException(token, "State Labels cannot be specified when the datatype is continuous");
+
+				// Token should be a character state label; add it to the list
+				NxsString cslabel = token.GetToken();
+				charStates[n - 1].push_back(cslabel);
+				}
+
+			} // inner for (;;) loop (grabbing state labels for character n)
+		} // outer for (;;) loop
+	}
+
+/*!
+	Called when DIMENSIONS command needs to be parsed from within the CHARACTERS block. Deals with everything after
+	the token DIMENSIONS up to and including the semicolon that terminates the DIMENSIONs command. `newtaxaLabel',
+	`ntaxLabel' and `ncharLabel' are simply "NEWTAXA", "NTAX" and "NCHAR" for this class, but may be different for
+	derived classes that use `newtaxa', `ntax' and `nChar' for other things (e.g., ntax is number of populations in
+	an ALLELES block)
+*/
+void NxsCharactersBlock::HandleDimensions(
+  NxsToken &token,			/* the token used to read from `in' */
+  NxsString newtaxaLabel,	/* the label used in data file for `newtaxa' */
+  NxsString ntaxLabel,		/* the label used in data file for `ntax' */
+  NxsString ncharLabel)		/* the label used in data file for `nChar' */
+	{
+	nChar = 0;
+	unsigned ntaxRead = 0;
+	for (;;)
+		{
+		token.GetNextToken();
+		if (token.Equals(newtaxaLabel))
+			newtaxa = true;
+		else if (token.Equals(ntaxLabel))
+			{
+			DemandEquals(token, "after NTAX in DIMENSIONS command");
+			ntaxRead = DemandPositiveInt(token, ntaxLabel.c_str());
+			}
+		else if (token.Equals(ncharLabel))
+			{
+			DemandEquals(token, "in DIMENSIONS command");
+			nChar = DemandPositiveInt(token, ncharLabel.c_str());
+			}
+		else if (token.Equals(";"))
+			break;
+		}
+
+	if (nChar == 0)
+		{
+		errormsg = "DIMENSIONS command must have an NCHAR subcommand .";
+		throw NxsException(errormsg, token);
+		}
+	if (newtaxa)
+		{
+		if (ntaxRead == 0)
+			{
+			errormsg = "DIMENSIONS command must have an NTAX subcommand when the NEWTAXA option is in effect.";
+			throw NxsException(errormsg, token);
+			}
+		AssureTaxaBlock(createImpliedBlock, token, "Dimensions");
+		if (!createImpliedBlock)
+			{
+			taxa->Reset();
+			if (nexusReader)
+				nexusReader->RemoveBlockFromUsedBlockList(taxa);
+			}
+		taxa->SetNtax(ntaxRead);
+		nTaxWithData = ntaxRead;
+		}
+	else
+		{
+		AssureTaxaBlock(false, token, "Dimensions");
+		const unsigned ntaxinblock = taxa->GetNTax();
+		if (ntaxinblock == 0)
+			{
+			errormsg = "A TAXA block must be read before character data, or the DIMENSIONS command must use the NEWTAXA.";
+			throw NxsException(errormsg, token);
+			}
+
+		if (ntaxinblock < ntaxRead)
+			{
+			errormsg = ntaxLabel;
+			errormsg += " in ";
+			errormsg += NCL_BLOCKTYPE_ATTR_NAME;
+			errormsg += " block must be less than or equal to NTAX in TAXA block\nNote: one circumstance that can cause this error is \nforgetting to specify ";
+			errormsg += ntaxLabel;
+			errormsg += " in DIMENSIONS command when \na TAXA block has not been provided";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		nTaxWithData = (ntaxRead == 0 ? ntaxinblock : ntaxRead);
+		}
+	}
+
+/*!
+	Called when ELIMINATE command needs to be parsed from within the CHARACTERS block. Deals with everything after the
+	token ELIMINATE up to and including the semicolon that terminates the ELIMINATE command. Any character numbers
+	or ranges of character numbers specified are stored in the NxsUnsignedSet `eliminated', which remains empty until
+	an ELIMINATE command is processed. Note that like all sets the character ranges are adjusted so that their offset
+	is 0. For example, given "eliminate 4-7;" in the data file, the eliminate array would contain the values 3, 4, 5
+	and 6 (not 4, 5, 6 and 7). It is assumed that the ELIMINATE command comes before character labels and/or character
+	state labels have been specified; an error message is generated if the user attempts to use ELIMINATE after a
+	CHARLABELS, CHARSTATELABELS, or STATELABELS command.
+*/
+void NxsCharactersBlock::HandleEliminate(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	if (!eliminated.empty() && nexusReader)
+		nexusReader->NexusWarnToken("Only one ELIMINATE command should be used in a CHARACTERS or DATA block (it must appear before the MATRIX command).\n   New character eliminations will be added to the previous eliminated characters (the previously eliminated characters will continue to be excluded).", NxsReader::UNCOMMON_SYNTAX_WARNING, token);
+	token.GetNextToken();
+	NxsSetReader::ReadSetDefinition(token, *this, "Character", "Eliminate", &eliminated);
+	NCL_ASSERT(eliminated.size() <= nChar);
+	for (NxsUnsignedSet::const_iterator elIt = eliminated.begin(); elIt != eliminated.end(); ++elIt)
+		excluded.insert(*elIt);
+	}
+
+
+
+/*!
+	Called from HandleMatrix function to read in a standard (i.e., non-transposed) matrix. Interleaving, if
+	applicable, is dealt with herein.
+*/
+void NxsCharactersBlock::HandleStdMatrix(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	NCL_ASSERT(taxa != NULL);
+	unsigned indOfTaxInCommand;
+	unsigned indOfTaxInMemory;
+	unsigned currChar = 0;
+	unsigned firstChar = 0;
+	unsigned lastChar = nChar;
+	unsigned nextFirst = 0;
+	unsigned page = 0;
+	const bool continuousData =  (datatype == NxsCharactersBlock::continuous);
+	const unsigned ntlabels = taxa->GetNumTaxonLabels();
+	errormsg.clear();
+	bool taxaBlockNeedsLabels = (ntlabels == 0);
+	if (!taxaBlockNeedsLabels && ntlabels < nTaxWithData)
+		{
+		errormsg << "Not enough taxlabels are known to read characters for " << nTaxWithData << " taxa in the Matrix command.";
+		throw NxsException(errormsg, token);
+		}
+	ContinuousCharRow emptyContRow;
+	NxsDiscreteStateRow emptyDiscRow;
+	ContinuousCharRow *contRowPtr = NULL;
+	NxsDiscreteStateRow *discRowPtr = NULL;
+	ContinuousCharRow *ftContRowPtr = NULL;
+	NxsDiscreteStateRow *ftDiscRowPtr = NULL;
+	const bool isContinuous = (datatype == NxsCharactersBlock::continuous);
+	if (isContinuous)
+		emptyContRow.resize(nChar);
+	else
+		emptyDiscRow.assign(nChar, NXS_INVALID_STATE_CODE);
+	std::vector<unsigned> toInMem(nTaxWithData, UINT_MAX);
+	std::vector<unsigned> nCharsRead(nTaxWithData, 0);
+
+	unsigned numSigInts = NxsReader::getNumSignalIntsCaught();
+	const bool checkingSignals = NxsReader::getNCLCatchesSignals();
+	const unsigned MAX_NUM_CHARS_BETWEEN_SIGNAL_CHECKS = 1000;
+	for (; currChar < nChar; page++)
+		{
+		for (indOfTaxInCommand = 0; indOfTaxInCommand < nTaxWithData ; indOfTaxInCommand++)
+			{
+			unsigned numCharsSinceLastSignalCheck = 0;
+			if (checkingSignals && NxsReader::getNumSignalIntsCaught() != numSigInts)
+				{
+				if (datatype == NxsCharactersBlock::continuous)
+					continuousMatrix.clear();
+				else
+					discreteMatrix.clear();
+				throw NxsSignalCanceledParseException("Reading Characters Block");
+				}
+			NxsString nameStr;
+			if (labels)
+				{
+				token.GetNextToken();
+				nameStr = token.GetToken();
+				if (taxaBlockNeedsLabels)
+					{
+					if (taxa->IsAlreadyDefined(nameStr))
+						{
+						errormsg << "Data for this taxon (" << nameStr << ") has already been saved";
+						throw NxsException(errormsg, token);
+						}
+					try {
+						indOfTaxInMemory = taxa->AddTaxonLabel(nameStr);
+						}
+					catch (NxsException &x)
+						{
+						if (nameStr == ";")
+							{
+							errormsg << "Unexpected ; after only " << indOfTaxInCommand << " taxa were read (expecting characters for " << nTaxWithData << " taxa).";
+							throw NxsException(errormsg, token);
+							}
+						x.addPositionInfo(token);
+						throw x;
+						}
+					}
+				else
+					{
+					unsigned numOfTaxInMemory = taxa->TaxLabelToNumber(nameStr);
+					if (numOfTaxInMemory == 0)
+						{
+						if (token.Equals(";"))
+							{
+							if (currChar != nChar)
+								errormsg << "Unexpected ; (after only " << currChar << " characters were read)";
+							else
+								errormsg << "Unexpected ; (after characters were read for only " << indOfTaxInCommand << "out of " << nTaxWithData << " taxa)";
+							}
+						else
+							errormsg << "Could not find taxon named \"" << nameStr << "\" among stored taxon labels";
+						if (currChar > 0)
+							errormsg << "\n   Expecting data for taxon \"" << taxa->GetTaxonLabel(toInMem[indOfTaxInCommand]) << "\"";
+						throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+						}
+					indOfTaxInMemory = numOfTaxInMemory - 1;
+					}
+				}
+			else
+				{
+				indOfTaxInMemory = indOfTaxInCommand;
+				nameStr << (indOfTaxInMemory + 1);
+				}
+			if (page == 0)
+				{
+				if (isContinuous)
+					{
+					NCL_ASSERT(indOfTaxInMemory < continuousMatrix.size());
+					continuousMatrix[indOfTaxInMemory] = emptyContRow;
+					}
+				else
+					{
+					NCL_ASSERT(indOfTaxInMemory < discreteMatrix.size());
+					discreteMatrix[indOfTaxInMemory] = emptyDiscRow;
+					}
+				if (toInMem[indOfTaxInCommand] != UINT_MAX)
+					{
+					errormsg << "Characters for taxon \"" << nameStr << "\" (number " << indOfTaxInMemory + 1 << "and \"" << taxa->GetTaxonLabel(indOfTaxInMemory) << "\" according to the taxa block) have already been stored";
+					throw NxsException(errormsg, token);
+					}
+				toInMem[indOfTaxInCommand] = indOfTaxInMemory;
+				}
+			else
+				{
+				if (toInMem[indOfTaxInCommand] != indOfTaxInMemory)
+					{
+					errormsg << "Ordering of taxa must be identical to that in first interleave page. Taxon \"" << nameStr << "\" was not expected.";
+					throw NxsException(errormsg, token);
+					}
+				}
+
+			if (firstChar > 0 && nCharsRead[indOfTaxInCommand] >= firstChar)
+				{
+				errormsg << "Data for this taxon (" << nameStr << ") have already been saved";
+				throw NxsException(errormsg, token);
+				}
+			if (isContinuous)
+				{
+				contRowPtr = &continuousMatrix[indOfTaxInMemory];
+				if (ftDiscRowPtr == NULL)
+					ftContRowPtr = contRowPtr;
+				}
+			else
+				{
+				discRowPtr = &discreteMatrix[indOfTaxInMemory];
+				if (ftDiscRowPtr == NULL)
+					ftDiscRowPtr = discRowPtr;
+				}
+
+			//******************************************************
+			//******** Beginning of loop through characters ********
+			//******************************************************
+			bool atEOL = false;
+			for (currChar = firstChar; currChar < lastChar; currChar++)
+				{
+				if (checkingSignals)
+					{
+					if (numCharsSinceLastSignalCheck >= MAX_NUM_CHARS_BETWEEN_SIGNAL_CHECKS)
+						{
+						if (NxsReader::getNumSignalIntsCaught() != numSigInts)
+							{
+							if (datatype == NxsCharactersBlock::continuous)
+								continuousMatrix.clear();
+							else
+								discreteMatrix.clear();
+							throw NxsSignalCanceledParseException("Reading Characters Block");
+							}
+						numCharsSinceLastSignalCheck = 0;
+						}
+					else
+						numCharsSinceLastSignalCheck++;
+					}
+
+				NxsDiscreteDatatypeMapper * currMapper =  GetMutableDatatypeMapperForChar(currChar);
+				// atEOL will be false only if a newline character is encountered before character j processed
+				if (continuousData)
+					atEOL = HandleNextContinuousState(token, indOfTaxInMemory, currChar, *contRowPtr, nameStr);
+				else
+					{
+					NCL_ASSERT(currMapper);
+					if (tokens)
+						atEOL = HandleNextTokenState(token, indOfTaxInMemory, currChar, *discRowPtr, *currMapper, ftDiscRowPtr, nameStr);
+					else
+						atEOL = HandleNextDiscreteState(token, indOfTaxInMemory, currChar, *discRowPtr, *currMapper, ftDiscRowPtr, nameStr);
+					}
+				if (interleaving && !atEOL)
+					{
+					if (lastChar < nChar && currChar != lastChar)
+						{
+						errormsg << "Each line within an interleave page must comprise the same number of characters.  Error reading taxon \"" << nameStr << '\"';
+						throw NxsException(errormsg, token);
+						}
+
+					// currChar should be firstChar in next go around
+					nextFirst = currChar;
+
+					// Set lastChar to currChar so that we can check to make sure the remaining lines
+					// in this interleave page end at the same place
+					lastChar = currChar;
+					}
+				}
+			if (lastChar > 0)
+				nCharsRead[indOfTaxInCommand] = lastChar - 1;
+			if (lastChar < nChar && indOfTaxInCommand > 0)
+				{
+				token.SetLabileFlagBit(NxsToken::newlineIsToken);
+				token.GetNextToken();
+				if (!token.AtEOL())
+					{
+					errormsg << "Each line within an interleave page must comprise the same number of characters\n. Expecting the end of a line, but found " << token.GetToken() << " when reading data for taxon \"" << nameStr << '\"';
+					throw NxsException(errormsg, token);
+					}
+				}
+			else
+				{
+				const char nextch = token.PeekAtNextChar();
+				if (indOfTaxInCommand > 0 && (!atEOL) && (strchr(";[\n\r \t", nextch) == NULL) && nexusReader)
+					{
+					errormsg << "Expecting a whitespace character at the end of the characters for taxon \""<< nameStr << "\" but found " << nextch;
+					nexusReader->NexusWarnToken(errormsg, NxsReader::UNCOMMON_SYNTAX_WARNING, token);
+					errormsg.clear();
+					}
+				}
+			}
+		firstChar = nextFirst;
+		lastChar = nChar;
+		taxaBlockNeedsLabels = false; /* taxaBlockNeedsLabels can only be true on the first page */
+		}
+	}
+
+/*!
+	Called from HandleMatrix function to read in a transposed matrix. Interleaving, if applicable, is dealt with herein.
+*/
+void NxsCharactersBlock::HandleTransposedMatrix(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	NCL_ASSERT(taxa);
+	unsigned currTaxon = 0;
+	unsigned firstTaxon = 0;
+	unsigned lastTaxon = nTaxWithData;
+	unsigned nextFirst = 0;
+	unsigned page = 0;
+	const bool continuousData =  (datatype == NxsCharactersBlock::continuous);
+	unsigned indOfCharInCommand, indOfCharInMemory;
+	const bool isContinuous = (datatype == NxsCharactersBlock::continuous);
+
+	if (isContinuous)
+		{
+		ContinuousCharRow emptyContRow(nChar);
+		for (unsigned i = 0; i < nTaxWithData; ++ i)
+			continuousMatrix[i] = emptyContRow;
+		}
+	else
+		{
+		NxsDiscreteStateRow emptyDiscRow(nChar, NXS_INVALID_STATE_CODE);
+		for (unsigned i = 0; i < nTaxWithData; ++ i)
+			discreteMatrix[i] = emptyDiscRow;
+		}
+	vector<unsigned> toInMem(nChar, UINT_MAX);
+	vector<unsigned> nTaxRead(nChar, 0);
+	bool needsCharLabels = indToCharLabel.empty();
+	for (;;	page++)
+		{
+		for (indOfCharInCommand = 0; indOfCharInCommand < nChar; indOfCharInCommand++)
+			{
+			NxsString rawToken;
+			if (labels)
+				{
+				token.GetNextToken();
+				if (needsCharLabels)
+					{
+					rawToken = token.GetToken();
+					NxsString s = rawToken;
+					s.ToUpper();
+					if (ucCharLabelToIndex.count(s) > 0)
+						{
+						errormsg << "Data for this character (" << token.GetToken() << ") has already been saved";
+						throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+						}
+					ucCharLabelToIndex[s] = indOfCharInCommand;
+					indToCharLabel[indOfCharInCommand] = rawToken;
+					indOfCharInMemory = indOfCharInCommand;
+					}
+				else // either not first interleaved page or character labels not previously defined
+					{
+					rawToken = token.GetToken();
+					NxsString s = rawToken;
+					s.ToUpper();
+					LabelToIndexMap::const_iterator iter = ucCharLabelToIndex.find(s);
+					if (iter == ucCharLabelToIndex.end())
+						{
+						errormsg << "Could not find character named " << token.GetToken() <<  " among stored character labels";
+						throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+						}
+					indOfCharInMemory = iter->second;
+					}
+				}
+			else
+				indOfCharInMemory = indOfCharInCommand;
+
+			if (page == 0)
+				{
+				if (toInMem[indOfCharInCommand] != UINT_MAX)
+					{
+					errormsg << "States for character " << indOfCharInCommand;
+					if (!rawToken.empty())
+						errormsg << " (" << rawToken << ") ";
+					errormsg << "have already been stored";
+					throw NxsException(errormsg, token);
+					}
+				toInMem[indOfCharInCommand] = indOfCharInMemory;
+				}
+			else
+				{
+				if (toInMem[indOfCharInCommand] != indOfCharInMemory)
+					{
+					errormsg << "The order of characters must be in the same order in each page of the interleaved matrix. Character " << rawToken << " was unexpected.";
+					throw NxsException(errormsg, token);
+					}
+				}
+			if (firstTaxon > 0 && nTaxRead[indOfCharInCommand] >= firstTaxon)
+				{
+				errormsg << "Data for this character ";
+				if (!rawToken.empty())
+					errormsg << '(' << rawToken << ") ";
+				errormsg << "has already been saved";
+				throw NxsException(errormsg, token);
+				}
+
+			NxsDiscreteDatatypeMapper * currMapper =  GetMutableDatatypeMapperForChar(indOfCharInMemory);
+
+			for (currTaxon = firstTaxon; currTaxon < lastTaxon; currTaxon++)
+				{
+				bool atEOL = false;
+				NxsString nameStr;
+				nameStr << 1+currTaxon;
+				if (continuousData)
+					{
+					ContinuousCharRow *contRowPtr = &continuousMatrix[currTaxon];
+					atEOL = HandleNextContinuousState(token, currTaxon, indOfCharInMemory, *contRowPtr, nameStr);
+					}
+				else
+					{
+					NxsDiscreteStateRow *discRowPtr = &discreteMatrix[currTaxon];
+					if (tokens)
+						atEOL = HandleNextTokenState(token,  currTaxon, indOfCharInMemory, *discRowPtr, *currMapper, NULL, nameStr);
+					else
+						atEOL = HandleNextDiscreteState(token, currTaxon, indOfCharInMemory, *discRowPtr, *currMapper, NULL, nameStr);
+					}
+				if (interleaving && !atEOL)
+					{
+					if (lastTaxon < nTaxWithData && currTaxon != lastTaxon)
+						GenerateNxsException(token, "Each line within an interleave page must comprise the same number of taxa");
+
+					// currTaxon should be firstChar in next go around
+					nextFirst = currTaxon;
+
+					// Set lastTaxon to currTaxon so that we can check to make sure the
+					// remaining lines in this interleave page end at the same place
+					lastTaxon = currTaxon;
+					}
+				}
+			if (currTaxon > 0)
+				nTaxRead[indOfCharInCommand] = currTaxon - 1;
+			if (lastTaxon < nTaxWithData && indOfCharInCommand > 0)
+				{
+				token.SetLabileFlagBit(NxsToken::newlineIsToken);
+				token.GetNextToken();
+				if (!token.AtEOL())
+					{
+					errormsg = "Each line within an interleave page must comprise the same number of taxa\n.";
+					errormsg << "Expecting the end of a line, but found " << token.GetToken();
+					throw NxsException(errormsg, token);
+					}
+				}
+			}
+		firstTaxon = nextFirst;
+		lastTaxon = nTaxWithData;
+		if (currTaxon == nTaxWithData)
+			break;
+		needsCharLabels = false;
+		}
+	}
+
+/*!
+	Called when MATRIX command needs to be parsed from within the CHARACTERS block. Deals with everything after the
+	token MATRIX up to and including the semicolon that terminates the MATRIX command.
+*/
+void NxsCharactersBlock::HandleMatrix(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	const NxsPartition dtParts;
+	const std::vector<DataTypesEnum> dtv;
+	if (datatypeMapperVec.empty())
+		CreateDatatypeMapperObjects(dtParts, dtv);
+	if (taxa == NULL)
+		AssureTaxaBlock(false, token, "Matrix");
+
+	if (tokens && GetDataType() == standard)
+		{
+		/* we can run into trouble here because the number of states can be larger than the
+		symbols list in the NxsDiscreteDatatypeMapper object (because CharState labels can be
+		used in a matrix, and symbols don't have to be introduced for each character).
+
+		We deal with that here, by introducing \0 symbols
+		*/
+		const unsigned nStatesWSymbols = (const unsigned)symbols.length();
+		unsigned nStatesTotal = nStatesWSymbols;
+		for (NxsStringVectorMap::const_iterator cib = this->charStates.begin(); cib != this->charStates.end(); ++cib)
+			{
+			const NxsStringVector & stateLabelsVec = cib->second;
+			const unsigned ns = (unsigned)stateLabelsVec.size();
+			if (ns > nStatesTotal)
+				nStatesTotal = ns;
+			}
+		if (nStatesTotal > nStatesWSymbols)
+			{
+			symbols.append(nStatesTotal-nStatesWSymbols, '\0');
+			CreateDatatypeMapperObjects(dtParts, dtv);
+			}
+		}
+	const unsigned ntax = taxa->GetNTax();
+	if (ntax == 0)
+		{
+		errormsg = "Must precede ";
+		errormsg << NCL_BLOCKTYPE_ATTR_NAME << " block with a TAXA block or specify NEWTAXA and NTAX in the DIMENSIONS command";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	discreteMatrix.clear();
+	continuousMatrix.clear();
+
+	if (datatype == NxsCharactersBlock::continuous)
+		{
+		continuousMatrix.clear();
+		continuousMatrix.resize(ntax);
+		}
+	else
+		{
+		discreteMatrix.clear();
+		discreteMatrix.resize(ntax);
+		}
+	if (IsMixedType())
+		{
+		if (transposing)
+			throw NxsUnimplementedException("Reading of transposed, mixed datatype matrices will probably never be supported by NCL");
+		/*	HandleMixedDatatypeMatrix(token); */
+		}
+	if (transposing)
+		HandleTransposedMatrix(token);
+	else
+		HandleStdMatrix(token);
+	DemandEndSemicolon(token, "MATRIX");
+	if (assumptionsBlock)
+		assumptionsBlock->SetCallback(this);
+	if (convertAugmentedToMixed)
+		AugmentedSymbolsToMixed();
+	}
+
+/*!
+	Called when STATELABELS command needs to be parsed from within the DIMENSIONS block. Deals with everything after
+	the token STATELABELS up to and including the semicolon that terminates the STATELABELS command. Note that the
+	numbers of states are shifted back one before being stored so that the character numbers in the NxsStringVectorMap
+	objects are 0-offset rather than being 1-offset as in the NxsReader data file.
+*/
+void NxsCharactersBlock::HandleStatelabels(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	if (datatype == continuous)
+		GenerateNxsException(token, "STATELABELS cannot be specified when the datatype is continuous");
+	charStates.clear();
+	for (;;)
+		{
+		token.GetNextToken();
+		if (token.Equals(";"))
+			break;
+        int n = -1;
+        try {
+            n = token.GetToken().ConvertToInt();
+            }
+        catch (NxsString::NxsX_NotANumber &x)
+            {
+            }
+		if (n < 1 || n > (int)nChar)
+			{
+			errormsg = "Invalid character number (";
+			errormsg << token.GetToken() << ") found in STATELABELS command (either out of range or not interpretable as an integer)";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		NxsStringVector & v = charStates[n - 1];
+		for (;;)
+			{
+			token.GetNextToken();
+			if (token.Equals(";") || token.Equals(","))
+				break;
+			v.push_back(token.GetToken());
+			}
+		}
+	}
+
+/*!
+	This function provides the ability to read everything following the block name (which is read by the NxsReader
+	object) to the END or ENDBLOCK statement. Characters are read from the input stream `in'. Overrides the abstract
+	virtual function in the base class.
+*/
+void NxsCharactersBlock::Read(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	isEmpty = false;
+	isUserSupplied = true;
+
+	NxsString s;
+	s = "BEGIN ";
+	s += NCL_BLOCKTYPE_ATTR_NAME;
+	DemandEndSemicolon(token, s.c_str());
+	nTaxWithData = 0;
+
+	for (;;)
+		{
+		token.GetNextToken();
+		NxsBlock::NxsCommandResult res = HandleBasicBlockCommands(token);
+		if (res == NxsBlock::NxsCommandResult(STOP_PARSING_BLOCK))
+			{
+			if (discreteMatrix.empty() && continuousMatrix.empty())
+				{
+				errormsg.clear();
+				errormsg << "\nA " << NCL_BLOCKTYPE_ATTR_NAME << " block must contain a Matrix command";
+				throw NxsException(errormsg, token);
+				}
+			return;
+			}
+		if (res != NxsBlock::NxsCommandResult(HANDLED_COMMAND))
+			{
+			if (token.Equals("DIMENSIONS"))
+				HandleDimensions(token, "NEWTAXA", "NTAX", "NCHAR");
+			else if (token.Equals("FORMAT"))
+				HandleFormat(token);
+			else if (token.Equals("ELIMINATE"))
+				HandleEliminate(token);
+			else if (token.Equals("TAXLABELS"))
+				HandleTaxLabels(token);
+			else if (token.Equals("CHARSTATELABELS"))
+				HandleCharstatelabels(token);
+			else if (token.Equals("CHARLABELS"))
+				HandleCharlabels(token);
+			else if (token.Equals("STATELABELS"))
+				HandleStatelabels(token);
+			else if (token.Equals("MATRIX"))
+				HandleMatrix(token);
+			else
+				SkipCommand(token);
+			}
+		}
+	}
+
+/*!
+	This function outputs a brief report of the contents of this CHARACTERS block. Overrides the abstract virtual
+	function in the base class.
+*/
+void NxsCharactersBlock::Report(
+  std::ostream &out) NCL_COULD_BE_CONST  /* the output stream to which to write the report */ /*v2.1to2.2 1 */
+	{
+	out << '\n' << NCL_BLOCKTYPE_ATTR_NAME << " block contains ";
+	if (nTaxWithData == 0)
+		out << "no taxa";
+	else if (nTaxWithData == 1)
+		out << "one taxon";
+	else
+		out << nTaxWithData << " taxa";
+	out << " and ";
+	if (nChar == 0)
+		out << "no characters";
+	else if (nChar == 1)
+		out << "one character";
+	else
+		out << nChar << " characters";
+	out << endl;
+
+	out << "  Data type is \"" << this->GetDatatypeName() << "\"" << endl;
+
+	if (respectingCase)
+		out << "  Respecting case" << endl;
+	else
+		out << "  Ignoring case" << endl;
+
+	if (tokens)
+		out << "  Multicharacter tokens allowed in data matrix" << endl;
+	else
+		out << "  Data matrix entries are expected to be single symbols" << endl;
+
+	if (labels && transposing)
+		out << "  Character labels are expected on left side of matrix" << endl;
+	else if (labels && !transposing)
+		out << "  Taxon labels are expected on left side of matrix" << endl;
+	else
+		out << "  No labels are expected on left side of matrix" << endl;
+
+	if (!indToCharLabel.empty())
+		{
+		out << "  Character and character state labels:" << endl;
+		for (unsigned k = 0; k < nChar; k++)
+			{
+			const std::map<unsigned, std::string>::const_iterator toLit = indToCharLabel.find(k);
+			const unsigned kNum = 1 + k;
+			if (toLit == indToCharLabel.end())
+				out << "    " << kNum << "    (no label provided for this character)" << endl;
+			else
+				out << "    " << kNum << "    " << toLit->second << endl;
+
+			// Output state labels if any are defined for this character
+			//
+			NxsStringVectorMap::const_iterator cib = charStates.find(k);
+			if (cib != charStates.end())
+				{
+				int ns = (int)cib->second.size();
+				for (int m = 0; m < ns; m++)
+					out << "        " << cib->second[m] << endl;
+				}
+			}
+		}
+
+	if (transposing && interleaving)
+		out << "  Matrix transposed and interleaved" << endl;
+	else if (transposing && !interleaving)
+		out << "  Matrix transposed but not interleaved" << endl;
+	else if (!transposing && interleaving)
+		out << "  Matrix interleaved but not transposed" << endl;
+	else
+		out << "  Matrix neither transposed nor interleaved" << endl;
+
+	out << "  Missing data symbol is '" << missing << '\'' << endl;
+
+	if (matchchar != '\0')
+		out << "  Match character is '" << matchchar << '\'' << endl;
+	else
+		out << "  No match character specified" << endl;
+
+	if (gap != '\0')
+		out << "  Gap character specified is '" << gap << '\'' << endl;
+	else
+		out << "  No gap character specified" << endl;
+
+	out << "  Valid symbols are: " << symbols << endl;
+
+	int numEquateMacros = (int)(userEquates.size() + defaultEquates.size());
+	if (numEquateMacros > 0)
+		{
+		out << "  Equate macros in effect:" << endl;
+		std::map<char, NxsString>::const_iterator i = defaultEquates.begin();
+		for (; i != defaultEquates.end(); ++i)
+			{
+			out << "   " << (*i).first << " = " << i->second << endl;
+			}
+		i = userEquates.begin();
+		for (; i != userEquates.end(); ++i)
+			{
+			out << "   " << (*i).first << " = " << i->second << endl;
+			}
+		}
+	else
+		out << "  No equate macros have been defined" << endl;
+
+	if (eliminated.empty())
+		out << "  No characters were eliminated" << endl;
+	else
+		{
+		out << "  The following characters were eliminated:" << endl;
+		NxsUnsignedSet::const_iterator k;
+		for (k = eliminated.begin(); k != eliminated.end(); k++)
+			{
+			out << "   " << ((*k)+1) << endl;
+			}
+		}
+
+
+	if (excluded.empty())
+		out << "  no characters excluded" << endl;
+	else
+		{
+		out << "  The following characters have been excluded:\n";
+		for (NxsUnsignedSet::const_iterator eIt = excluded.begin(); eIt != excluded.end(); ++eIt)
+			out << "   " << (*eIt+1) << endl;
+		}
+	out << "  Data matrix:" << endl;
+	DebugShowMatrix(out, false, "    ");
+	}
+
+void NxsCharactersBlock::WriteAsNexus(std::ostream &out) const
+	{
+	out << "BEGIN CHARACTERS;\n";
+	WriteBasicBlockCommands(out);
+	out << "    DIMENSIONS";
+	if (this->taxa)
+		{
+		const unsigned wod = GetNTaxWithData();
+		if (wod > 0)
+			{
+			const unsigned tnt = taxa->GetNTax();
+			if (wod != tnt)
+				out << " NTax=" << wod;
+			}
+		}
+	const unsigned multiplier = (this->datatype == NxsCharactersBlock::codon ? 3 : 1);
+	out << " NChar=" << multiplier*(this->nChar) << ";\n";
+	this->WriteEliminateCommand(out);
+	this->WriteFormatCommand(out);
+	this->WriteCharStateLabelsCommand(out);
+	this->WriteMatrixCommand(out);
+	WriteSkippedCommands(out);
+	out << "END;\n";
+	}
+
+
+void NxsCharactersBlock::WriteEliminateCommand(
+  std::ostream &out) const /* output stream on which to print matrix */
+	{
+	if (eliminated.empty())
+		return;
+	out << "    ELIMINATE";
+	for (NxsUnsignedSet::const_iterator u = this->eliminated.begin(); u != this->eliminated.end(); ++u)
+		out << ' ' << (1 + *u);
+	out << ";\n";
+	}
+
+
+void NxsCharactersBlock::WriteMatrixCommand(
+  std::ostream &out) const /* output stream on which to print matrix */
+	{
+	if (taxa == NULL)
+		return;
+	unsigned width = taxa->GetMaxTaxonLabelLength();
+	const unsigned ntaxTotal = taxa->GetNTax();
+	out << "Matrix\n";
+	int prec = 6;
+	if (datatype == continuous)
+		prec = (int)out.precision(10);
+	unsigned stride = (this->writeInterleaveLen < 1 ? this->nChar : this->writeInterleaveLen);
+	unsigned begChar = 0;
+	while (begChar < this->nChar)
+		{
+		if (begChar > 0)
+			out << '\n';
+		unsigned endChar  = std::min(begChar + stride, this->nChar);
+		for (unsigned i = 0; i < ntaxTotal; i++)
+			{
+			if (this->TaxonIndHasData(i))
+				{
+				const std::string currTaxonLabel = NxsString::GetEscaped(taxa->GetTaxonLabel(i));
+				out << currTaxonLabel;
+				unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+				unsigned diff = width - currTaxonLabelLen;
+				for (unsigned k = 0; k < diff+5; k++)
+					out << ' ';
+
+				WriteStatesForMatrixRow(out, i, UINT_MAX, begChar, endChar);
+				out << '\n';
+				}
+			}
+		begChar = endChar;
+		}
+	out << ";\n";
+	if (datatype == continuous)
+		out.precision(prec);
+	}
+
+std::string NxsCharactersBlock::GetMatrixRowAsStr(const unsigned rowIndex) const /* output stream on which to print matrix */
+	{
+	if (!this->TaxonIndHasData(rowIndex))
+		return std::string();
+	std::ostringstream o;
+	WriteStatesForMatrixRow(o, rowIndex, UINT_MAX, 0, this->nChar);
+	return o.str();
+	}
+
+void NxsCharactersBlock::WriteStatesForMatrixRow(
+  std::ostream &out,				/* the output stream on which to write */
+  unsigned currTaxonIndex,	/* the taxon, in range [0..`ntax') */
+  unsigned ,
+  unsigned beginChar,
+  unsigned endChar) const		/* the index of the first taxon (if UINT_MAX, don't use matchchar) */
+	{
+	WriteStatesForTaxonAsNexus(out, currTaxonIndex, beginChar, endChar);
+	}
+
+
+void NxsCharactersBlock::WriteCharLabelsCommand(std::ostream &out) const
+	{
+	if (indToCharLabel.empty())
+		return;
+	out << "    CHARLABELS";
+	std::map<unsigned, std::string>::const_iterator resultSearchIt;
+	const std::map<unsigned, std::string>::const_iterator endIt = indToCharLabel.end();
+	unsigned emptyLabelsToWrite = 0;
+	for (unsigned oit = 0; oit < nChar; ++oit)
+		{
+		resultSearchIt = indToCharLabel.find(oit);
+		if (resultSearchIt == endIt)
+			emptyLabelsToWrite++;
+		else
+			{
+			for (unsigned j = 0; j < emptyLabelsToWrite; ++j)
+				out << " _";
+			emptyLabelsToWrite = 0;
+			out << ' ' << NxsString::GetEscaped(resultSearchIt->second);
+			}
+		}
+	out << ";\n";
+	}
+
+void NxsCharactersBlock::WriteCharStateLabelsCommand(std::ostream &out) const
+	{
+	if (charStates.empty())
+		{
+		this->WriteCharLabelsCommand(out);
+		return;
+		}
+	const NxsString mtString;
+	bool isFirst = true;
+	std::map<unsigned, std::string>::const_iterator resultSearchIt;
+	const std::map<unsigned, std::string>::const_iterator endIt = indToCharLabel.end();
+	const NxsStringVectorMap::const_iterator endCSIt = this->charStates.end();
+	for (unsigned oit = 0; oit < nChar; ++oit)
+		{
+		resultSearchIt = indToCharLabel.find(oit);
+		NxsString escapedCLabel;
+		if (resultSearchIt != endIt)
+			escapedCLabel = NxsString::GetEscaped(resultSearchIt->second).c_str();
+		const NxsStringVectorMap::const_iterator cib = this->charStates.find(oit);
+		if (isFirst)
+			{
+			out << "    CharStateLabels \n      ";
+			isFirst = false;
+			}
+		else
+			out << ",\n      ";
+		out << 1 + oit << ' ';
+		if (cib != endCSIt)
+			{
+			const NxsStringVector & stateLabelsVec = cib->second;
+			unsigned ns = (unsigned)stateLabelsVec.size();
+			if (!escapedCLabel.empty())
+				out << escapedCLabel;
+			out << " / ";
+			for (unsigned m = 0; m < ns; m++)
+				out << " " << NxsString::GetEscaped(stateLabelsVec[m]);
+			}
+		else if (!escapedCLabel.empty())
+			out << escapedCLabel;
+		else out << '/';
+		}
+	out << ";\n";
+	}
+
+void NxsCharactersBlock::WriteFormatCommand(std::ostream &out) const
+	{
+	const NxsDiscreteDatatypeMapper * mapper =  GetDatatypeMapperForChar(0);
+	if (IsMixedType())
+		{
+		out << "    FORMAT Datatype=MIXED(";
+		bool first = true;
+		for (std::vector<DatatypeMapperAndIndexSet>::const_iterator mIt = datatypeMapperVec.begin(); mIt != datatypeMapperVec.end(); ++mIt)
+			{
+			if (first)
+				first = false;
+			else
+				out << ", ";
+			out << GetNameOfDatatype(mIt->first.GetDatatype()) << ':';
+			NxsSetReader::WriteSetAsNexusValue(mIt->second, out);
+			}
+		out << ')';
+		if (this->missing != '?')
+			out << " Missing=" << this->missing;
+		if (this->gap != '\0')
+			out << "  Gap=" << this->gap;
+		}
+	else
+		mapper->WriteStartOfFormatCommand(out);
+
+	if (this->respectingCase)
+		out << " RespectCase";
+
+	if (this->matchchar != '\0')
+		out << "  MatchChar=" << this->matchchar;
+	if (this->datatype == continuous)
+		{
+		out << " Items = (";
+		for (vector<std::string>::const_iterator iIt = items.begin(); iIt != items.end(); ++iIt)
+			out << *iIt << ' ';
+		out << ")";
+		if (this->statesFormat == STATES_PRESENT)
+			out << " StatesFormat=StatesPresent";
+		}
+	else if (this->statesFormat == INDIVIDUALS)
+			out << " StatesFormat=Individuals";
+
+	if (this->tokens && this->datatype != NxsCharactersBlock::continuous) /*TOKENS is the only choice for continuous data*/
+		out << " Tokens";
+	if (this->writeInterleaveLen > 1 && (this->nChar > (unsigned)this->writeInterleaveLen ))
+		{
+		out << " Interleave";
+		}
+	out << ";\n";
+	}
+
+std::map<char, NxsString> NxsCharactersBlock::GetDefaultEquates(DataTypesEnum dt)
+	{
+	std::map<char, NxsString> defEquates;
+	if (dt == NxsCharactersBlock::dna || dt == NxsCharactersBlock::rna || dt == NxsCharactersBlock::nucleotide)
+		{
+		defEquates['R'] = NxsString("{AG}");
+		defEquates['M'] = NxsString("{AC}");
+		defEquates['S'] = NxsString("{CG}");
+		defEquates['V'] = NxsString("{ACG}");
+		if (dt == NxsCharactersBlock::dna || dt == NxsCharactersBlock::nucleotide)
+			{
+			defEquates['Y'] = NxsString("{CT}");
+			defEquates['K'] = NxsString("{GT}");
+			defEquates['W'] = NxsString("{AT}");
+			defEquates['H'] = NxsString("{ACT}");
+			defEquates['B'] = NxsString("{CGT}");
+			defEquates['D'] = NxsString("{AGT}");
+			defEquates['N'] = NxsString("{ACGT}");
+			defEquates['X'] = NxsString("{ACGT}");
+			if (dt == NxsCharactersBlock::nucleotide)
+				defEquates['U'] ='T';
+			}
+		else
+			{
+			defEquates['Y'] = NxsString("{CU}");
+			defEquates['K'] = NxsString("{GU}");
+			defEquates['W'] = NxsString("{AU}");
+			defEquates['H'] = NxsString("{ACU}");
+			defEquates['B'] = NxsString("{CGU}");
+			defEquates['D'] = NxsString("{AGU}");
+			defEquates['N'] = NxsString("{ACGU}");
+			defEquates['X'] = NxsString("{ACGU}");
+			}
+		}
+	else if (dt == NxsCharactersBlock::protein)
+		{
+		defEquates['B'] = NxsString("{DN}");
+		defEquates['Z'] = NxsString("{EQ}");
+		defEquates['X'] = NxsString("{ACDEFGHIKLMNPQRSTVWY*}");
+		}
+	/* molecular datatypes are the only datatypes with default equates and
+		keys of either case are equivalent.
+	*/
+	NxsString upperKeys;
+	for (std::map<char, NxsString>::const_iterator k = defEquates.begin(); k != defEquates.end(); ++k)
+		{
+		upperKeys += k->first;
+		}
+	for (std::string::const_iterator k = upperKeys.begin(); k != upperKeys.end(); ++k)
+		{
+		const char c = *k;
+		const char lc = (char)tolower(c);
+		defEquates[lc] = defEquates[c];
+		}
+
+	return defEquates;
+	}
+
+const char * NxsCharactersBlock::GetNameOfDatatype(DataTypesEnum datatype)
+	{
+	switch(datatype)
+		{
+		case NxsCharactersBlock::codon:
+		case NxsCharactersBlock::dna:
+			return "DNA";
+		case NxsCharactersBlock::rna:
+			return "RNA";
+		case NxsCharactersBlock::nucleotide:
+			return "Nucleotide";
+		case NxsCharactersBlock::protein:
+			return "Protein";
+		case NxsCharactersBlock::continuous:
+			return "Continuous"; // do not change!  phylobase uses this!!!
+		default:
+			return "Standard";
+		}
+	}
+
+/*!
+	Returns NxsCharactersBlock object to the state it was in when first created.
+*/
+void NxsCharactersBlock::Reset()
+	{
+	ResetSurrogate();
+	NxsBlock::Reset();
+	nTaxWithData = 0;
+	nChar = 0;
+	newtaxa				= false;
+	interleaving		= false;
+	transposing			= false;
+	respectingCase		= false;
+	labels				= true;
+	tokens				= false;
+	datatype			= NxsCharactersBlock::standard;
+	originalDatatype	= NxsCharactersBlock::standard;
+	datatypeReadFromFormat = false;
+	missing				= '?';
+	gap					= '\0';
+	gapMode = GAP_MODE_MISSING;
+	matchchar			= '\0';
+	symbols.clear();
+	ResetSymbols();
+
+	ucCharLabelToIndex.clear();
+	indToCharLabel.clear();
+	charSets.clear();
+	charPartitions.clear();
+	codonPosPartitions.clear();
+	defCodonPosPartitionName.clear();
+	exSets.clear();
+	charStates.clear();
+	globalStateLabels.clear();
+	userEquates.clear();
+	defaultEquates.clear();
+	eliminated.clear();
+	datatypeMapperVec.clear();
+	discreteMatrix.clear();
+	continuousMatrix.clear();
+	items = std::vector<std::string>(1, std::string("STATES"));
+	statesFormat = STATES_PRESENT;
+	restrictionDataype = false;
+	}
+
+std::string NxsCharactersBlock::GetDefaultSymbolsForType(NxsCharactersBlock::DataTypesEnum dt)
+	{
+	switch(dt)
+		{
+		case NxsCharactersBlock::nucleotide:
+		case NxsCharactersBlock::dna:
+			return std::string("ACGT");
+		case NxsCharactersBlock::rna:
+			return std::string("ACGU");
+		case NxsCharactersBlock::protein:
+			return std::string("ACDEFGHIKLMNPQRSTVWY*");
+		case NxsCharactersBlock::standard:
+			return std::string("01");
+		default:
+			return std::string();
+
+		}
+	return std::string();
+	}
+/*!
+	Resets standard symbol set after a change in `datatype' is made. Also flushes equates list and installs standard
+	equate macros for the current `datatype'.
+*/
+void NxsCharactersBlock::ResetSymbols()
+	{
+	symbols = GetDefaultSymbolsForType(datatype);
+	userEquates.clear();
+	defaultEquates = GetDefaultEquates(datatype);
+	datatypeMapperVec.clear();
+	}
+
+/*!
+	Looks up the state(s) at row `i', column `charNum' of matrix and writes it (or them) to out. If there is uncertainty or
+	polymorphism, the list of states is surrounded by the appropriate set of symbols (i.e., parentheses for
+	polymorphism, curly brackets for uncertainty). If TOKENS was specified, the output takes the form of the defined
+	state labels; otherwise, the correct symbol is looked up in `symbols' and output.
+*/
+void NxsCharactersBlock::ShowStateLabels(
+  std::ostream &out,				/* the output stream on which to write */
+  unsigned taxInd,				/* the taxon, in range [0..`ntax') */
+  unsigned charInd,				/* the character, in range [0..`nChar') */
+  unsigned ) const		/* the index of the first taxon (if UINT_MAX, don't use matchchar) */
+	{
+	if (datatype == continuous)
+		{
+		const ContinuousCharCell & cell = continuousMatrix.at(taxInd).at(charInd);
+		std::vector<std::string>::const_iterator itemIt = items.begin();
+		bool parensNeeded = items.size() > 1;
+		if (items.size() == 1)
+			{
+			ContinuousCharCell::const_iterator oit = cell.find(*itemIt);
+			if (oit != cell.end() && oit->second.size() > 1)
+				parensNeeded = true;
+			}
+		if (parensNeeded)
+			out	 << '(';
+		for (; itemIt != items.end(); ++itemIt)
+			{
+			ContinuousCharCell::const_iterator cit = cell.find(*itemIt);
+			if (cit == cell.end())
+				out << missing << ' ';
+			else
+				{
+				if (cit->second.empty())
+					out << missing << ' ';
+				else
+					{
+					vector<double>::const_iterator vIt = cit->second.begin();
+					for(; vIt != cit->second.end(); ++vIt)
+						{
+						if (*vIt == DBL_MAX)
+							out << missing << ' ';
+						else
+							out << *vIt << ' ';
+						}
+					}
+				}
+			}
+		if (parensNeeded)
+			out	 << ") ";
+		else
+			out << ' ';
+		return;
+		}
+	const NxsDiscreteDatatypeMapper * mapper = GetDatatypeMapperForChar(charInd);
+	NCL_ASSERT(mapper != NULL);
+	const NxsDiscreteStateCell currStateCode = discreteMatrix.at(taxInd).at(charInd);
+	if (tokens)
+		{
+		out << ' ';
+		if (currStateCode >= 0 && currStateCode < (NxsDiscreteStateCell) mapper->GetNumStates())
+			{
+			NxsStringVectorMap::const_iterator ci = charStates.find(charInd);
+			if (ci != charStates.end() && ((NxsDiscreteStateCell) ci->second.size()) > currStateCode)
+				out << ci->second[currStateCode];
+			else if (currStateCode < 0)
+				{
+				if (currStateCode == NXS_MISSING_CODE)
+					out << this->GetMissingSymbol();
+				else if (currStateCode == NXS_GAP_STATE_CODE)
+					out << this->GetGapSymbol();
+				else
+					out << '_';
+				}
+			else if (globalStateLabels.size() > (unsigned) currStateCode)
+				out << globalStateLabels[currStateCode];
+			else
+				out << '_';
+			return;
+			}
+		}
+	mapper->WriteStateCodeAsNexusString(out, currStateCode);
+	}
+
+/*!
+	Writes out the state (or states) stored in this NxsDiscreteDatum object to the buffer `s' using the symbols array
+	to do the necessary translation of the numeric state values to state symbols. In the case of polymorphism or
+	uncertainty, the list of states will be surrounded by brackets or parentheses (respectively). Assumes `s' is
+	non-NULL and long enough to hold everything printed.
+*/
+void NxsCharactersBlock::WriteStates(
+  NxsDiscreteDatum &d,	/* the datum to be queried */
+  char *s,				/* the buffer to which to print */
+  unsigned slen) NCL_COULD_BE_CONST /* the length of the buffer `s' */ /*v2.1to2.2 1 */
+	{
+	std::ostringstream outs;
+	ShowStates(outs, d.taxInd, d.charInd);
+	std::string sfo = outs.str();
+	if (s == NULL || sfo.length() > slen)
+		throw NxsNCLAPIException("Char buffer too small in NxsCharactersBlock::WriteStates");
+	strcpy(s, sfo.c_str());
+	}
+
+/*!
+	This function is no longer the most efficient way to access parsed data (see notes on NxsCharacterBlock and
+	GetMatrix() and GetMatrixDecoder() methods.
+
+	Returns the number of states for taxon `i', character `j'.
+*/
+unsigned NxsCharactersBlock::GetNumStates(
+  unsigned taxInd,	/* the taxon in range [0..`ntax') */
+  unsigned charInd) NCL_COULD_BE_CONST /* the character in range [0..`nChar') */ /*v2.1to2.2 1 */
+	{
+	const NxsDiscreteDatatypeMapper * mapper = GetDatatypeMapperForChar(charInd);
+	NCL_ASSERT(mapper != NULL);
+	const NxsDiscreteStateCell currStateCode = discreteMatrix.at(taxInd).at(charInd);
+	return mapper->GetNumStatesInStateCode(currStateCode);
+	}
+
+/*! Excludes character with index `i`.
+*/
+void NxsCharactersBlock::ExcludeCharacter(
+  unsigned i)	/* index of character to exclude in range [0..`nChar') */
+	{
+	if (i >= nChar)
+		{
+		errormsg  = "Character index is ExcludeCharacter out-of-range.   Must be < ";
+		errormsg << nChar;
+		throw NxsNCLAPIException(errormsg);
+		}
+	excluded.insert(i);
+	}
+/*! Includes (or "activates") character with index `i`.
+*/
+void NxsCharactersBlock::IncludeCharacter(
+  unsigned i)	/* index of character to include in range [0..`nChar') */
+	{
+	if (i >= nChar)
+		{
+		errormsg  = "Character index is ExcludeCharacter out-of-range.   Must be < ";
+		errormsg << nChar;
+		throw NxsNCLAPIException(errormsg);
+		}
+	excluded.erase(i);
+	}
+
+bool NxsCharactersBlock::IsGapState(
+  unsigned taxInd,	/* the taxon, in range [0..`ntax') */
+  unsigned charInd) NCL_COULD_BE_CONST /* the character, in range [0..`nChar') */ /*v2.1to2.2 1 */
+	{
+	if (this->datatype == continuous)
+		return false;
+	const NxsDiscreteStateRow & row = discreteMatrix.at(taxInd);
+	return (row.size() > charInd && row[charInd] == NXS_GAP_STATE_CODE);
+	}
+
+bool NxsCharactersBlock::IsMissingState(
+  unsigned taxInd,	/* the taxon, in range [0..`ntax') */
+  unsigned charInd) NCL_COULD_BE_CONST /* the character, in range [0..`nChar') */ /*v2.1to2.2 1 */
+	{
+	if (this->datatype == continuous)
+		{
+		return !continuousMatrix.at(taxInd).empty();
+		}
+	const NxsDiscreteStateRow & row = discreteMatrix.at(taxInd);
+	return (row.size() <= charInd || (row[charInd] == NXS_MISSING_CODE));
+	}
+
+
+void NxsCharactersBlock::FindConstantCharacters(NxsUnsignedSet &c) const
+	{
+	vector<NxsDiscreteStateCell> iv;
+	for (unsigned colIndex = 0; colIndex < nChar; ++colIndex)
+		{
+		const NxsDiscreteDatatypeMapper * mapper = GetDatatypeMapperForChar(colIndex);
+		if (mapper == NULL)
+			throw NxsNCLAPIException("No DatatypeMapper in FindConstantCharacters");
+
+		std::set<NxsDiscreteStateCell> intersectionSet = mapper->GetStateSetForCode(NXS_MISSING_CODE);
+		for (NxsDiscreteStateMatrix::const_iterator rowIt = discreteMatrix.begin(); rowIt != discreteMatrix.end(); ++rowIt)
+			{
+			const NxsDiscreteStateRow & row = *rowIt;
+			if (row.size() > colIndex)
+				{
+				const NxsDiscreteStateCell sc = row[colIndex];
+				std::set<NxsDiscreteStateCell> currSet = mapper->GetStateSetForCode(sc);
+				iv.clear();
+				set_intersection(currSet.begin(), currSet.end(), intersectionSet.begin(), intersectionSet.end(), std::back_inserter(iv));
+				intersectionSet.clear();
+				if (iv.empty())
+					break;
+				intersectionSet.insert(iv.begin(), iv.end());
+				}
+			}
+		if (!intersectionSet.empty())
+			c.insert(colIndex);
+		}
+	}
+
+void NxsCharactersBlock::FindGappedCharacters(NxsUnsignedSet &c) const
+	{
+	vector<NxsDiscreteStateCell> iv;
+	for (unsigned colIndex = 0; colIndex < nChar; ++colIndex)
+		{
+		for (NxsDiscreteStateMatrix::const_iterator rowIt = discreteMatrix.begin(); rowIt != discreteMatrix.end(); ++rowIt)
+			{
+			const NxsDiscreteStateRow & row = *rowIt;
+			if (row.size() > colIndex && row[colIndex] == NXS_GAP_STATE_CODE)
+				{
+				c.insert(colIndex);
+				break;
+				}
+			}
+		}
+	}
+
+/* Behaves like GetMaximalStateSetOfColumn except that missing data columns do not increase
+	size of the returned state set.
+	If GapMode is missing, then gaps are not counted.
+*/
+std::set<NxsDiscreteStateCell> NxsCharactersBlock::GetNamedStateSetOfColumn(const unsigned colIndex) const
+	{
+	const NxsDiscreteDatatypeMapper * mapper = GetDatatypeMapperForChar(colIndex);
+	if (mapper == NULL)
+		throw NxsNCLAPIException("No DatatypeMapper in GetNamedStateSetOfColumn");
+
+	std::set<NxsDiscreteStateCell> sset;
+	std::set<NxsDiscreteStateCell> scodes;
+	const unsigned maxnstates = mapper->GetNumStatesIncludingGap();
+	for (NxsDiscreteStateMatrix::const_iterator rowIt = discreteMatrix.begin(); rowIt != discreteMatrix.end(); ++rowIt)
+		{
+		const NxsDiscreteStateRow & row = *rowIt;
+		if (row.size() > colIndex)
+			{
+			const NxsDiscreteStateCell sc = row[colIndex];
+			const bool isIgnoredGap = (sc == NXS_GAP_STATE_CODE) && (this->gapMode == GAP_MODE_MISSING);
+			const bool toBeCounted = !(sc == NXS_MISSING_CODE || isIgnoredGap);
+			if (toBeCounted && scodes.count(sc) == 0)
+				{
+				scodes.insert(sc);
+				const std::set<NxsDiscreteStateCell>	& ts = mapper->GetStateSetForCode(sc);
+				sset.insert(ts.begin(), ts.end());
+				if (sset.size() == maxnstates)
+					break;
+				}
+			}
+		}
+	return sset;
+	}
+/* Returns the union of all states that are consistent with a column */
+std::set<NxsDiscreteStateCell> NxsCharactersBlock::GetMaximalStateSetOfColumn(const unsigned colIndex) const
+	{
+	const NxsDiscreteDatatypeMapper * mapper = GetDatatypeMapperForChar(colIndex);
+	if (mapper == NULL)
+		throw NxsNCLAPIException("No DatatypeMapper in GetMaximalStateSetOfColumn");
+
+	std::set<NxsDiscreteStateCell> sset;
+	std::set<NxsDiscreteStateCell> scodes;
+	const unsigned maxnstates = mapper->GetNumStatesIncludingGap();
+	for (NxsDiscreteStateMatrix::const_iterator rowIt = discreteMatrix.begin(); rowIt != discreteMatrix.end(); ++rowIt)
+		{
+		const NxsDiscreteStateRow & row = *rowIt;
+		if (row.size() > colIndex)
+			{
+			const NxsDiscreteStateCell sc = row[colIndex];
+			if (scodes.count(sc) == 0)
+				{
+				scodes.insert(sc);
+				const std::set<NxsDiscreteStateCell>	& ts = mapper->GetStateSetForCode(sc);
+				sset.insert(ts.begin(), ts.end());
+				if (sset.size() == maxnstates)
+					break;
+				}
+			}
+		}
+	return sset;
+	}
+
+ bool NxsCharactersBlock::IsPolymorphic(
+  unsigned taxInd,	/* the taxon in range [0..`ntax') */
+  unsigned charInd) NCL_COULD_BE_CONST /* the character in range [0..`nChar') */ /*v2.1to2.2 1 */
+	{
+	const NxsDiscreteDatatypeMapper * mapper = GetDatatypeMapperForChar(charInd);
+	NCL_ASSERT(mapper);
+	if (taxInd >= discreteMatrix.size())
+		throw NxsNCLAPIException("Taxon index out of range of NxsCharactersBlock::IsPolymorphic");
+	const NxsDiscreteStateRow & row = discreteMatrix[taxInd];
+	if (row.size() <= charInd)
+		throw NxsNCLAPIException("Character index out of range of NxsCharactersBlock::IsPolymorphic");
+	return mapper->IsPolymorphic(row[charInd]);
+	}
+
+
+/*!
+	Shows the states for taxon `i', character `j', on the stream `out'. Uses `symbols' array to translate the states
+	from the way they are stored (as integers) to the symbol used in the original data matrix. Assumes `i' is in the
+	range [0..`ntax') and `j' is in the range [0..`nChar'). Also assumes `matrix' is non-NULL.
+*/
+void NxsCharactersBlock::ShowStates(
+  std::ostream &out, /* the stream on which to show the state(s) */
+  unsigned taxInd,	/* the (0-offset) index of the taxon in question */
+  unsigned charInd) NCL_COULD_BE_CONST /* the (0-offset) index of the character in question */ /*v2.1to2.2 1 */
+	{
+	bool ft = tokens;
+	tokens = false;
+	ShowStateLabels(out, taxInd, charInd, UINT_MAX);
+	tokens = ft;
+	}
+
+/*---------------------------------------------------------------------------------------
+ Results in aliasing of the taxa, assumptionsBlock blocks!
+*/
+void NxsCharactersBlock::CopyCharactersContents(const NxsCharactersBlock &other)
+	{
+	assumptionsBlock = other.assumptionsBlock;
+	nChar = other.nChar;
+	nTaxWithData = other.nTaxWithData;
+	matchchar = other.matchchar;
+	respectingCase = other.respectingCase;
+	transposing = other.transposing;
+	interleaving = other.interleaving;
+	tokens = other.tokens;
+	labels = other.labels;
+	missing = other.missing;
+	gap = other.gap;
+	gapMode = other.gapMode;
+	symbols = other.symbols;
+	userEquates = other.userEquates;
+	datatypeMapperVec = other.datatypeMapperVec;
+	discreteMatrix = other.discreteMatrix;
+	continuousMatrix = other.continuousMatrix;
+	eliminated = other.eliminated;
+	excluded = other.excluded;
+	ucCharLabelToIndex = other.ucCharLabelToIndex;
+	indToCharLabel = other.indToCharLabel;
+	charStates = other.charStates;
+	globalStateLabels = other.globalStateLabels;
+	items = other.items;
+	charSets = other.charSets;
+	exSets = other.exSets;
+	charPartitions = other.charPartitions;
+	codonPosPartitions = other.codonPosPartitions;
+	defCodonPosPartitionName = other.defCodonPosPartitionName;
+	transfMgr = other.transfMgr;
+	datatype = other.datatype;
+	statesFormat = other.statesFormat;
+	supportMixedDatatype = other.supportMixedDatatype;
+	convertAugmentedToMixed = other.convertAugmentedToMixed;
+	allowAugmentingOfSequenceSymbols = other.allowAugmentingOfSequenceSymbols;
+	restrictionDataype = other.restrictionDataype;
+	writeInterleaveLen = other.writeInterleaveLen;
+	}
+
+
+NxsCharactersBlock *NxsCharactersBlockFactory::GetBlockReaderForID(const std::string & idneeded, NxsReader *reader, NxsToken *)
+	{
+	if (reader == NULL || idneeded != "CHARACTERS")
+		return NULL;
+	NxsCharactersBlock * nb  = new NxsCharactersBlock(NULL, NULL);
+	nb->SetCreateImpliedBlock(true);
+	nb->SetImplementsLinkAPI(true);
+	return nb;
+	}
+
+// returns a vector of vectors of  the states for each state code.
+// 	The second to the last element will be empty to correspond to  NXS_GAP_STATE_CODE = -2
+// 	The last element will be empty to correspond to NXS_MISSING_CODE = -1
+
+std::vector<std::vector<int> > NxsDiscreteDatatypeMapper::GetPythonicStateVectors() const
+	{
+
+	std::vector<std::vector<int> > pv(this->GetNumStateCodes());
+
+	const int endIndex = (((int) stateSetsVec.size()) + sclOffset);
+	for (int i = 0; i < endIndex; ++i)
+		{
+		NxsDiscreteStateRow r = this->GetStateVectorForCode(i);
+		pv[i].reserve(r.size());
+		for (NxsDiscreteStateRow::const_iterator rIt = r.begin(); rIt != r.end(); ++rIt)
+			pv[i].push_back((int)*rIt);
+		}
+	return pv;
+	}
diff --git a/ncl/nxscharactersblock.h b/ncl/nxscharactersblock.h
new file mode 100644
index 0000000..4ef4ffe
--- /dev/null
+++ b/ncl/nxscharactersblock.h
@@ -0,0 +1,1972 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSCHARACTERSBLOCK_H
+#define NCL_NXSCHARACTERSBLOCK_H
+
+#include <sstream>
+#include <cfloat>
+#include <climits>
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsdiscretedatum.h"
+#include "ncl/nxstaxablock.h"
+
+
+class NxsTaxaBlockAPI;
+class NxsAssumptionsBlockAPI;
+class NxsDiscreteDatatypeMapper;
+
+void NxsWriteSetCommand(const char *cmd, const NxsUnsignedSetMap & usetmap, std::ostream &out, const char * nameOfDef = NULL);
+void NxsWritePartitionCommand(const char *cmd, const NxsPartitionsByName &partitions, std::ostream & out, const char * nameOfDef = NULL);
+
+/*! Internal representation of a stepmatrix with cells composed of doubles.
+	The ordering of columns and rows is identical, and is accessible via NxsRealStepMatrix::GetSymbols
+*/
+class NxsRealStepMatrix
+	{
+	public:
+		typedef std::vector<double> DblVec;
+		typedef std::vector<DblVec> DblMatrix;
+
+		NxsRealStepMatrix(const std::vector<std::string> &symbolsOrder, const DblMatrix & mat)
+			:symbols(symbolsOrder),
+			matrix(mat)
+			{
+			}
+
+		const std::vector<std::string> & GetSymbols() const
+			{
+			return symbols;
+			}
+
+		const DblMatrix & GetMatrix() const
+			{
+			return matrix;
+			}
+	private:
+		std::vector<std::string> symbols;
+		DblMatrix matrix;
+	};
+
+/*! Internal representation of a stepmatrix with cells composed of ints.
+	The ordering of columns and rows is identical, and is accessible via NxsRealStepMatrix::GetSymbols
+*/
+class NxsIntStepMatrix
+	{
+	public:
+		typedef std::vector<int> IntVec;
+		typedef std::vector<IntVec> IntMatrix;
+
+		NxsIntStepMatrix(const std::vector<std::string> &symbolsOrder, const IntMatrix & mat)
+			:symbols(symbolsOrder),
+			matrix(mat)
+			{
+			}
+		const std::vector<std::string> & GetSymbols() const
+			{
+			return symbols;
+			}
+		const IntMatrix & GetMatrix() const
+			{
+			return matrix;
+			}
+	private:
+		std::vector<std::string> symbols;
+		IntMatrix matrix;
+	};
+
+/* Work in progress...
+*/
+class NxsGeneticCodesManager
+	{
+	public:
+		NxsGeneticCodesManager();
+		void Reset() {}
+		bool IsEmpty() const
+			{
+			return true;
+			}
+		void WriteGeneticCode(std::ostream &	) const
+			{}
+		bool IsValidCodeName(const std::string &cn) const;
+	protected:
+		std::set<std::string> standardCodeNames;
+		std::set<std::string> userDefinedCodeNames;
+
+	};
+
+
+/*! NEXUS "types" (as in UserType and TypeSet commands) are assumptions about the costs of transformations of state (in
+	parsimony.
+
+ */
+class NxsTransformationManager
+	{
+	public:
+		typedef std::pair<int, std::set<unsigned> > IntWeightToIndexSet;
+		typedef std::list<IntWeightToIndexSet> ListOfIntWeights;
+
+		typedef std::pair<double, std::set<unsigned> > DblWeightToIndexSet;
+		typedef std::list<DblWeightToIndexSet> ListOfDblWeights;
+
+		typedef std::pair<std::string, std::set<unsigned> > TypeNameToIndexSet;
+		typedef std::list<TypeNameToIndexSet> ListOfTypeNamesToSets;
+
+
+		NxsTransformationManager()
+			{
+			Reset();
+			}
+
+		/*! \return the weight for a character index from a weight set */
+		static int GetWeightForIndex(const ListOfIntWeights & wtset, /*!< the weight set */
+									 unsigned index); /*!< character index which should be in the range in [0, nchar) */
+
+		/*! \returns the weight for a character index from a weight set */
+		static double GetWeightForIndex(const ListOfDblWeights & wtset, /*!< the weight set */
+										unsigned index); /*!< character index which should be in the range in [0, nchar) */
+
+
+		/*! \returns an integer step matrix for an ordered type with `nStates` states */
+		static const NxsIntStepMatrix::IntMatrix GetOrderedType(unsigned nStates);
+		/*! \returns an integer step matrix for an unorder type with `nStates` states (a matrix of 1's off the diagonal and 0's on the diagonal.*/
+		static const NxsIntStepMatrix::IntMatrix GetUnorderedType(unsigned nStates);
+
+		/*! \returns a set with all of the registered type names (the name will be all caps, not in the same case as the used in the NEXUS file)*/
+		const std::set<std::string> & GetTypeNames() const;
+		/*! \returns a set with all of the registered type names that were defined with UserType */
+		const std::set<std::string> & GetUserTypeNames() const;
+		/*! \returns a set with all of the builtin type names*/
+		const std::set<std::string> & GetStandardTypeNames() const;
+		/*! \returns the name of the current default type (starts as unorderd but can be overridden by a TypeSet command */
+		const std::string GetDefaultTypeName() const;
+		/*! \returns a set with all of the WtSet names */
+		std::set<std::string> GetWeightSetNames() const;
+		/*! \returns true if the name corresponds to a WtSet that is has double entries
+			If true, access the set via GetDoubleWeights
+			If false, retrieve the set by GetIntWeights
+		*/
+		bool IsDoubleWeightSet(const std::string &) const;
+
+		/*! \returns the default ("active") weights as doubles. If the list is empty then the default weights are available from GetDefaultIntWeights or have not been set (implying equal weights) */
+		std::vector<double> GetDefaultDoubleWeights() const
+			{
+			return GetDoubleWeights(def_wtset);
+			}
+
+		/*! \returns the default ("active") weights as doubles. If the list is empty then the default weights are available from GetDefaultDoubleWeights or have not been set (implying equal weights) */
+		std::vector<int> GetDefaultIntWeights() const
+			{
+			return GetIntWeights(def_wtset);
+			}
+
+		/*! \returns the double weights assocaited with the WtSet with name `wtsetname`.
+
+		If the list is empty then the default weights are available from GetIntWeights or
+		wtsetname is not the name of o WtSet
+		*/
+		std::vector<double> GetDoubleWeights(const std::string &wtsetname) const;
+		/*! \returns the int weights assocaited with the WtSet with name `wtsetname`.
+
+		If the list is empty then the default weights are available from GetDoubleWeights or
+		wtsetname is not the name of o WtSet
+		*/
+		std::vector<int> GetIntWeights(const std::string &) const;
+
+		/*! \returns a set with all of the TypeSet names */
+		std::set<std::string> GetTypeSetNames() const;
+
+		/*! \returns the name of the active ("default") WtSet */
+		const std::string & GetDefaultWeightSetName() const;
+		/*! \returns the name of the active ("default") TypeSet */
+		const std::string & GetDefaultTypeSetName() const;
+
+		bool IsEmpty() const;
+
+		bool IsValidTypeName(const std::string & ) const;
+		bool IsStandardType(const std::string & ) const;
+		bool IsIntType(const std::string & ) const;
+
+		const NxsIntStepMatrix & GetIntType(const std::string & name) const;
+
+		const NxsRealStepMatrix & GetRealType(const std::string & name) const;
+
+
+		void SetDefaultTypeName(const std::string &);
+		bool AddIntType(const std::string &, const NxsIntStepMatrix &);
+		bool AddRealType(const std::string &, const NxsRealStepMatrix &);
+
+		bool AddIntWeightSet(const std::string &, const ListOfIntWeights &, bool isDefault);
+		bool AddRealWeightSet(const std::string &, const ListOfDblWeights &, bool isDefault);
+
+		bool AddTypeSet(const std::string &, const NxsPartition &, bool isDefault);
+
+		void Reset();
+
+		void WriteUserType(std::ostream &out) const;
+		void WriteWtSet(std::ostream &out) const;
+		void WriteTypeSet(std::ostream &out) const
+			{
+			NxsWritePartitionCommand("TypeSet", typeSets, out, def_typeset.c_str());
+			}
+
+	private:
+		std::set<std::string> standardTypeNames;
+		std::set<std::string> userTypeNames;
+		std::set<std::string> allTypeNames;
+		std::map<std::string, NxsRealStepMatrix> dblUserTypes;
+		std::map<std::string, NxsIntStepMatrix> intUserTypes;
+		std::set<std::string> allWtSetNames;
+		std::map<std::string, ListOfDblWeights> dblWtSets;
+		std::map<std::string, ListOfIntWeights> intWtSets;
+		NxsPartitionsByName typeSets;
+		std::string def_wtset;
+		std::string def_typeset;
+		std::string def_type;
+	};
+
+inline const std::string NxsTransformationManager::GetDefaultTypeName() const
+	{
+	return def_type;
+	}
+inline const std::string & NxsTransformationManager::GetDefaultWeightSetName() const
+	{
+	return def_wtset;
+	}
+inline const std::string & NxsTransformationManager::GetDefaultTypeSetName() const
+	{
+	return def_typeset;
+	}
+inline const std::set<std::string> & NxsTransformationManager::GetTypeNames() const
+	{
+	return allTypeNames;
+	}
+inline const std::set<std::string> & NxsTransformationManager::GetUserTypeNames() const
+	{
+	return userTypeNames;
+	}
+inline const std::set<std::string> & NxsTransformationManager::GetStandardTypeNames() const
+	{
+	return standardTypeNames;
+	}
+inline bool NxsTransformationManager::IsDoubleWeightSet(const std::string &s) const
+	{
+	const std::vector<double> d = GetDoubleWeights(s);
+	return !(d.empty());
+	}
+
+/*! Intended to specify the interface of a NxsCharactersBlock, but actually does
+	not list all of the relevant functions. See NxsCharactersBlock documentation.
+*/
+class NxsCharactersBlockAPI
+  : public NxsBlock, public NxsLabelToIndicesMapper
+	{
+	public:
+		virtual unsigned	ApplyExset(NxsUnsignedSet &exset) = 0;
+		virtual bool AddNewExSet(const std::string &label, const NxsUnsignedSet & inds) = 0;
+		virtual bool IsRespectCase() const = 0;
+		virtual unsigned	GetNCharTotal() const = 0;
+		virtual NxsTransformationManager & GetNxsTransformationManagerRef() = 0;
+		virtual const NxsTransformationManager & GetNxsTransformationManagerRef() const = 0;
+		virtual std::vector<const NxsDiscreteDatatypeMapper *> GetAllDatatypeMappers() const = 0;
+		virtual bool AddNewCodonPosPartition(const std::string &label, const NxsPartition & inds, bool isDefault) = 0;
+		virtual std::string GetDefaultCodonPosPartitionName() const = 0;
+		virtual NxsPartition GetCodonPosPartition(const std::string &label) const = 0;
+		enum GapModeEnum
+		{
+			GAP_MODE_MISSING = 0,
+			GAP_MODE_NEWSTATE = 1
+		};
+		virtual GapModeEnum GetGapModeSetting() const = 0;
+		virtual void SetGapModeSetting(GapModeEnum m) = 0;
+
+	};
+
+#if defined(NCL_SMALL_STATE_CELL)
+	typedef signed char NxsDiscreteStateCell;
+#else
+	typedef int NxsDiscreteStateCell;
+#endif
+typedef std::vector<NxsDiscreteStateCell> NxsDiscreteStateRow;
+typedef std::vector<NxsDiscreteStateRow> NxsDiscreteStateMatrix;
+
+
+/*!
+	NXS_INVALID_STATE_CODE is used as a flag for uninitialized or unrecognized values
+	NXS_GAP_STATE_CODE may not be found in all datatypes, but is always -2 when
+		it present.
+	NXS_MISSING_CODE is always -1. It must be distinguished from the ambiguous set of all states because ? does not
+		mean that a new state could necessarily be present. This arises is PAUP-style symbols extensions to the
+		built-in datatypes. If you say FORMAT DATATYPE=DNA SYMBOLS="01" ; then the valid symbols become "ACGT01"
+		See AugmentedSymbolsToMixed.
+*/
+enum {
+	NXS_INVALID_STATE_CODE = -3, /* this must be kept negative */
+	NXS_GAP_STATE_CODE = -2, /* this must be kept negative */
+	NXS_MISSING_CODE = -1 /* this must be kept negative */
+	};
+
+class NxsCodonTriplet {
+	public:
+		unsigned char firstPos;
+		unsigned char secondPos;
+		unsigned char thirdPos;
+
+		NxsCodonTriplet(const char *triplet);
+		////////////////////////////////////////////////////////////////////////
+		// returns for a this => other substitution a (from-base, to-base) pair or
+		// (-1,-1) for codons that differ by more than one position.
+		// If codons are identical, then (0,0) will be returned.
+		//
+		typedef std::pair<int, int> MutDescription;
+		MutDescription getSingleMut(const NxsCodonTriplet & other) const;
+
+	};
+
+enum NxsGeneticCodesEnum {
+	NXS_GCODE_NO_CODE = -1,
+	NXS_GCODE_STANDARD = 0,
+	NXS_GCODE_VERT_MITO = 1,
+	NXS_GCODE_YEAST_MITO = 2,
+	NXS_GCODE_MOLD_MITO = 3,
+	NXS_GCODE_INVERT_MITO = 4,
+	NXS_GCODE_CILIATE = 5,
+	NXS_GCODE_ECHINO_MITO = 8,
+	NXS_GCODE_EUPLOTID = 9,
+	NXS_GCODE_PLANT_PLASTID = 10,
+	NXS_GCODE_ALT_YEAST = 11,
+	NXS_GCODE_ASCIDIAN_MITO = 12,
+	NXS_GCODE_ALT_FLATWORM_MITO = 13,
+	NXS_GCODE_BLEPHARISMA_MACRO = 14,
+	NXS_GCODE_CHLOROPHYCEAN_MITO = 15,
+	NXS_GCODE_TREMATODE_MITO = 20,
+	NXS_GCODE_SCENEDESMUS_MITO = 21,
+	NXS_GCODE_THRAUSTOCHYTRIUM_MITO = 22,
+	NXS_GCODE_CODE_ENUM_SIZE = 23
+	};
+NxsGeneticCodesEnum geneticCodeNameToEnum(std::string);
+std::string geneticCodeEnumToName(NxsGeneticCodesEnum);
+std::string getGeneticCodeAAOrder(NxsGeneticCodesEnum codeIndex);
+std::vector<std::string> getGeneticCodeNames();
+
+/* structure used to store information about how the codon indices of a compressed
+(no stop codons permitted) character matrix correspond to the:
+	* 64 codons in alphabetical order,
+	* the amino acids
+	* the codon strings ("AAA", "AAC"...)
+*/
+
+class CodonRecodingStruct
+{
+	public:
+		std::vector<int> compressedCodonIndToAllCodonsInd;
+		std::vector<int> aaInd; /* The index 0 to 20 of the amino acid for each codon - the order of the aas is "ACDEFGHIKLMNPQRSTVWY*" */
+		std::vector<std::string> codonStrings; /* The nucleotide abbreviations for each codon "AAA", "AAC"... */
+};
+
+class NxsDiscreteDatatypeMapper;
+/*! This class handles reading and storage for the NEXUS block CHARACTERS. It overrides the member functions Read and
+	Reset, which are abstract virtual functions in the base class NxsBlock.
+
+
+
+	\note{"ActiveChar" is equivalent to "IncludedChar". }
+
+
+	Important change in starting in version 2.1:
+		The ELIMINATE command is now dealt with as if it were an automatic exclude statment.
+		Previous versions of NCL were more in keeping with the NEXUS specification, in that NCL did not store
+		eliminate characters. This resulted
+		in a confusing situation in which the Characters block maintained an original index for a character and a
+		current index.	Some public functions of NxsCharactersBlock took arguments that needed the original character
+		index, while the vast majority of methods interpretted a character index as the current index of a character.
+		ELIMINATE commands are *very* rare in modern NEXUS files (Mesquite does not even recognize the command), thus
+		the increased complexity of the API that was caused by not storing ELIMINATED character was deemed a
+		counterproductive.
+		In NCL 2.1 (and later), the characters block stores every character, and the user of NCL can query the
+		NxsCharactersBlock about whether a character has been excluded or not (you can also ask for the set of
+		eliminated chararcters). Optimizations for avoiding excluded characters are no longer the responsibility
+		of NxsCharactersBlock.
+
+	Thus, a normal loop through all characters in the data matrix should look something
+	like this:
+>
+	for(unsigned j = 0; j < nchar; j++)
+		{
+		if (IsExcluded(j))
+			continue;
+		.
+		.
+		.
+		}
+
+	Below is a table showing the correspondence between the elements of a CHARACTERS block in a NEXUS file and the
+	variables and member functions of the NxsCharactersBlock class that can be used to access each piece of information
+	stored. Items in parenthesis should be viewed as "see also" items.
+>
+	NEXUS		  Command		 Data			Member
+	Command		  Atribute		 Member			Functions
+	---------------------------------------------------------------------
+	DIMENSIONS	  NEWTAXA		 newtaxa
+
+
+				  NCHAR			 nChar			GetNChar
+
+	FORMAT		  DATATYPE		 datatype		GetDataType
+
+				  RESPECTCASE	 respectingCase IsRespectCase
+
+				  MISSING		 missing		GetMissingSymbol
+
+				  GAP			 gap			GetGapSymbol
+
+				  SYMBOLS		 symbols		GetSymbols
+
+				  EQUATE		 userEquates	GetEquateKey
+												GetEquateValue
+												GetNumEquates
+
+				  MATCHCHAR		 matchchar		GetMatchcharSymbol
+
+				  (NO)LABELS	 labels			IsLabels
+
+				  TRANSPOSE		 transposing	IsTranspose
+
+				  INTERLEAVE	 interleaving	IsInterleave
+
+				  ITEMS							GetItems
+
+				  STATESFORMAT					GetStatesPresent
+
+				  (NO)TOKENS	 tokens			IsTokens
+
+	ELIMINATE					 eliminated		GetNumEliminated
+												IsExcluded
+	MATRIX						 matrix			GetState
+												GetInternalRepresentation
+												GetNumStates
+												GetNumMatrixRows
+												GetNumMatrixCols
+												IsPolymorphic
+>
+*/
+class NxsCharactersBlock
+  : public NxsCharactersBlockAPI, public NxsTaxaBlockSurrogate
+	{
+	friend class NxsAssumptionsBlock;
+
+
+	public:
+		typedef std::map<std::string, std::vector<double> > ContinuousCharCell;
+		typedef std::vector<ContinuousCharCell> ContinuousCharRow;
+		typedef std::vector<ContinuousCharRow> ContinuousCharMatrix;
+		typedef std::vector<std::string> VecString;
+		typedef std::map<unsigned, std::string> IndexToLabelMap;
+		typedef std::map<std::string, unsigned> LabelToIndexMap;
+		typedef std::pair<NxsDiscreteDatatypeMapper, NxsUnsignedSet> DatatypeMapperAndIndexSet;
+		typedef std::vector<DatatypeMapperAndIndexSet> VecDatatypeMapperAndIndexSet;
+
+
+		enum DataTypesEnum /*! values used to represent different basic types of data stored in a CHARACTERS block, and used with the data member `datatype' */
+			{
+			standard = 1, /*! indicates `matrix' holds characters with arbitrarily-assigned, discrete states, such as discrete morphological data */
+			dna = 2, /*! indicates `matrix' holds DNA sequences (states A, C, G, T) */
+			rna = 3, /*! indicates `matrix' holds RNA sequences (states A, C, G, U) */
+			nucleotide = 4, /*! indicates `matrix' holds nucleotide sequences */
+			protein = 5, /*! indicates `matrix' holds amino acid sequences */
+			continuous = 6, /*! indicates `matrix' holds continuous data */
+			codon = 7, /*! AAA=>0, AAC=1, AAAG=>2, AAU=>3, ACA=>4... UUU=>63 */
+			mixed = 8 /*! indicates that there are multiple datatype mappers that must be used to decode the columns of the matrix (one mapper per column, but not one mapper per matrix). A MrBayes NEXUS feature*/
+			};
+		enum StatesFormatEnum
+			{
+			STATES_PRESENT = 1,
+			STATE_COUNT,
+			STATE_FREQUENCY,
+			INDIVIDUALS
+			};
+
+		/*! In v2.1 of the API, the NxsTaxaBlockAPI and NxsAssumptionsBlockAPI pointers
+			are usually NULL. These block assignments are made during the parse. */
+		NxsCharactersBlock(NxsTaxaBlockAPI *tb, /*!< the taxa block object to consult for taxon labels (can be 0L)*/
+						   NxsAssumptionsBlockAPI *ab);	/*!< the assumptions block object to consult for exclusion sets (can be 0L) */
+		virtual ~NxsCharactersBlock() {}
+
+	// Commonly used functions
+		//Configuration
+		/*! Controls whether or not a characters block reader will support MrBayes' datatype=MIXED extension to NEXUS
+			The default is false.
+			\ref mixedDatatypes
+		*/
+		void SetSupportMixedDatatype(bool v)
+			{
+			supportMixedDatatype = v;
+			}
+		/*! \returns true if a sequence type will be converted to standard (default block would return false).
+				the "setter" function is NxsCharactersBlock::SetConvertAugmentedToMixed()
+
+			\ref mixedDatatypes
+		*/
+		bool AugmentedSymbolsToMixed();
+		/*! Instructs the NxsCharactersBlock to convert sequence data character blocks that have
+			"augmented" symbols lists into a mixture datatype.
+
+			By default or after SetConvertAugmentedToMixed(false), the NxsCharacterBlock will change
+			the datatype to standard (to indicate that the datatype is no longer simply a sequence type).
+
+			Note that GetOriginalDataType() will still store the name of the type that occurred in the file.
+
+			This is only applicable if SetAllowAugmentingOfSequenceSymbols(true) has been called.
+			\ref mixedDatatypes
+		*/
+		void SetConvertAugmentedToMixed(bool v)
+			{
+			convertAugmentedToMixed = v;
+			}
+		/*! Instructs the NxsCharactersBlock to accept extra symbols even if the datatype is
+			declared to be sequence data character blocks that have
+			"augmented" symbols lists into the standard datatype.
+		*/
+		void SetAllowAugmentingOfSequenceSymbols(bool v)
+			{
+			allowAugmentingOfSequenceSymbols = v;
+			}
+
+		/*! \retutrns the setting of allowAugmentingOfSequenceSymbols.
+			The default is false.
+			\ref mixedDatatypes
+		*/
+		bool GetAllowAugmentingOfSequenceSymbols() const
+			{
+			return allowAugmentingOfSequenceSymbols;
+			}
+		/*! \returns a data structure that allows you to identify the set of character
+			indices (each element in [0, nchar) range). If the type is not mixed, then
+			the map may be empty.
+		*/
+		std::map<DataTypesEnum, NxsUnsignedSet> GetDatatypeMapForMixedType() const
+			{
+			return mixedTypeMapping;
+			}
+
+
+		/*! \returns a facet of the DataTypesEnum that indicates the general type
+				of data. Because symbols can be augmented non-default polymorphism codes
+				can be introduced, this is not a complete description of the datatype
+				encoding.
+
+			If you want to test if the internal representation datatype of a NxsCharactersBlock
+				has been modified use some form of this idiom:
+
+			mapper = charBlock.GetDatatypeMapperForChar(0);
+			const bool hasGaps = charBlock.GetGapSymbol() != '\0';
+			NxsDiscreteDatatypeMapper defaultMapper(NxsCharactersBlock::dna, hasGaps);
+			if (mapper->IsSemanticallyEquivalent(&defaultMapper))
+				{
+				// the datatype has not been changed in a substantive way.
+				}
+			else
+				{
+				// new state codes have been introduced, so routines that do not
+				//	interrogate the mapper to check the mapper about the status of all of the
+				//	states may fail.
+				}
+
+
+
+		*/
+		DataTypesEnum GetDataType() const;
+		/*! Returns true If character `taxInd' has some stored character state. Assumes `taxInd' is in the range [0..`nchar').
+		*/
+		bool TaxonIndHasData(const unsigned ind) const;
+		/*! \returns the number of characters stored in the block.*/
+		unsigned GetNCharTotal() const ;
+		/*! Returns datatype listed in the CHARACTERS block.
+			The original datatype can differ from the current datatype if the datatype
+				was listed as a sequence type, but the symbols list of a built in type was augmented
+				(thus converting it to standard).
+			This will only happen if SetAllowAugmentingOfSequenceSymbols(true) has been called on the block.
+			see \ref mixedDatatypes
+		*/
+		DataTypesEnum GetOriginalDataType() const;
+		/*! Returns the number of characters that have not been exclude (via exset or eliminate command, for
+			example).
+			Synonymous with GetNumIncludedChars and (GetNChar - GetNumEliminated)
+		*/
+		unsigned GetNumActiveChar() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		/*! \returns a reference to the set of indices that are currently excluded. */
+		const NxsUnsignedSet & GetExcludedIndexSet() const;
+		/*! \returns true if character `j' is active. If character `j' has been excluded, returns false.
+			Assumes `j' is in the range [0..`nchar')
+		*/
+		bool IsActiveChar(unsigned j) const;
+		/*!  excludes all of the  indices in exset.
+
+			indices should be in the range [0, nchar)
+		*/
+		unsigned ApplyExset(NxsUnsignedSet &exset);
+		/*!  includes all of the  indices in exset.
+
+			indices should be in the range [0, nchar)
+		*/
+		unsigned ApplyIncludeset(NxsUnsignedSet &inset);
+		/*!  excludes character `i`
+
+			i should be in the range [0, nchar)
+		*/
+		void ExcludeCharacter(unsigned i);
+		/*!  includes character `i`
+
+			i should be in the range [0, nchar)
+		*/
+		void IncludeCharacter(unsigned i);
+
+		/*! \returns the label for character `i` has a label or a string with a single space if the is no label*/
+		NxsString GetCharLabel(unsigned i) const; /*v2.1to2.2 4 */
+		/*! \returns true if charlabels were stored for the matrix*/
+		bool HasCharLabels() const;
+		/*! \returns the current gapMode setting
+		During a parse this is controlled by the OPTIONS command in the ASSUMPTIONS block).
+			\note{The gapmode setting basically just holds the value for the client code's convenience.
+			It only affects post-read operations, such as NxsCharactersBlock::GetObsStates.
+			It does NOT change the internal encoding of the data (just triggers some filtering) of the data}
+		*/
+		GapModeEnum GetGapModeSetting() const
+		{
+			return this->gapMode;
+		}
+
+		//v2.0 API that queries based on symbols see \ref NxsCharacterBlockQueries
+		const char *GetSymbols() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		unsigned GetNumStates(unsigned i, unsigned j) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		char GetState(unsigned i, unsigned j, unsigned k = 0) const;
+		/*! \returns a reference to the Transformation Manager that stores information such as character transformation type (ORDERED, UNORDERED...)*/
+		const NxsTransformationManager & GetNxsTransformationManagerRef() const
+			{
+			return transfMgr;
+			}
+		/*! Returns true iff taxon `taxInd` has a gap for character `charInd` (both indices 0-based)*/
+		bool IsGapState(unsigned taxInd, unsigned charInd) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		/*! Returns true iff taxon `taxInd` has is missing for character `charInd` (both indices 0-based) */
+		bool IsMissingState(unsigned i, unsigned j) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		/*! Returns true iff taxon `taxInd` has is missing for character `charInd` (both indices 0-based) */
+		bool IsPolymorphic(unsigned i, unsigned j) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+
+	//v2.1 API for extracting character info
+	// for discrete characters
+		/*! \returns a const reference to the row of state codes for the taxon.
+
+			This enables faster access to the data. See \ref newerCharQueries
+
+			The row should not be modified by the caller.
+
+			taxonIndex should be in the range [0, ntax)
+		*/
+		const NxsDiscreteStateRow & GetDiscreteMatrixRow(unsigned taxonIndex) const;
+		/* \returns a pointer to the the NxsDiscreteDatatypeMapper that "knows" how the
+			internal state code labellings corrspond to symbols.
+
+			If the datatype is not mixed, then the same instance will apply regardless of
+			character index.
+
+			charIndex should be in the range [0, nchar)
+		*/
+		const NxsDiscreteDatatypeMapper * GetDatatypeMapperForChar(unsigned charIndex) const;
+		/*! \returns a vector of all of the NxsDiscreteDatatypeMapper used by any char in the matrix.
+
+			If the datatype is not mixed, then the vector should have length 1.
+
+			See GetDatatypeMapForMixedType().
+		*/
+		std::vector<const NxsDiscreteDatatypeMapper *> GetAllDatatypeMappers() const;
+
+	// For continuous characters
+		/*! \returns the vector of values for the appropriate item `key` in the indicated cell of the matrix.
+
+			For continuous data matrices, each cell of the matrix can store multiple "items"
+			such as the average, range, max...
+			This function retrieves the collection of data for the taxon `taxIndex`
+			and the character `taxIndex` and then returns the values for the item designated by `key`
+
+			GetItems() returns the list of all possible items
+		*/
+		std::vector<double> GetContinuousValues(unsigned taxIndex, unsigned charIndex, const std::string key) NCL_COULD_BE_CONST; /*v2.1to2.2 1 */
+		/*! \returns vector of items stored for each cell. (this is mainly relevant for continouos data).
+			For discrete data, only "STATES" is supported.
+		*/
+		std::vector<std::string> GetItems() const;
+		/*! \returns a facet of the StatesFormatEnum to indicate what the states mean for a cell.
+
+			For discrete data, only STATES_PRESENT is accepted by NCL.
+			For continuous matrices either STATES_PRESENT or INDIVIDUALS will be accepted.
+		*/
+		StatesFormatEnum GetStatesFormat() const;
+
+
+
+	// Functions that are used by many NCL-clients, but are often not needed
+		void FindConstantCharacters(NxsUnsignedSet &c) const;
+		void FindGappedCharacters(NxsUnsignedSet &c) const;
+		virtual const std::string & GetBlockName() const;
+		/*! sets the current gapMode setting.
+			During a parse this is controlled by the OPTIONS command in the ASSUMPTIONS block).
+			\note{The gapmode setting basically just holds the value for the client code's convenience.
+			It only affects post-read operations, such as NxsCharactersBlock::GetObsStates.
+			It does NOT change the internal encoding of the data (just triggers some filtering) of the data}
+		*/
+		void SetGapModeSetting(GapModeEnum m)
+		{
+			this->gapMode = m;
+		}
+		static const char * GetNameOfDatatype(DataTypesEnum);
+		NxsDiscreteStateCell GetInternalRepresentation(unsigned i, unsigned j, unsigned k = 0) NCL_COULD_BE_CONST; /*v2.1to2.2 1 */
+		/*! \returns the maximum observed number of states for any character.
+			\note{this function is slow}
+
+			If `onlyActiveChars` is true then calculation will skip characters that have been excluded (eg. by an exset).
+
+		*/
+		virtual unsigned GetMaxObsNumStates(bool countMissingStates=true, bool onlyActiveChars=false) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		/*! \returns the number of states observed in a column
+			If `countMissingStates` is true then missing data is treated as an observation of each state. If
+				it is false then missing codes do not contribute to the count.
+			Partially ambiguous states result in all states in the cell being counted as observed.
+
+			columnIndex should be in [0, nchar)
+			\warning{If countMissingStates is true then it a gap as a state, if countMissingStates is false
+			the the gap will count as a state if the gapmode is GAP_MODE_NEWSTATE}
+		*/
+		virtual unsigned GetNumObsStates(unsigned columnIndex, bool countMissingStates=true) NCL_COULD_BE_CONST { /*v2.1to2.2 1 */
+			return (unsigned)GetObsStates(columnIndex, countMissingStates).size();
+		}
+		/*! Returns the set of "fundamental" states seen in a column (possibly including the gap "state").
+
+			If `countMissingStates` is true then missing data is treated as an observation of each state. If
+				it is false then missing codes do not contribute to the count.
+			Partially ambiguous states result in all states in the cell being counted as observed.
+
+			columnIndex should be in [0, nchar)
+			\warning{If countMissingStates is true then it a gap as a state, if countMissingStates is false
+			a gap will count as a state if the gapmode is GAP_MODE_NEWSTATE}
+		*/
+		std::set<NxsDiscreteStateCell> GetObsStates(unsigned columnIndex, bool countMissingStates=true) const {
+			if (countMissingStates)
+				return GetMaximalStateSetOfColumn(columnIndex);
+			return GetNamedStateSetOfColumn(columnIndex);
+		}
+
+		double GetSimpleContinuousValue(unsigned i, unsigned j) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+
+		/*! \returns label for character state `charStateIndex' at character `charIndex', if a label has been specified. If no label was specified,
+			returns string containing a single blank (i.e., " ").
+
+			Both charIndex and charStateIndex should be 0-based
+		*/
+		NxsString GetStateLabel(unsigned charIndex, unsigned charStateIndex) const /*v2.1to2.2 4 */
+			{
+			return GetStateLabelImpl(charIndex, charStateIndex);
+			}
+		/*! If a datatype is standard, then it may have been originally specified as "restriction".
+
+			The restriction site datatype was added by MrBayes, It is supported by NCL, but you have
+			to call this function to see if the matrix was specified as restriction site data (we did not
+			add a facet to the DataTypesEnum to avoid the need to extend other code).
+		*/
+		bool WasRestrictionDataype() const;
+
+
+
+	// Rarely-needed functions (usually used mainly internally by NCL)
+		static std::map<char, NxsString> GetDefaultEquates(DataTypesEnum);
+		static std::string GetDefaultSymbolsForType(DataTypesEnum dt);
+		const NxsDiscreteDatatypeMapper & GetDatatypeMapperForCharRef(unsigned charIndex) const;
+		/*! \return the datatype as a human-readable string (uses NxsCharactersBlock::GetNameOfDatatype)*/
+		const char * GetDatatypeName() const
+			{
+			return NxsCharactersBlock::GetNameOfDatatype(datatype);
+			}
+		char GetGapSymbol() const;
+		void SetGapSymbol(char);
+		char GetMatchcharSymbol() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		char GetMissingSymbol() const;
+		unsigned GetMaxIndex() const;
+		const NxsDiscreteStateMatrix & GetRawDiscreteMatrixRef() const
+			{
+			return discreteMatrix;
+			}
+
+
+	// Low-level functions (difficult to use, or with potentially suprising behavior). These are used internally by NCL
+		virtual unsigned CharLabelToNumber(NxsString s) NCL_COULD_BE_CONST ; /*v2.1to2.2 d */
+		virtual unsigned CharLabelToNumber(const std::string & s) const;
+		unsigned GetIndexSet(const std::string &label, NxsUnsignedSet * toFill) const
+			{
+			return NxsLabelToIndicesMapper::GetIndicesFromSets(label, toFill, charSets);
+			}
+		unsigned GetIndicesForLabel(const std::string &label, NxsUnsignedSet *inds) const;
+		unsigned GetNCharTotal() ; // non const version for backwark compat.
+		unsigned GetNumIncludedChars() const ; // synonymous with GetNumActiveChar
+		unsigned GetNumEliminated() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */ //backward-compat.
+		unsigned GetNChar() const;
+		unsigned GetNumChar() const;
+		// poor function name -- same as GetNumObsStates. Backward compatibility \deprecated
+		virtual unsigned GetObsNumStates(unsigned columnIndex, bool countMissingStates=true) NCL_COULD_BE_CONST { /*v2.1to2.2 1 */
+			return (unsigned) GetObsStates(columnIndex, countMissingStates).size();
+		}
+		/*! Returns label for character state `charStateIndex' at character `charIndex', if a label has been specified. If no label was specified,
+			returns string containing a single blank (i.e., " ").
+		*/
+		NxsString GetStateLabel(unsigned charIndex, unsigned charStateIndex) /*v2.1to2.2 4 */ //			non-const version for backward compat
+
+			{
+			return GetStateLabelImpl(charIndex, charStateIndex);
+			}
+		/* It is probably better to ask for the taxa block (via GetTaxaBlockPtr() method) and then have
+			the full TaxaBlockAPI to query from rather than ask about the taxa via the characters block.*/
+		NxsString GetTaxonLabel(unsigned i) const; /*v2.1to2.2 4 */
+
+		// non-const version
+		NxsTransformationManager & GetNxsTransformationManagerRef()
+			{
+			return transfMgr;
+			}
+		bool IsActiveChar(unsigned j) ; // non-const version for backward
+		bool IsEliminated(unsigned charIndex) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */ //same as (!IsActive(charIndex))
+		bool IsExcluded(unsigned j) const; //same as IsEliminated(j)
+		bool IsExcluded(unsigned j) ;  //same as IsEliminated(j) non-const for backward compat.
+		bool IsMixedType() const;
+
+		virtual unsigned TaxonLabelToNumber(NxsString s) const; /*v2.1to2.2 4 */
+		virtual bool AddNewCodonPosPartition(const std::string &label, const NxsPartition & inds, bool isDefault);
+		bool AddNewIndexSet(const std::string &label, const NxsUnsignedSet & inds);
+		bool AddNewExSet(const std::string &label, const NxsUnsignedSet & inds);
+		bool AddNewPartition(const std::string &label, const NxsPartition & inds);
+		void Consume(NxsCharactersBlock &other);
+		/*! Behaves like GetMaximalStateSetOfColumn except that missing data columns do not increase
+			size of the returned state set.
+			This function is sensitive to the gapmode setting. A gap will count as a state if the gapmode is
+			GAP_MODE_NEWSTATE.
+
+			columnIndex should be in [0, nchar)
+		*/
+		std::set<NxsDiscreteStateCell> GetNamedStateSetOfColumn(const unsigned colIndex) const;
+		/*! Returns the set of "fundamental" states seen in a column (possibly including the gap "state").
+
+			Missing data, gaps, and partially ambiguous cells result in all states in the cell being counted as observed.
+
+			columnIndex should be in [0, nchar)
+
+		*/
+		std::set<NxsDiscreteStateCell> GetMaximalStateSetOfColumn(const unsigned colIndex) const;
+
+
+
+
+	// Output/writing functions
+		virtual void Report(std::ostream &out) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		void ShowStateLabels(std::ostream &out, unsigned i, unsigned c, unsigned first_taxon) const;
+		void WriteAsNexus(std::ostream &out) const;
+		virtual void DebugShowMatrix(std::ostream &out, bool use_matchchar, const char *marginText = NULL) const;
+		virtual void WriteLinkCommand(std::ostream &out) const;
+		void WriteStatesForTaxonAsNexus(std::ostream &out, unsigned taxNum, unsigned begChar, unsigned endChar) const;
+		void WriteCharLabelsCommand(std::ostream &out) const;
+		void WriteCharStateLabelsCommand(std::ostream &out) const;
+		void WriteEliminateCommand(std::ostream &out) const;
+		void WriteFormatCommand(std::ostream &out) const;
+		void WriteMatrixCommand(std::ostream &out) const;
+
+
+
+	// parsing related functions (used internally by NCL, rarely needed by client code)
+		bool IsInterleave() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool IsLabels() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool IsRespectCase() const;
+		bool IsTokens() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool IsTranspose() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		/* Returns the number of taxa that should be stored. Used during the parse.
+			\warning{After parsing, use TaxonIndHasData() for each taxon rather than this function.}
+			\todo{After the parse this, GetNTaxWithData() *should* agree with GetNTaxTotal(). We need a
+			test for this needed property of }
+		*/
+		unsigned GetNTaxWithData() const ; //
+		virtual VecBlockPtr GetImpliedBlocks();
+		unsigned GetNumEquates() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		unsigned GetNumUserEquates() const;
+		unsigned GetNumMatrixCols() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		/* Returns the number of taxa (should agree with GetNTaxTotal()) */
+		unsigned GetNumMatrixRows() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void Reset();
+		void SetNexus(NxsReader *nxsptr);
+		const ContinuousCharRow & GetContinuousMatrixRow(unsigned taxNum) const;
+
+
+		/*only used it the linkAPI is enabled*/
+		virtual void HandleLinkCommand(NxsToken & token);
+
+
+
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, assumptionsBlock blocks!
+		*/
+		NxsCharactersBlock & operator=(const NxsCharactersBlock &other)
+			{
+			Reset();
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			CopyTaxaBlockSurrogateContents(other);
+			CopyCharactersContents(other);
+			return *this;
+			}
+
+		virtual void CopyCharactersContents(const NxsCharactersBlock &other);
+		virtual NxsCharactersBlock * Clone() const
+			{
+			NxsCharactersBlock * a = new NxsCharactersBlock(taxa, assumptionsBlock);
+			*a = *this;
+			return a;
+			}
+
+
+		void SetWriteInterleaveLen(int interleaveLen)
+			{
+			writeInterleaveLen = interleaveLen;
+			}
+
+		std::string GetMatrixRowAsStr(const unsigned rowIndex) const;
+		NxsDiscreteStateCell	GetStateIndex(unsigned i, unsigned j, unsigned k) const;
+
+
+		/** converts a CodonPosPartition into the list<int> argument needed for the NewCodonsCharactersBlock call */
+		static void CodonPosPartitionToPosList(const NxsPartition &codonPos, std::list<int> * charIndices);
+
+		/* allocates a new charaters block with all of the active characters in `charBlock`
+			but with a 64-state codon datatype. The order of codons is:
+			 0   1   2   3   4   5  ... 63
+			AAA AAC AAG AAT ACA ACC ... TTT
+			The caller is responsible for deleting the new NxsCharactersBlock object
+			If charIndices is provided, it lists the bases in the RF by position the int can be < 0 to indicate that that position was not sampled
+		*/
+		static NxsCharactersBlock * NewCodonsCharactersBlock(
+			const NxsCharactersBlock * charBlock,
+			bool mapPartialAmbigToUnknown,
+			bool gapsToUnknown,
+			bool honorCharActive, /* if true then inactive characters are treated as missing */
+			const std::list<int> * charIndices = NULL, /* specifies the indices of the positions in the gene. -1 can be used to indicate tha codon position was not included in the original matrix */
+			NxsCharactersBlock ** spareNucs = NULL /* If non-null, then, on exit the NxsCharactersBlock * pointer will refer to a new character block with all of the positions that were not translated (all of the non-coding nucleotide positions) */
+			);
+		static NxsCharactersBlock * NewProteinCharactersBlock(
+			const NxsCharactersBlock * codonBlock,
+			bool mapPartialAmbigToUnknown,
+			bool gapToUnknown,
+			NxsGeneticCodesEnum codeIndex);
+		static NxsCharactersBlock * NewProteinCharactersBlock(
+			const NxsCharactersBlock * codonBlock,
+			bool mapPartialAmbigToUnknown,
+			bool gapToUnknown,
+			const std::vector<NxsDiscreteStateCell> & aaIndices); /** the index of the amino acid symbols for the codon (where the order of codons is alphabetical: AAA, AAC, AAG, AAT, ACA, ...TTT **/
+
+		virtual std::string GetDefaultCodonPosPartitionName() const {
+			return defCodonPosPartitionName;
+		}
+		virtual NxsPartition GetCodonPosPartition(const std::string &label) const {
+			NxsPartitionsByName::const_iterator pIt = codonPosPartitions.find(label);
+			if (pIt == codonPosPartitions.end())
+				return NxsPartition();
+			return pIt->second;
+		}
+
+		unsigned NumAmbigInTaxon(const unsigned taxInd, const NxsUnsignedSet * charIndices, const bool countOnlyCompletelyMissing, const bool treatGapsAsMissing) const;
+		bool FirstTaxonStatesAreSubsetOfSecond(const unsigned firstTaxonInd, const unsigned secondTaxonInd, const NxsUnsignedSet * charIndices, const bool treatAmbigAsMissing, const bool treatGapAsMissing) const;
+		//Returns the number of characters that differ, and the number of positions for which both taxa were non-missing
+
+		std::pair<unsigned, unsigned> GetPairwiseDist(const unsigned firstTaxonInd, const unsigned secondTaxonInd, const NxsUnsignedSet * charIndices, const bool treatAmbigAsMissing, const bool treatGapAsMissing) const;
+		CodonRecodingStruct RemoveStopCodons(NxsGeneticCodesEnum);
+		bool SwapEquivalentTaxaBlock(NxsTaxaBlockAPI * tb)
+		{
+			return SurrogateSwapEquivalentTaxaBlock(tb);
+		}
+
+		/*! Writes a range of characater states as NEXUS to out.
+
+		*/
+		void WriteStatesForMatrixRow(std::ostream &out, /*!< ostream that will be written to.*/
+									unsigned taxon, /*!< index of the row (taxon) to be written.  Should be in [0,ntax). */
+									unsigned first_taxon, /*!< UINT_MAX to avoid using the matchchar in output. Otherwise the [0,ntax) index of the taxon that is printed first. */
+									unsigned begChar, /*!< first character index to write. Should be in [0, nchar). */
+									unsigned endChar) const; /*!< end of character range. This index is one greater than the last index to be printed. Should be in the range (begChar, nchar] */
+
+
+	protected:
+		// This function should not be called to remove characters, it is only used in the creation of new char blocks from existing blocks
+		void SetNChar(unsigned nc)
+			{
+			this->nChar = nc;
+			}
+		// This function should not be called to remove characters, it is only used in the creation of new char blocks from existing blocks
+		void SetNTax(unsigned nt)
+			{
+			this->nTaxWithData = nt;
+			}
+
+		NxsString GetStateLabelImpl(unsigned i, unsigned j) const; /*v2.1to2.2 4 */
+
+		NxsDiscreteDatatypeMapper * GetMutableDatatypeMapperForChar(unsigned charIndex);
+		bool IsInSymbols(char ch) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		void ShowStates(std::ostream &out, unsigned i, unsigned j) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+
+		void HandleCharlabels(NxsToken &token);
+		void HandleCharstatelabels(NxsToken &token);
+		void HandleDimensions(NxsToken &token, NxsString newtaxaLabel, NxsString ntaxLabel, NxsString ncharLabel);
+		void HandleEliminate(NxsToken &token);
+		virtual void HandleFormat(NxsToken &token);
+		virtual void HandleMatrix(NxsToken &token);
+		bool HandleNextContinuousState(NxsToken &token, unsigned taxNum, unsigned charNum, ContinuousCharRow & row, const NxsString & nameStr);
+		bool HandleNextDiscreteState(NxsToken &token, unsigned taxNum, unsigned charNum, NxsDiscreteStateRow & row, NxsDiscreteDatatypeMapper &, const NxsDiscreteStateRow * firstTaxonRow, const NxsString & nameStr);
+		bool HandleNextTokenState(NxsToken &token, unsigned taxNum, unsigned charNum, NxsDiscreteStateRow & row, NxsDiscreteDatatypeMapper &, const NxsDiscreteStateRow * firstTaxonRow, const NxsString & nameStr);
+		void HandleStatelabels(NxsToken &token);
+		virtual void HandleStdMatrix(NxsToken &token);
+		virtual NxsDiscreteStateCell HandleTokenState(NxsToken &token, unsigned taxNum, unsigned charNum, NxsDiscreteDatatypeMapper &mapper, const NxsDiscreteStateRow * firstTaxonRow, const NxsString & nameStr);
+		virtual void HandleTransposedMatrix(NxsToken &token);
+		virtual void Read(NxsToken &token);
+		void ResetSymbols();
+
+		void WriteStates(NxsDiscreteDatum &d, char *s, unsigned slen) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+
+
+		NxsAssumptionsBlockAPI	*assumptionsBlock;	/* pointer to the ASSUMPTIONS block in which exsets, taxsets and charsets are stored */
+
+		unsigned nChar; /* number of columns in matrix	*/
+		unsigned nTaxWithData; /* number of non empty rows in the matrix*/
+
+		char matchchar; /* match symbol to use in matrix */
+		bool respectingCase; /* if true, RESPECTCASE keyword specified in FORMAT command */
+		bool transposing; /* indicates matrix will be in transposed format */
+		bool interleaving; /* indicates matrix will be in interleaved format */
+		mutable bool tokens; /* if false, data matrix entries must be single symbols; if true, multicharacter entries are allows */
+		bool labels; /* indicates whether or not labels will appear on left side of matrix */
+
+		char missing; /* missing data symbol */
+		char gap; /* gap symbol for use with molecular data */
+		GapModeEnum gapMode; /* manipulated by the assumptions block. This setting basically just holds the value. It only affects post-read operations, such as GetNamedStateSetOfColumn and it does NOT change the internal encoding of the data (just triggers some filtering) */
+		std::string symbols; /* list of valid character state symbols */
+		std::map<char, NxsString> userEquates; /* list of associations defined by EQUATE attribute of FORMAT command */
+		std::map<char, NxsString> defaultEquates;
+		VecDatatypeMapperAndIndexSet datatypeMapperVec;
+		NxsDiscreteStateMatrix	discreteMatrix; /* storage for discrete data */
+		ContinuousCharMatrix	continuousMatrix;	/* */
+
+		NxsUnsignedSet eliminated; /* array of (0-offset) character numbers that have been eliminated (will remain empty if no ELIMINATE command encountered) */
+		NxsUnsignedSet excluded; /* set of (0-offset) indices of characters that have been excluded.*/
+
+		LabelToIndexMap ucCharLabelToIndex;
+		IndexToLabelMap indToCharLabel;
+		NxsStringVectorMap charStates; /* storage for character state labels (if provided) */
+		NxsStringVector globalStateLabels; /* state labels that apply to all characters (if not pre-empted by thy charStates field) */
+		VecString items;
+
+		NxsUnsignedSetMap charSets;
+		NxsUnsignedSetMap exSets;
+		NxsPartitionsByName charPartitions;
+		NxsTransformationManager transfMgr;
+		bool datatypeReadFromFormat;
+		NxsPartitionsByName codonPosPartitions;
+		std::string defCodonPosPartitionName;
+		std::map<DataTypesEnum, NxsUnsignedSet> mixedTypeMapping;
+	private:
+		DataTypesEnum datatype; /* flag variable (see datatypes enum) */
+		DataTypesEnum originalDatatype; /* flag variable (see datatypes enum) */
+		StatesFormatEnum statesFormat;
+		bool restrictionDataype;
+		bool supportMixedDatatype;	/* (false by default) flag for whether or not MrBayes-style Mixed blocks should be supported */
+		bool convertAugmentedToMixed; /* false by default (see AugmentedSymbolsToMixed) */
+		bool allowAugmentingOfSequenceSymbols;
+		int writeInterleaveLen;
+
+		void CreateDatatypeMapperObjects(const NxsPartition & , const std::vector<DataTypesEnum> &);
+		friend class PublicNexusReader;
+		friend class MultiFormatReader;
+	};
+
+typedef NxsCharactersBlock CharactersBlock;
+
+
+class NxsCharactersBlockFactory
+	:public NxsBlockFactory
+	{
+	public:
+		virtual NxsCharactersBlock	*	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
+	};
+
+class NxsDiscreteStateSetInfo
+	{
+	public:
+		NxsDiscreteStateSetInfo(const std::set<NxsDiscreteStateCell> & stateSet, bool polymorphic=false, char symbol='\0')
+			:states(stateSet),
+			nexusSymbol(symbol),
+			isPolymorphic(polymorphic)
+			{}
+
+
+		std::set<NxsDiscreteStateCell> states;
+		char nexusSymbol;
+		bool isPolymorphic;
+	};
+
+/*! This class stores the information needed to map the internal storage for a cell of a matrix (a "state code") to
+	the set of states that it corresponds to.
+*/
+class NxsDiscreteDatatypeMapper
+	{
+	public:
+
+
+
+
+		static void GenerateNxsExceptionMatrixReading(const char *, unsigned taxInd, unsigned charInd, NxsToken *, const NxsString &nameStr);
+		static void GenerateNxsExceptionMatrixReading(const std::string &s, unsigned taxInd, unsigned charInd, NxsToken * token, const NxsString &nameStr)
+			{
+			GenerateNxsExceptionMatrixReading(s.c_str(), taxInd, charInd, token, nameStr);
+			}
+
+
+		NxsDiscreteDatatypeMapper();
+		NxsDiscreteDatatypeMapper(NxsCharactersBlock::DataTypesEnum datatypeE, bool hasGaps);
+		NxsDiscreteDatatypeMapper(NxsCharactersBlock::DataTypesEnum datatype, const std::string & symbols,
+								char missingChar, char gapChar, char matchChar,
+								bool respectCase, const std::map<char, NxsString> & extraEquates);
+
+		/*! \returns the number of state codes (including partially ambiguous) */
+		unsigned GetNumStateCodes() const
+		    {
+		    return (unsigned)stateSetsVec.size();
+		    }
+
+		NxsCharactersBlock::DataTypesEnum GetDatatype() const
+			{
+			return datatype;
+			}
+		unsigned GetNumStates() const;
+		unsigned GetNumStatesIncludingGap() const;
+		std::string GetSymbols() const
+		    {
+		    return symbols;
+		    }
+		std::string GetSymbolsWithGapChar() const
+		    {
+		    if (gapChar == '\0')
+		    	return GetSymbols();
+		    std::string s;
+		    s = symbols;
+		    s.append(1, gapChar);
+		    return s;
+		    }
+
+		const std::set<NxsDiscreteStateCell> & GetStateSetForCode(NxsDiscreteStateCell stateCode) const;
+		bool IsSemanticallyEquivalent(const NxsDiscreteDatatypeMapper &other) const;
+		bool IsPolymorphic(NxsDiscreteStateCell stateCode) const;
+		NxsDiscreteStateCell PositionInSymbols(const char currChar) const;
+		/*! Returns a state code for a NEXUS symbol.
+
+			will return NXS_INVALID_STATE_CODE if the char is unknown
+		*/
+		NxsDiscreteStateCell GetStateCodeStored(char currChar) const
+			{
+			  return cLookup[static_cast<int>(currChar)];
+			}
+		/*! \returns the highest legal internal state code (this is note the number of
+			state codes because the missing data and gap codes are negative).
+
+			Note that this is the highest state code that the mapper understands, it does
+				not imply that the NxsCharacterBlock that "owns" the mapper has a matrix
+				with a state code that is as large as the number returned.
+
+		*/
+		NxsDiscreteStateCell GetHighestStateCode() const
+			{
+			return ((NxsDiscreteStateCell) stateSetsVec.size()) + sclOffset - 1;
+			}
+
+
+
+
+
+		NxsDiscreteDatatypeMapper(const NxsDiscreteDatatypeMapper& other)
+			:datatype(other.datatype)
+			{
+			*this = other;
+			}
+		NxsDiscreteDatatypeMapper & operator=(const NxsDiscreteDatatypeMapper&);
+
+		char GetGapSymbol() const
+		    {
+		    return gapChar;
+		    }
+		// warning: unsafe to call after reading -- does not recode data!
+		void SetGapSymbol(char c)
+		    {
+		    gapChar = c;
+		    }
+		char GetMissingSymbol() const
+		    {
+		    return missing;
+		    }
+		std::map<char, NxsString> GetExtraEquates() const
+			{
+			return extraEquates;
+			}
+		unsigned GetNumStatesInStateCode(NxsDiscreteStateCell stateCode) const;
+		NxsDiscreteStateCell GetOneStateForCode(NxsDiscreteStateCell stateCode, unsigned stateIndex) const;
+		NxsDiscreteStateRow GetStateVectorForCode(NxsDiscreteStateCell stateCode) const;
+		std::vector<std::vector<int> > GetPythonicStateVectors() const;
+		NxsDiscreteStateCell PositionInSymbolsOrGaps(const char currChar) const
+			{
+			if (currChar == gapChar)
+				return NXS_GAP_STATE_CODE;
+			return PositionInSymbols(currChar);
+			}
+		std::string StateCodeToNexusString(NxsDiscreteStateCell, bool demandSymbols = true) const;
+		NxsDiscreteStateCell StateCodeForNexusChar(const char currChar, NxsToken * token,
+								  unsigned taxInd, unsigned charInd,
+								  const NxsDiscreteStateRow * firstTaxonRow, const NxsString &nameStr) const;
+		void WriteStartOfFormatCommand(std::ostream & out) const;
+		void WriteStateCodeRowAsNexus(std::ostream & out, const std::vector<NxsDiscreteStateCell> &row) const;
+		void WriteStateCodeRowAsNexus(std::ostream & out, std::vector<NxsDiscreteStateCell>::const_iterator & begIt, const std::vector<NxsDiscreteStateCell>::const_iterator & endIt) const;
+		void WriteStateCodeAsNexusString(std::ostream & out, NxsDiscreteStateCell scode, bool demandSymbols = true) const;
+		bool WasRestrictionDataype() const;
+		void SetWasRestrictionDataype(bool v) {restrictionDataype = v;}
+		NxsDiscreteStateCell EncodeNexusStateString(const std::string &stateAsNexus, NxsToken & token,
+								   const unsigned taxInd, const unsigned charInd,
+								   const NxsDiscreteStateRow * firstTaxonRow, const NxsString &nameStr);
+		NxsDiscreteStateCell StateCodeForStateSet(const std::set<NxsDiscreteStateCell> &, const bool isPolymorphic,
+								 const bool addToLookup, const char symbol);
+
+		void DebugPrint(std::ostream &) const;
+
+ 		bool GetUserDefinedEquatesBeforeConversion() const
+ 			{
+ 			return userDefinedEquatesBeforeConversion;
+			}
+
+		bool IsRespectCase() const
+			{
+			return respectCase;
+			}
+
+		const std::set<NxsDiscreteStateCell> & GetStateIntersection(NxsDiscreteStateCell stateCode, NxsDiscreteStateCell otherStateCode) const
+			{
+			if (stateIntersectionMatrix.empty())
+				BuildStateIntersectionMatrix();
+			const NxsDiscreteStateCell sc = stateCode - NXS_GAP_STATE_CODE;
+			const NxsDiscreteStateCell osc = otherStateCode - NXS_GAP_STATE_CODE;
+			return stateIntersectionMatrix.at(sc).at(osc);
+			}
+
+		bool FirstIsSubset(NxsDiscreteStateCell stateCode, NxsDiscreteStateCell otherStateCode, bool treatGapAsMissing) const
+			{
+			if (isStateSubsetMatrix.empty())
+				BuildStateSubsetMatrix();
+			const NxsDiscreteStateCell sc = stateCode - NXS_GAP_STATE_CODE;
+			const NxsDiscreteStateCell osc = otherStateCode - NXS_GAP_STATE_CODE;
+			if (treatGapAsMissing)
+				return isStateSubsetMatrixGapsMissing.at(sc).at(osc);
+			return isStateSubsetMatrix.at(sc).at(osc);
+			}
+
+		NxsGeneticCodesEnum geneticCode; /* only used for compressed codon codings */
+
+		/*! can be used to "See" the mapping while debugging */
+		void DebugWriteMapperFields(std::ostream & out) const;
+	private:
+		NxsDiscreteStateCell AddStateSet(const std::set<NxsDiscreteStateCell> & states, char nexusSymbol, bool symRespectCase, bool isPolymorphic);
+		NxsDiscreteStateCell StateCodeForNexusMultiStateSet(const char nexusSymbol, const std::string & stateAsNexus, NxsToken * token,
+								  unsigned taxInd, unsigned charInd,
+								  const NxsDiscreteStateRow * firstTaxonRow, const NxsString &nameStr);
+		NxsDiscreteStateCell StateCodeForNexusPossibleMultiStateSet(const char nexusSymbol, const std::string & stateAsNexus, NxsToken & token,
+								  unsigned taxInd, unsigned charInd,
+								  const NxsDiscreteStateRow * firstTaxonRow, const NxsString &nameStr);
+
+		void RefreshMappings(NxsToken *token);
+		void ValidateStateIndex(NxsDiscreteStateCell state) const;
+		void ValidateStateCode(NxsDiscreteStateCell state) const;
+		void BuildStateSubsetMatrix() const;
+		void BuildStateIntersectionMatrix() const;
+		void DeleteStateIndices(const std::set<NxsDiscreteStateCell> & deletedInds);
+
+		NxsDiscreteStateCell * cLookup; /* Nexus char to state code lookup -- alias to member of charToStateCodeLookup*/
+		NxsDiscreteStateSetInfo * stateCodeLookupPtr; /* state code to NxsDiscreteStateSetInfo object table -- alias to stateSets */
+		std::string symbols;
+		std::string lcsymbols; /* lowercase symbols (in the same order as symbols) */
+		unsigned nStates;
+		char matchChar;
+		char gapChar;
+		char missing;
+		bool respectCase;
+		std::map<char, NxsString> extraEquates;
+		NxsCharactersBlock::DataTypesEnum datatype; /* flag variable (see datatypes enum) */
+		std::vector<NxsDiscreteStateSetInfo> stateSetsVec; /* memory management for cLookup*/
+		std::vector<NxsDiscreteStateCell> charToStateCodeLookup; /* stateCodeLookup */
+		int sclOffset; /* offset of stateCodeLookup in stateSets */
+		bool restrictionDataype;
+		bool userDefinedEquatesBeforeConversion;
+
+		typedef std::vector< std::set<NxsDiscreteStateCell> > StateIntersectionRow;
+		typedef std::vector< StateIntersectionRow > StateIntersectionMatrix;
+		typedef std::vector< bool > IsStateSubsetRow;
+		typedef std::vector< IsStateSubsetRow > IsStateSubsetMatrix;
+		mutable StateIntersectionMatrix stateIntersectionMatrix;
+		mutable IsStateSubsetMatrix isStateSubsetMatrix;
+		mutable IsStateSubsetMatrix isStateSubsetMatrixGapsMissing;
+
+		friend class NxsCharactersBlock;
+		friend class MultiFormatReader;
+	};
+
+inline unsigned NxsDiscreteDatatypeMapper::GetNumStatesIncludingGap() const
+	{
+	return nStates + (gapChar == '\0' ? 0 : 1);
+	}
+
+inline unsigned NxsDiscreteDatatypeMapper::GetNumStates() const
+	{
+	return nStates;
+	}
+
+/*!
+	Returns the set of state indices that correspond to the states of state code `c`
+	Generates a NxsNCLAPIException if `c` is not a valid state code.
+	Not as efficient as GetStateSetForCode
+*/
+inline std::vector<NxsDiscreteStateCell> NxsDiscreteDatatypeMapper::GetStateVectorForCode(NxsDiscreteStateCell c) const
+	{
+	const std::set<NxsDiscreteStateCell> & ss = GetStateSetForCode(c);
+	return std::vector<NxsDiscreteStateCell>(ss.begin(), ss.end());
+	}
+
+/*!
+	Returns the set of state indices that correspond to the states of state code `c`
+	Generates a NxsNCLAPIException if `c` is not a valid state code.
+*/
+inline const std::set<NxsDiscreteStateCell>	& NxsDiscreteDatatypeMapper::GetStateSetForCode(NxsDiscreteStateCell c) const
+	{
+	NCL_ASSERT(stateCodeLookupPtr);
+	ValidateStateCode(c);
+	return stateCodeLookupPtr[c].states;
+	}
+
+/*!
+	Returns the `stateIndex`-th state for `stateCode` Thus if stateCode = 6 and this corresponds to {AG}
+	then:
+		GetOneStateForCode(6, 0) would return 0 (assuming that A is state 0), and
+		GetOneStateForCode(6, 1) would return 2 (assuming that G is state 2 in the symbols list)
+*/
+inline NxsDiscreteStateCell NxsDiscreteDatatypeMapper::GetOneStateForCode(NxsDiscreteStateCell stateCode, unsigned stateIndex) const
+	{
+	const std::set<NxsDiscreteStateCell> & s = GetStateSetForCode(stateCode);
+	unsigned i = 0;
+	for (std::set<NxsDiscreteStateCell>::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt, ++i)
+		{
+		if (i == stateIndex)
+			return *sIt;
+		}
+	NCL_ASSERT(false);
+	throw NxsException("State index out of range in NxsDiscreteDatatypeMapper::GetOneStateForCode");
+	}
+
+/*!
+	Returns the NEXUS reperesenation of the state code `scode` which may be a multiple character string such as {DNY}
+	Generates a NxsNCLAPIException if `c` is not a valid state code.
+	If insufficient symbols exist, then `demandSymbols` controls the behavior (if true then an NxsNCLAPIException
+	is raised, otherwise an empty string is returned.
+
+	Note that
+		WriteStateCodeAsNexusString(out, c);
+	Is more efficient than
+		out << StateCodeToNexusString(c);
+*/
+inline std::string NxsDiscreteDatatypeMapper::StateCodeToNexusString(NxsDiscreteStateCell scode, bool demandSymbols) const
+	{
+	std::ostringstream o;
+	WriteStateCodeAsNexusString(o, scode, demandSymbols);
+	return o.str();
+	}
+
+
+/*!
+	Called from HandleStdMatrix or HandleTransposedMatrix function to read in the next state. Always returns true
+	except in the special case of an interleaved matrix, in which case it returns false if a newline character is
+	encountered before the next token.
+*/
+inline NxsDiscreteStateCell NxsDiscreteDatatypeMapper::EncodeNexusStateString(
+  const std::string &stateAsNexus,
+  NxsToken & token, /* the token used to read from `in' */
+  const unsigned taxInd, /* the taxon index, in range [0..`ntax') */
+  const unsigned charInd, /* the character index, in range [0..`nChar') */
+  const NxsDiscreteStateRow * firstTaxonRow, const NxsString &nameStr)
+	{
+	const unsigned tlen = (unsigned) stateAsNexus.length();
+	if (tlen == 0)
+		GenerateNxsExceptionMatrixReading("Unexpected empty token encountered", taxInd, charInd, &token, nameStr);
+	if (tlen == 1)
+		return StateCodeForNexusChar(stateAsNexus[0], &token, taxInd, charInd, firstTaxonRow, nameStr);
+	return StateCodeForNexusMultiStateSet('\0', stateAsNexus, &token, taxInd, charInd, firstTaxonRow, nameStr);
+	}
+
+/*! MrBayes introduced the datatype=restriction syntax for 01 symbols.
+	NCL reads this type as standard, but sets a flag. If the datatype is reported as Standard, then you can call
+	WasRestrictionDataype to see if the datatype was declared "RESTRICTION"
+*/
+inline bool NxsDiscreteDatatypeMapper::WasRestrictionDataype() const
+	{
+	return restrictionDataype;
+	}
+/*! MrBayes introduced the datatype=restriction syntax for 01 symbols.
+	NCL reads this type as standard, but sets a flag. If the datatype is reported as Standard, then you can call
+	WasRestrictionDataype to see if the datatype was declared "RESTRICTION"
+*/
+inline bool NxsCharactersBlock::WasRestrictionDataype() const
+	{
+	return restrictionDataype;
+	}
+
+inline void NxsCharactersBlock::SetNexus(NxsReader *nxsptr)
+	{
+	NxsBlock::SetNexus(nxsptr);
+	NxsTaxaBlockSurrogate::SetNexusReader(nxsptr);
+	}
+
+inline bool NxsCharactersBlock::IsMixedType() const
+	{
+	return (datatypeMapperVec.size() > 1);
+	}
+
+/*! Returns the list of items that will be in each cell. This is always "STATES" for discrete datatypes, but can be
+	a vector of any string for continuous types
+*/
+inline std::vector<std::string> NxsCharactersBlock::GetItems() const
+	{
+	return items;
+	}
+
+/*!
+	Accessor for getting the list of continuous values associated with an "ITEM." Usually, these vectors will have
+	length of 1, but the "STATES" item may have a list of all observed values.
+
+	Values of DBL_MAX indicate missing data.
+	An empty vector indicates that the key was not used in this cell.
+*/
+inline std::vector<double> NxsCharactersBlock::GetContinuousValues(
+	unsigned i, /* the taxon in range [0..`ntax') */
+	unsigned j, /* the character in range [0..`nChar') */
+	const std::string key) NCL_COULD_BE_CONST /* The name of the ITEM in the FORMAT command. Must be ALL CAPS.*/ /*v2.1to2.2 1 */
+	{
+	const ContinuousCharCell & cell = continuousMatrix.at(i).at(j);
+	ContinuousCharCell::const_iterator cIt = cell.find(key);
+	if (cIt == cell.end())
+		return std::vector<double>();
+	return cIt->second;
+	}
+
+/*! Short cut for returning the AVERAGE item, which is the default of a continuous cell type. Note this does not
+	compute the average, this is just a shortcut for dealing with simple continuous matrices that do not
+	use the ITEMS subcommand of FORMAT.
+
+	Values of DBL_MAX indicate missing data.
+*/
+inline double NxsCharactersBlock::GetSimpleContinuousValue(
+	unsigned i, /* the taxon in range [0..`ntax') */
+	unsigned j) NCL_COULD_BE_CONST /* the character in range [0..`nChar') */ /*v2.1to2.2 1 */
+	{
+	const std::vector<double> av = GetContinuousValues(i, j, std::string("AVERAGE"));
+	if (av.empty())
+		return DBL_MAX;
+	return av.at(0);
+	}
+
+
+/*!
+	Returns label for character `i' (starting at zero), if a label has been specified. If no label was specified, returns string
+	containing a single blank (i.e., " ").
+*/
+inline NxsString NxsCharactersBlock::GetCharLabel( /*v2.1to2.2 4 */
+  unsigned i) const	/* the character in range [0..`nChar') */
+	{
+	std::map<unsigned, std::string>::const_iterator tlIt = indToCharLabel.find(i);
+	if (tlIt == indToCharLabel.end())
+		return NxsString(" "); /*v2.1to2.2 4 */
+	return NxsString(tlIt->second.c_str()); /*v2.1to2.2 4 */
+	}
+
+/*!
+	Returns true if at least one character has charlabels
+*/
+inline bool NxsCharactersBlock::HasCharLabels() const
+	{
+	return !indToCharLabel.empty();
+	}
+/*!
+	Returns the gap symbol currently in effect. If no gap symbol specified, returns '\0'.
+*/
+inline char NxsCharactersBlock::GetGapSymbol() const
+	{
+	return gap;
+	}
+
+/*!
+	//Warning: this function is unsafe -- it only effects the writing of the matrix as NEXUS and it does not correctly
+ recode the matrix.
+*/
+inline void NxsCharactersBlock::SetGapSymbol(char g)
+	{
+	gap = g;
+	if (datatypeMapperVec.size() == 1)
+		datatypeMapperVec[0].first.SetGapSymbol(g);
+	}
+
+
+/*! Returns value of `datatype' from the datatype mapper.
+	This if you have told NCL to read augmented symbols list (SetAllowAugmentingOfSequenceSymbols)
+		then it is possible that the datatype returned will be standard even if the GetOriginalDataType()
+		returns a molecular sequence datatype. This means that the symbols list was augmented.
+
+*/
+inline NxsCharactersBlock::DataTypesEnum NxsCharactersBlock::GetDataType() const
+	{
+	if (datatypeMapperVec.empty())
+		return datatype;
+	if (datatypeMapperVec.size() > 1)
+		return mixed;
+	return datatypeMapperVec[0].first.GetDatatype();
+	}
+
+inline NxsCharactersBlock::DataTypesEnum NxsCharactersBlock::GetOriginalDataType() const
+	{
+	return originalDatatype;
+	}
+
+/*!
+	Returns the `matchchar' symbol currently in effect. If no `matchchar' symbol specified, returns '\0'.
+*/
+inline char NxsCharactersBlock::GetMatchcharSymbol() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return matchchar;
+	}
+
+/*!
+	This function is no longer the most efficient way to access parsed data (see notes on NxsCharacterBlock and
+	GetMatrix() and GetMatrixDecoder() methods.
+
+	Returns internal representation of the state for taxon `i', character `j'. In the normal situation, `k' is 0 meaning
+	there is only one state with no uncertainty or polymorphism. If there are multiple states, specify a number in the
+	range [0..n) where n is the number of states returned by the GetNumStates function. Use the IsPolymorphic
+	function to determine whether the multiple states correspond to uncertainty in state assignment or polymorphism in
+	the taxon. The value returned from this function is one of the following:
+~
+	o -3 means gap state (see note below)
+	o -2 means missing state (see note below)
+	o an integer 0 or greater is internal representation of a state
+~
+	Note: gap and missing states are actually represented internally in a different way; for a description of the actual
+	internal representation of states, see the documentation for NxsDiscreteDatum.
+
+*/
+inline NxsDiscreteStateCell NxsCharactersBlock::GetInternalRepresentation(
+  unsigned i,	/* the taxon in range [0..`ntax') */
+  unsigned j,	/* the character in range [0..`nchar') */
+  unsigned k) NCL_COULD_BE_CONST /* the 0-offset index of state to return */ /*v2.1to2.2 1 */
+	{
+	if (IsGapState(i, j))
+		return -3;
+	else if (IsMissingState(i, j))
+		return -2;
+	else
+		return GetStateIndex(i, j, k);
+	}
+
+/*!
+	Returns the missing data symbol currently in effect. If no missing data symbol specified, returns '\0'.
+*/
+inline char NxsCharactersBlock::GetMissingSymbol() const
+	{
+	return missing;
+	}
+
+/*!
+	Name change to reinforce the change in meaning -- in NCL after 2.1 this will behaves just like the
+	GetNCharTotal(). It returns the number of characters in the matrix (regardless of whether they have been excluded).
+	The old GetNChar() function is now called GetNumIncludedChars();
+*/
+inline unsigned NxsCharactersBlock::GetNumChar() const
+	{
+	return nChar;
+	}
+
+/*!
+	Note the change in meaning -- in NCL after 2.1 this will behaves just like the
+	GetNCharTotal(). It returns the number of characters in the matrix (regardless of whether they have been excluded).
+	The old GetNChar() function is now called GetNumIncludedChars();
+*/
+inline unsigned NxsCharactersBlock::GetNChar() const
+	{
+	return nChar;
+	}
+
+/*!
+	Returns the number of characters which are not excluded (or eliminated) this number is <= GetNumChar()
+*/
+inline unsigned NxsCharactersBlock::GetNumIncludedChars() const
+	{
+	return (unsigned)nChar - (unsigned)excluded.size();
+	}
+
+
+inline unsigned NxsCharactersBlock::GetNCharTotal()
+	{
+	return nChar;
+	}
+
+inline unsigned NxsCharactersBlock::GetNCharTotal() const
+	{
+	return nChar;
+	}
+
+inline unsigned NxsCharactersBlock::GetNTaxWithData() const
+	{
+	return nTaxWithData;
+	}
+
+/*!
+	Returns the number of characters eliminated with the ELIMINATE command.
+*/
+inline unsigned NxsCharactersBlock::GetNumEliminated() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return (unsigned)eliminated.size();
+	}
+
+/*!
+	Returns the number of stored equates associations.
+*/
+inline unsigned NxsCharactersBlock::GetNumUserEquates() const
+	{
+	return (unsigned)(userEquates.size());
+	}
+
+/*!
+	Returns the number of stored equates associations.
+*/
+inline unsigned NxsCharactersBlock::GetNumEquates() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return (unsigned)(userEquates.size() + defaultEquates.size());
+	}
+
+/*!
+	Returns the number of actual columns in `matrix'. This number is equal to `nchar', but can be smaller than
+	`ncharTotal' since the user could have eliminated some of the characters.
+*/
+inline unsigned NxsCharactersBlock::GetNumMatrixCols() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return nChar;
+	}
+
+/*!
+	Returns the number of actual rows in `matrix'. This number is equal to `ntax', but can be smaller than `ntaxTotal'
+	since the user did not have to provide data for all taxa specified in the TAXA block.
+*/
+inline unsigned NxsCharactersBlock::GetNumMatrixRows() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return GetNTaxTotal();
+	}
+
+inline NxsDiscreteStateCell NxsCharactersBlock::GetStateIndex(
+  unsigned taxInd,	/* the taxon in range [0..`ntax') */
+  unsigned charInd, /* the character in range [0..`nchar') */
+  unsigned k) const
+	{
+	const NxsDiscreteDatatypeMapper * currMapper =	GetDatatypeMapperForChar(charInd);
+	NCL_ASSERT(currMapper);
+	const NxsDiscreteStateRow & row = GetDiscreteMatrixRow(taxInd);
+	NCL_ASSERT(row.size() > charInd);
+	return currMapper->GetOneStateForCode(row[charInd], k);
+	}
+/*! Returns symbol from symbols list representing the state for taxon `i' and character `j'.
+
+	The normal situation in which there is only one state with no uncertainty or polymorphism is
+	represented by `k' = 0.
+	If there are multiple states, specify a number in the range [0..n) where n is the number of states
+	returned by the GetNumStates function.
+	Use the IsPolymorphic function to determine whether the multiple states correspond to uncertainty in state
+	assignment or polymorphism in the taxon. Assumes `symbols' is non-NULL.
+
+	\warning{In NEXUS it is possible (via the TOKENS mode) to introduce a dataype that does not have unique single
+		char symbols for each state. This function is not guaranteed to succeed in such cases.
+		The NxsDiscreteDatatypeMapper method of accessing characters is more robust (and faster).
+		see \ref NxsCharacterBlockQueries
+		}
+*/
+inline char NxsCharactersBlock::GetState(
+  unsigned i,	/* the taxon in range [0..`ntax') */
+  unsigned j,	/* the character in range [0..`nchar') */
+  unsigned k) const	/* the 0-offset index of the state to return */
+	{
+	NCL_ASSERT(!symbols.empty());
+	const NxsDiscreteStateCell p = GetStateIndex(i, j, k);
+	if (p < 0)
+		{
+		NCL_ASSERT(p == NXS_GAP_STATE_CODE);
+		return gap;
+		}
+	NCL_ASSERT(p < (int)symbols.length());
+	return symbols[(int)p];
+	}
+
+/*! \returns The symbols string	Warning: returned value may be NULL.
+*/
+inline const char *NxsCharactersBlock::GetSymbols() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return symbols.c_str();
+	}
+
+/*!
+	Returns label for taxon number `i' (`i' ranges from 0 to `ntax' - 1).
+*/
+inline NxsString NxsCharactersBlock::GetTaxonLabel( /*v2.1to2.2 4 */
+  unsigned i) const	/* the taxon's position in the taxa block */
+	{
+	NxsString s = taxa->GetTaxonLabel(i); /*v2.1to2.2 4 */
+	return s;
+	}
+
+inline bool NxsCharactersBlock::TaxonIndHasData(
+  unsigned taxInd) const /* the character in question, in the range [0..`nchar') */
+	{
+	if (datatype == continuous)
+		return (taxInd < continuousMatrix.size() && !continuousMatrix[taxInd].empty());
+	return (taxInd < discreteMatrix.size() && !discreteMatrix[taxInd].empty());
+	}
+
+
+inline const NxsUnsignedSet & NxsCharactersBlock::GetExcludedIndexSet() const
+	{
+	return excluded;
+	}
+
+inline bool NxsCharactersBlock::IsActiveChar(
+  unsigned j) const	/* the character in question, in the range [0..`nchar') */
+	{
+	return (j < nChar && excluded.count(j) == 0);
+	}
+
+
+/*!
+	Returns true if character `j' has been excluded. If character `j' is active, returns false. Assumes `j' is in the
+	range [0..`nchar').
+*/
+inline bool NxsCharactersBlock::IsExcluded(
+  unsigned j) const	/* the character in question, in the range [0..`nchar') */
+	{
+	return !IsActiveChar(j);
+	}
+
+inline bool NxsCharactersBlock::IsActiveChar(
+  unsigned j) /* the character in question, in the range [0..`nchar') */
+	{
+	return (j < nChar && excluded.count(j) == 0);
+	}
+
+
+/*!
+	Returns true if character `j' has been excluded. If character `j' is active, returns false. Assumes `j' is in the
+	range [0..`nchar').
+*/
+inline bool NxsCharactersBlock::IsExcluded(
+  unsigned j) /* the character in question, in the range [0..`nchar') */
+	{
+	return !IsActiveChar(j);
+	}
+
+
+/*!
+	Returns true if INTERLEAVE was specified in the FORMAT command, false otherwise.
+*/
+inline bool NxsCharactersBlock::IsInterleave() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return interleaving;
+	}
+
+/*!
+	Returns true if LABELS was specified in the FORMAT command, false otherwise.
+*/
+inline bool NxsCharactersBlock::IsLabels() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return labels;
+	}
+
+/*!
+	Returns true if RESPECTCASE was specified in the FORMAT command, false otherwise.
+*/
+inline bool NxsCharactersBlock::IsRespectCase() const
+	{
+	return respectingCase;
+	}
+
+/*!
+	Returns true if TOKENS was specified in the FORMAT command, false otherwise.
+*/
+inline bool NxsCharactersBlock::IsTokens() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return tokens;
+	}
+
+/*!
+	Returns true if TRANSPOSE was specified in the FORMAT command, false otherwise.
+*/
+inline bool NxsCharactersBlock::IsTranspose() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return transposing;
+	}
+
+/*! Converts a taxon label to a number corresponding to the taxon's position within the list maintained by the
+	NxsTaxaBlockAPI object. This method overrides the virtual function of the same name in the NxsBlock base class. If
+	`s' is not a valid taxon label, returns the value 0.
+*/
+inline unsigned NxsCharactersBlock::TaxonLabelToNumber(
+  NxsString s) const	/* the taxon label to convert */ /*v2.1to2.2 4 */
+	{
+	try
+		{
+		return 1 + taxa->FindTaxon(s);
+		}
+	catch(NxsTaxaBlock::NxsX_NoSuchTaxon)
+		{
+		}
+
+	return 0;
+	}
+
+
+inline VecBlockPtr NxsCharactersBlock::GetImpliedBlocks()
+	{
+	return GetCreatedTaxaBlocks();
+	}
+inline const std::string & NxsCharactersBlock::GetBlockName() const
+	{
+	return NCL_BLOCKTYPE_ATTR_NAME;
+	}
+inline void NxsCharactersBlock::HandleLinkCommand(NxsToken & token)
+	{
+	HandleLinkTaxaCommand(token);
+	}
+inline void NxsCharactersBlock::WriteLinkCommand(std::ostream &out) const
+	{
+	WriteLinkTaxaCommand(out);
+	}
+
+
+inline NxsCharactersBlock::StatesFormatEnum NxsCharactersBlock::GetStatesFormat() const
+	{
+	return statesFormat;
+	}
+
+inline	unsigned NxsCharactersBlock::CharLabelToNumber(NxsString s) NCL_COULD_BE_CONST /*v2.1to2.2 d */
+	{ /*v2.1to2.2 d */
+	const NxsCharactersBlock *b = (const NxsCharactersBlock *)(this); /*v2.1to2.2 d */
+	return b->CharLabelToNumber(s); /*v2.1to2.2 d */
+	} /*v2.1to2.2 d */
+
+/*!
+	Returns true if character with `charIndex' (0-based index) was eliminated, false otherwise.
+*/
+inline bool NxsCharactersBlock::IsEliminated(
+  unsigned charIndex) NCL_COULD_BE_CONST /* the character in question */ /*v2.1to2.2 1 */
+	{
+	return eliminated.count(charIndex) > 0 ;
+	}
+
+/*
+	Returns an alias to the NxsDiscreteDatatypeMapper for character index.
+	NULL will be returned if the NxsCharactersBlock is not fully initialized or
+		if the block stores continuous characters.
+	The pointer is only guaranteed to be valid until the NxsCharactersBlock is modified.
+		(so do not store for long term usage).
+*/
+inline const NxsDiscreteDatatypeMapper * NxsCharactersBlock::GetDatatypeMapperForChar(unsigned charIndex) const
+	{
+	NxsCharactersBlock *mt = const_cast<NxsCharactersBlock *>(this);
+	return mt->GetMutableDatatypeMapperForChar(charIndex);
+	}
+
+inline const NxsDiscreteDatatypeMapper & NxsCharactersBlock::GetDatatypeMapperForCharRef(unsigned charIndex) const
+	{
+	const NxsDiscreteDatatypeMapper * dm = this->GetDatatypeMapperForChar(charIndex);
+	NCL_ASSERT(dm);
+	return *dm;
+	}
+
+inline const NxsDiscreteStateRow & NxsCharactersBlock::GetDiscreteMatrixRow(unsigned int taxIndex) const
+	{
+	return discreteMatrix.at(taxIndex);
+	}
+
+inline const NxsCharactersBlock::ContinuousCharRow & NxsCharactersBlock::GetContinuousMatrixRow(unsigned taxIndex) const
+	{
+	return continuousMatrix.at(taxIndex);
+	}
+
+/*!
+	Returns an alias to the NxsDiscreteDatatypeMapper for character index.
+	NULL will be returned if the NxsCharactersBlock is not fully initialized or
+		if the block stores continuous characters.
+	The pointer is only guaranteed to be valid until the NxsCharactersBlock is modified.
+		(so do not store for long term usage).
+*/
+inline NxsDiscreteDatatypeMapper * NxsCharactersBlock::GetMutableDatatypeMapperForChar(unsigned int charIndex)
+	{
+	if (datatypeMapperVec.size() == 1)
+		return &(datatypeMapperVec[0].first);
+	for (VecDatatypeMapperAndIndexSet::iterator dmvIt = datatypeMapperVec.begin(); dmvIt != datatypeMapperVec.end(); ++dmvIt)
+		{
+		const NxsUnsignedSet & currCS = dmvIt->second;
+		if (currCS.count(charIndex) > 0)
+			return &(dmvIt->first);
+		}
+	return NULL;
+	}
+
+inline std::vector<const NxsDiscreteDatatypeMapper *> NxsCharactersBlock::GetAllDatatypeMappers() const
+	{
+	std::vector<const NxsDiscreteDatatypeMapper *> v;
+	for (VecDatatypeMapperAndIndexSet::const_iterator dmvIt = datatypeMapperVec.begin(); dmvIt != datatypeMapperVec.end(); ++dmvIt)
+		v.push_back(&(dmvIt->first));
+	return v;
+	}
+
+inline void NxsDiscreteDatatypeMapper::WriteStateCodeRowAsNexus(std::ostream & out, const NxsDiscreteStateRow &row) const
+	{//@mth optimize
+	std::vector<NxsDiscreteStateCell>::const_iterator b = row.begin();
+	const std::vector<NxsDiscreteStateCell>::const_iterator e = row.end();
+	WriteStateCodeRowAsNexus(out, b, e);
+	}
+
+inline void NxsDiscreteDatatypeMapper::WriteStateCodeRowAsNexus(std::ostream & out, NxsDiscreteStateRow::const_iterator & begIt, const NxsDiscreteStateRow::const_iterator & endIt) const
+	{//@mth optimize
+	for (; begIt != endIt; ++begIt)
+		WriteStateCodeAsNexusString(out, *begIt, true);
+	}
+
+
+#endif
diff --git a/ncl/nxscxxdiscretematrix.cpp b/ncl/nxscxxdiscretematrix.cpp
new file mode 100644
index 0000000..eab9c14
--- /dev/null
+++ b/ncl/nxscxxdiscretematrix.cpp
@@ -0,0 +1,512 @@
+//	Copyright (C) 2008 Mark Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.1
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <iterator>
+#include "ncl/nxscxxdiscretematrix.h"
+#include "ncl/nxsutilcopy.h"
+#include <cassert>
+using std::string;
+using std::vector;
+using std::cout;
+using std::endl;
+
+/**===========================================================================
+| fills compressedTransposedMatrix and empties patternSet
+|
+| If `originalIndexToCompressed` or `compressedIndexToOriginal` are requested
+|   then the `compressedIndexPattern` mapping must be supplied. `compressedIndexPattern`
+|   must contain pointers to the keys in `patternSet.` Note that these will 
+|   be invalid after the call because patternSet will be emptied).
+*/
+void NxsConsumePatternSetToPatternVector(
+  std::set<NxsCharacterPattern> & patternSet, /* INPUT matrix that will hold the compressed columns */
+  std::vector<NxsCharacterPattern> & compressedTransposedMatrix, /* OUTPUT matrix that will hold the compressed columns */
+  const std::vector<const NxsCharacterPattern *> * compressedIndexPattern, /** INPUT This mapping must be provided if either  `originalIndexToCompressed` or `compressedIndexToOriginal` is requested */
+  std::vector<int> * originalIndexToCompressed, /** OUTPUT if not 0L, this will be filled to provide map an index in `mat` to the corresponding index in `compressedTransposedMatrix` (-1 in the vector indicates that the character was not included) */
+  std::vector<std::set<unsigned> > * compressedIndexToOriginal) /** OUTPUT  if not 0L, this will be filled to provide a map from an index in `compressedTransposedMatrix` to the original character count */
+{
+    const unsigned patternIndexOffset = (unsigned const)compressedTransposedMatrix.size();
+    const unsigned numCompressedPatterns = (unsigned const)patternSet.size();
+    if (originalIndexToCompressed != 0L || compressedIndexToOriginal != 0L)
+        {
+        if (compressedIndexPattern == 0L)
+            throw NxsException("compressedIndexPattern must be provided in ConsumePatternSetToPatternVector if mappings are requested");
+        unsigned patternIndex = 0;
+        for (std::set<NxsCharacterPattern>::iterator pIt = patternSet.begin(); pIt != patternSet.end(); ++pIt, ++patternIndex)
+            {
+            pIt->patternIndex = patternIndex + patternIndexOffset;
+            }
+        if (originalIndexToCompressed)
+            originalIndexToCompressed->resize(compressedIndexPattern->size());
+        if (compressedIndexToOriginal)
+            {
+            compressedIndexToOriginal->clear();
+            compressedIndexToOriginal->resize(numCompressedPatterns);
+            }
+        for (unsigned i = 0; i < compressedIndexPattern->size(); ++ i)
+            {
+            const NxsCharacterPattern * pat = (*compressedIndexPattern)[i];
+            if (pat)
+                {
+                if (originalIndexToCompressed)
+                    (*originalIndexToCompressed)[i] = pat->patternIndex;
+                if (compressedIndexToOriginal)
+                    {
+                    NCL_ASSERT(pat->patternIndex < numCompressedPatterns);
+                    compressedIndexToOriginal->at(pat->patternIndex).insert(i);
+                    }
+                }
+            else
+                {
+                if (originalIndexToCompressed)
+                    (*originalIndexToCompressed)[i] = -1;
+                }
+            }
+        }
+    compressedTransposedMatrix.reserve(numCompressedPatterns);
+    for (std::set<NxsCharacterPattern>::iterator pIt = patternSet.begin(); pIt != patternSet.end();)
+        {
+        compressedTransposedMatrix.push_back(*pIt);
+        std::set<NxsCharacterPattern>::iterator prevIt = pIt++;
+        patternSet.erase(prevIt);
+        }
+    patternSet.clear();
+}
+
+
+unsigned NxsCompressDiscreteMatrix(
+  const NxsCXXDiscreteMatrix & mat,			/**< is the data source */
+  std::set<NxsCharacterPattern> & patternSet, /* matrix that will hold the compressed columns */
+  std::vector<const NxsCharacterPattern *> * compressedIndexPattern, /** if not 0L, this will be filled to provide a map from an index in `compressedTransposedMatrix` to the original character count */
+  const NxsUnsignedSet * taxaToInclude,	/**< if not 0L, this should be  the indices of the taxa in `mat` to include (if 0L all characters will be included). Excluding taxa will result in shorter patterns (the skipped taxa will not be filled with empty codes, instead the taxon indexing will be frameshifted -- the client code must keep track of these frameshifts). */
+  const NxsUnsignedSet * charactersToInclude)
+    {
+    const unsigned origNumPatterns = (unsigned) patternSet.size();
+	unsigned ntax = mat.getNTax();
+	unsigned patternLength = ntax;
+	unsigned nchar = mat.getNChar();
+	if (compressedIndexPattern)
+	    {
+	    compressedIndexPattern->resize(nchar);
+	    }
+	NxsUnsignedSet allTaxaInds;
+	if (taxaToInclude)
+	    {
+	    if (taxaToInclude->empty())
+	        return 0; // might want to warn about this!
+	    const unsigned lastTaxonIndex = *(taxaToInclude->rbegin());
+	    if (lastTaxonIndex >= ntax)
+	        throw NxsException("Taxon index in taxaToInclude argument to NxsCompressDiscreteMatrix is out of range");
+        patternLength -= taxaToInclude->size();
+	    }
+    else
+        {
+        for (unsigned i = 0; i < ntax; ++i)
+            allTaxaInds.insert(i);
+        taxaToInclude = &allTaxaInds;
+        }
+	if (charactersToInclude)
+	    {
+	    if (charactersToInclude->empty())
+	        return 0; // might want to warn about this!
+	    const unsigned lastColumnIndex = *(charactersToInclude->rbegin());
+	    if (lastColumnIndex >= nchar)
+	        throw NxsException("Character index in charactersToInclude argument to NxsCompressDiscreteMatrix is out of range");
+	    }
+
+    // Create actingWeights vector and copy the integer weights from mat into it
+    // If there are no integer weights in mat, copy the floating point weights instead
+    // if floating point weights have been defined
+	const std::vector<int> & iwts = mat.getIntWeightsConst();
+	std::vector<double> actingWeights(nchar, 1.0);
+	bool weightsSpecified = false;
+	bool weightsAsInts = false;
+	if (!iwts.empty())
+		{
+		NCL_ASSERT(iwts.size() >= nchar);
+		weightsSpecified = true;
+		weightsAsInts = true;
+		for (unsigned j = 0; j < nchar; ++j)
+			actingWeights[j] = (double)iwts.at(j);
+		}
+	else
+		{
+		const std::vector<double> & dwts = mat.getDblWeightsConst();
+		if (!dwts.empty())
+			{
+    		weightsSpecified = true;
+			actingWeights = dwts;
+			NCL_ASSERT(actingWeights.size() == nchar);
+			}
+		}
+
+    // Set corresponding actingWeights elements to zero if any characters have been excluded in mat
+	const NxsUnsignedSet & excl = mat.getExcludedCharIndices();
+	for (NxsUnsignedSet::const_iterator eIt = excl.begin(); eIt != excl.end(); ++eIt)
+		{
+		NCL_ASSERT(*eIt < nchar);
+		actingWeights[*eIt] = 0.0;
+		}
+	const double * wts = &(actingWeights[0]);
+	
+	NxsCharacterPattern patternTemp;
+    patternTemp.count = 1;
+	for (unsigned j = 0; j < nchar; ++j)
+		{
+        double patternWeight = wts[j];
+        bool shouldInclude = (charactersToInclude == 0L || (charactersToInclude->find(j) != charactersToInclude->end()));
+        if (patternWeight > 0.0 &&  shouldInclude)
+            {
+            // Build up a vector representing the pattern of state codes at this site
+            patternTemp.stateCodes.clear();
+            patternTemp.stateCodes.reserve(patternLength);
+            patternTemp.sumOfPatternWeights = patternWeight;
+
+            unsigned indexInPattern = 0;
+            for (NxsUnsignedSet::const_iterator taxIndIt = taxaToInclude->begin(); taxIndIt != taxaToInclude->end(); ++taxIndIt, ++indexInPattern)
+                {
+                const unsigned taxonIndex = *taxIndIt;
+                const NxsCDiscreteStateSet * row	= mat.getRow(taxonIndex);
+                const NxsCDiscreteStateSet code = row[j];
+                patternTemp.stateCodes.push_back(code);
+                }
+            NCL_ASSERT(indexInPattern == patternLength);
+
+            std::set<NxsCharacterPattern>::iterator lowBoundLoc = patternSet.lower_bound(patternTemp);
+            if ((lowBoundLoc == patternSet.end()) || (patternTemp < *lowBoundLoc))
+                {
+                std::set<NxsCharacterPattern>::iterator insertedIt = patternSet.insert(lowBoundLoc, patternTemp);
+                if (compressedIndexPattern)
+                    {
+                    const NxsCharacterPattern & patInserted = *insertedIt;
+                    (*compressedIndexPattern)[j] = &patInserted;
+                    }
+                }
+            else
+                {
+                NCL_ASSERT(patternTemp == *lowBoundLoc);
+                lowBoundLoc->sumOfPatternWeights += patternWeight;
+                lowBoundLoc->count += 1;
+                if (compressedIndexPattern)
+                    {
+                    (*compressedIndexPattern)[j] = &(*lowBoundLoc);
+                    }
+                }
+            }
+		}
+	return (unsigned)patternSet.size() - origNumPatterns;	
+    }
+
+/*----------------------------------------------------------------------------------------------------------------------
+|	Copies data from `mat' to `pattern_vect' and `pattern_counts'. The `pattern_vect' vector holds the patterns while
+|	`pattern_counts' holds the count of the number of sites having each pattern. Additionally, the vectors 
+|	`pattern_to_sites' and `charIndexToPatternIndex' are built: `pattern_to_sites' allows you to get a list of sites
+|	given a specific pattern, and `charIndexToPatternIndex' lets you find the index of a pattern in `pattern_vect' and
+|	`pattern_counts' given an original site index.
+*/
+unsigned NxsCompressDiscreteMatrix(
+  const NxsCXXDiscreteMatrix & mat,
+  std::vector<NxsCharacterPattern> & compressedTransposedMatrix,
+  std::vector<int> * originalIndexToCompressed,
+  std::vector<std::set<unsigned> > * compressedIndexToOriginal,
+  const NxsUnsignedSet * taxaToInclude,
+  const NxsUnsignedSet * charactersToInclude)
+	{
+	std::set<NxsCharacterPattern> patternSet;
+	std::vector<const NxsCharacterPattern *> toPatternMap;
+	std::vector<const NxsCharacterPattern *> *toPatternMapPtr = 0L;
+	if (originalIndexToCompressed != 0L || compressedIndexToOriginal != 0L)
+	    toPatternMapPtr = &toPatternMap;
+
+	NxsCompressDiscreteMatrix(mat, patternSet, toPatternMapPtr, taxaToInclude, charactersToInclude);
+    const unsigned numPatternsAdded = (unsigned const)patternSet.size();
+	
+	NxsConsumePatternSetToPatternVector(patternSet, compressedTransposedMatrix, toPatternMapPtr, originalIndexToCompressed, compressedIndexToOriginal);
+	return numPatternsAdded;
+	}
+
+void NxsTransposeCompressedMatrix(
+  const std::vector<NxsCharacterPattern> & compressedTransposedMatrix, 
+  ScopedTwoDMatrix<NxsCDiscreteStateSet> & destination,
+  std::vector<unsigned> * patternCounts,
+  std::vector<double> * patternWeights)
+{
+	const unsigned npatterns = (unsigned const)compressedTransposedMatrix.size();
+	if (npatterns == 0)
+	    {
+	    destination.Initialize(0, 0);
+	    return;
+	    }
+	const unsigned ntaxa = (unsigned const)compressedTransposedMatrix[0].stateCodes.size();
+	destination.Initialize(ntaxa, npatterns);
+    NxsCDiscreteStateSet ** matrix = destination.GetAlias();			/** taxa x characters matrix of indices of state sets */
+    if (patternCounts)
+        patternCounts->resize(npatterns);
+    if (patternWeights)
+        patternWeights->resize(npatterns);
+	for (unsigned p = 0; p < npatterns; ++p)
+		{
+		const NxsCharacterPattern & pattern = compressedTransposedMatrix[p];
+		const std::vector<NxsCDiscreteState_t> & states = pattern.stateCodes;
+		for (unsigned t = 0; t < ntaxa; ++t)
+		    matrix[t][p] = states[t];
+        if (patternCounts)
+            (*patternCounts)[p] = pattern.count;
+        if (patternWeights)
+            (*patternWeights)[p] = pattern.sumOfPatternWeights;
+		}
+}
+
+NxsCXXDiscreteMatrix::NxsCXXDiscreteMatrix(const NxsCharactersBlock & cb, bool gapsToMissing, const NxsUnsignedSet * toInclude, bool standardizeCoding)
+	{
+	Initialize(&cb, gapsToMissing, toInclude, standardizeCoding);
+	}
+
+void NxsCXXDiscreteMatrix::Initialize(const NxsCharactersBlock * cb, bool gapsToMissing, const NxsUnsignedSet * toInclude, bool standardizeCoding)
+{
+	this->nativeCMatrix.stateList = 0L;
+	this->nativeCMatrix.stateListPos = 0L;
+	this->nativeCMatrix.matrix = 0L;
+	this->nativeCMatrix.symbolsList = 0L;
+	this->nativeCMatrix.nStates = 0;
+	this->nativeCMatrix.nChar = 0;
+	this->nativeCMatrix.nTax = 0L;
+	this->nativeCMatrix.nObservedStateSets = 0;
+	this->nativeCMatrix.datatype = NxsAltGeneric_Datatype;
+	this->symbolsStringAlias.clear();
+	this->matrixAlias.Initialize(0, 0);
+	this->stateListAlias.clear();
+	this->stateListPosAlias.clear();
+	this->intWts.clear();
+	this->dblWts.clear();
+	this->activeExSet.clear();
+	if (cb == NULL)
+		return;
+	std::vector<const NxsDiscreteDatatypeMapper *> mappers = cb->GetAllDatatypeMappers();
+	if (mappers.empty() || mappers[0] == NULL)
+		throw NxsException("no mappers");
+
+	std::set <const NxsDiscreteDatatypeMapper * > usedMappers;
+	NxsUnsignedSet scratchSet;
+	if (toInclude == 0L)
+		{
+		for (unsigned i = 0; i < cb->GetNChar(); ++i)
+			scratchSet.insert(i);
+		toInclude = & scratchSet;
+	 	}
+	for (NxsUnsignedSet::const_iterator indIt = toInclude->begin(); indIt != toInclude->end(); ++indIt)
+		{
+		unsigned charIndex = *indIt;
+		usedMappers.insert(cb->GetDatatypeMapperForChar(charIndex));
+		}
+	
+	
+	if (usedMappers.size() > 1)
+		throw NxsException("too many mappers");
+	if (usedMappers.empty())
+		throw NxsException("no mappers - or empty charset");
+	
+
+	const NxsDiscreteDatatypeMapper & mapper = **usedMappers.begin();
+	const NxsDiscreteStateMatrix & rawMatrix = cb->GetRawDiscreteMatrixRef();
+
+	NxsCharactersBlock::DataTypesEnum inDatatype = mapper.GetDatatype();
+	if (inDatatype < LowestNxsCDatatype || inDatatype > HighestNxsCDatatype)
+		throw NxsException("Datatype cannot be converted to NxsCDiscreteMatrix");
+	this->nativeCMatrix.datatype = NxsAltDatatypes(inDatatype);
+	this->nativeCMatrix.nStates = mapper.GetNumStates();
+	const std::string fundamentalSymbols = mapper.GetSymbols();
+	const std::string fundamentalSymbolsPlusGaps = mapper.GetSymbolsWithGapChar();
+	const bool hadGaps = !(fundamentalSymbols == fundamentalSymbolsPlusGaps);
+
+	this->symbolsStringAlias = fundamentalSymbols;
+	char missingSym = cb->GetMissingSymbol();
+	const NxsCDiscreteState_t newMissingStateCode = (standardizeCoding ? (NxsCDiscreteState_t) this->nativeCMatrix.nStates : (NxsCDiscreteState_t) NXS_MISSING_CODE);
+	NCL_ASSERT((int)NXS_MISSING_CODE < 0);
+	NCL_ASSERT((int)NXS_GAP_STATE_CODE < 0);
+	NxsDiscreteStateCell sclOffsetV;
+	if (hadGaps)
+		sclOffsetV = std::min((NxsDiscreteStateCell)NXS_GAP_STATE_CODE, (NxsDiscreteStateCell)NXS_MISSING_CODE);
+	else
+		sclOffsetV = NXS_MISSING_CODE;
+	const NxsDiscreteStateCell sclOffset(sclOffsetV);
+
+	const NxsDiscreteStateCell negSCLOffset = -sclOffset;
+	const unsigned nMapperStateCodes = mapper.GetNumStateCodes();
+	const unsigned recodeVecLen = nMapperStateCodes;
+	const unsigned nMapperPosStateCodes = nMapperStateCodes + sclOffset;
+	std::vector<NxsCDiscreteState_t> recodeVec(recodeVecLen + negSCLOffset, -2);
+	NxsCDiscreteState_t * recodeArr = &recodeVec[negSCLOffset];
+
+	if (fundamentalSymbols.length() < this->nativeCMatrix.nStates)
+		throw NxsException("Fundamental states missing from the symbols string");
+	const unsigned nfun_sym = (const unsigned)fundamentalSymbols.length();
+	for (NxsCDiscreteState_t i = 0; i < (NxsCDiscreteState_t)this->nativeCMatrix.nStates; ++i)
+		{
+		if (i < (NxsCDiscreteState_t)nfun_sym && (NxsCDiscreteState_t)fundamentalSymbols[i] == '\0' && mapper.PositionInSymbols(fundamentalSymbols[i]) != (NxsDiscreteStateCell) i)
+			{
+			NCL_ASSERT(i >= (NxsCDiscreteState_t)nfun_sym || fundamentalSymbols[i] == '\0' || mapper.PositionInSymbols(fundamentalSymbols[i]) == (NxsDiscreteStateCell) i);
+			}
+#		if !defined (NDEBUG)
+			const std::set<NxsDiscreteStateCell>	 & ss =  mapper.GetStateSetForCode(i);
+			NCL_ASSERT(ss.size() == 1);
+			NCL_ASSERT(*ss.begin() == i);
+#		endif
+		stateListAlias.push_back(1);
+		stateListAlias.push_back(i);
+		stateListPosAlias.push_back((unsigned) 2*i);
+		recodeArr[i] = i;
+		}
+
+	//NXS_INVALID_STATE_CODE
+
+	if (hadGaps)
+		{
+		if (standardizeCoding)
+		    recodeArr[NXS_GAP_STATE_CODE] = ((hadGaps && gapsToMissing)? newMissingStateCode : -1);
+        else
+		    recodeArr[NXS_GAP_STATE_CODE] = NXS_GAP_STATE_CODE;
+        }
+
+	if (missingSym == '\0')
+		missingSym = (hadGaps ? mapper.GetGapSymbol() : '?');
+	else
+		{
+		NCL_ASSERT(NXS_MISSING_CODE == mapper.GetStateCodeStored(missingSym));
+		}
+	recodeArr[NXS_MISSING_CODE] = newMissingStateCode;
+	const unsigned nCodesInMissing  = this->nativeCMatrix.nStates + (gapsToMissing ?  0 : 1);
+	if (standardizeCoding)
+	    {
+	    this->symbolsStringAlias.append(1, missingSym);
+        stateListPosAlias.push_back(2*this->nativeCMatrix.nStates);
+        stateListAlias.push_back(nCodesInMissing);
+        if (!gapsToMissing)
+            stateListAlias.push_back(-1);
+        for (NxsCDiscreteState_t i = 0; i < (NxsCDiscreteState_t)this->nativeCMatrix.nStates; ++i)
+            stateListAlias.push_back(i);
+        }
+
+	NxsCDiscreteState_t nextStateCode = (standardizeCoding ? (newMissingStateCode + 1) : this->nativeCMatrix.nStates);
+	for (NxsDiscreteStateCell i = (NxsDiscreteStateCell)this->nativeCMatrix.nStates; i < (NxsDiscreteStateCell) nMapperPosStateCodes; ++i)
+		{
+		const std::set<NxsDiscreteStateCell>	 &ss = mapper.GetStateSetForCode( i);
+		const unsigned ns = (const unsigned)ss.size();
+		const bool mapToMissing  = (!mapper.IsPolymorphic(i) && (nCodesInMissing + 1 == ns || nCodesInMissing == ns));
+		if (mapToMissing)
+			recodeArr[i] = newMissingStateCode;
+		else
+			{
+			recodeArr[i] = nextStateCode++;
+			stateListPosAlias.push_back((unsigned)stateListAlias.size());
+			stateListAlias.push_back(ns);
+			for (std::set<NxsDiscreteStateCell>::const_iterator sIt = ss.begin(); sIt != ss.end(); ++sIt)
+				stateListAlias.push_back((NxsCDiscreteState_t) *sIt);
+			std::string stateName = mapper.StateCodeToNexusString(i);
+			if (stateName.length() != 1)
+				this->symbolsStringAlias.append(1, ' ');
+			else
+				this->symbolsStringAlias.append(1, stateName[0]);
+			}
+		}
+	NCL_ASSERT(stateListPosAlias.size() == (unsigned)nextStateCode);
+	NCL_ASSERT(symbolsStringAlias.size() == (unsigned)nextStateCode);
+	this->nativeCMatrix.nObservedStateSets = nextStateCode;
+
+	this->nativeCMatrix.nTax = (unsigned)rawMatrix.size();
+	this->nativeCMatrix.nChar = (this->nativeCMatrix.nTax == 0 ? 0 : toInclude->size());
+	this->matrixAlias.Initialize(this->nativeCMatrix.nTax, this->nativeCMatrix.nChar);
+	nativeCMatrix.matrix = matrixAlias.GetAlias();
+	const unsigned nt = this->nativeCMatrix.nTax;
+	const unsigned nc = this->nativeCMatrix.nChar;
+	for (unsigned r = 0; r < nt; ++r)
+		{
+		NxsCDiscreteStateSet	 * recodedRow = nativeCMatrix.matrix[r];
+		const std::vector<NxsDiscreteStateCell> & rawRowVec = rawMatrix[r];
+		if (rawRowVec.empty())
+			{
+			NxsCDiscreteState_t recodedMissing = recodeArr[NXS_MISSING_CODE];
+			for (unsigned c = 0; c < nc; ++c)
+				*recodedRow++ = recodedMissing;
+			}
+		else
+			{
+			NCL_ASSERT(rawRowVec.size() >= nc);
+			const NxsDiscreteStateCell * rawRow = &rawRowVec[0];
+		    NxsUnsignedSet::const_iterator includedIt = toInclude->begin();
+			for (unsigned c = 0; c < nc; ++c)
+				{
+				unsigned charIndex = *includedIt++;
+				const NxsDiscreteStateCell rawC = rawRow[charIndex];
+				if ((unsigned)(rawC +  negSCLOffset) >= recodeVecLen)
+					{
+					NCL_ASSERT((unsigned)(rawC +  negSCLOffset) < recodeVecLen);
+					}
+				NCL_ASSERT(rawC >= sclOffset);
+				const NxsCDiscreteState_t recodedC = recodeArr[rawC];
+				NCL_ASSERT(recodedC > -2 || !standardizeCoding);
+				NCL_ASSERT(recodedC < nextStateCode);
+				*recodedRow++ = recodedC;
+				}
+			}
+		}
+	nativeCMatrix.symbolsList = symbolsStringAlias.c_str();
+	nativeCMatrix.stateListPos = &stateListPosAlias[0];
+	nativeCMatrix.stateList = &stateListAlias[0];
+
+	intWts.clear();
+	dblWts.clear();
+	const NxsTransformationManager &tm = cb->GetNxsTransformationManagerRef();
+	intWts = tm.GetDefaultIntWeights();
+	if (intWts.empty())
+		dblWts = tm.GetDefaultDoubleWeights();
+	activeExSet = cb->GetExcludedIndexSet();
+}
+
+/**
+ *	Constructs  from the native C struct NxsCDiscreteMatrix
+ *		by deep copy.
+ */
+NxsCXXDiscreteMatrix::NxsCXXDiscreteMatrix(const NxsCDiscreteMatrix & mat)
+	:nativeCMatrix(mat),//aliases pointers, but we'll fix this below
+	symbolsStringAlias(mat.symbolsList),
+	matrixAlias(mat.nTax, mat.nChar),
+	stateListPosAlias(mat.stateListPos, (mat.stateListPos + mat.nObservedStateSets))
+	{
+	nativeCMatrix.symbolsList = symbolsStringAlias.c_str();
+	nativeCMatrix.stateListPos = &stateListPosAlias[0];
+	if (mat.nObservedStateSets > 0)
+		{
+		const unsigned lastStateIndex = nativeCMatrix.stateListPos[nativeCMatrix.nObservedStateSets - 1];
+		const unsigned lenAmbigList = lastStateIndex + mat.stateList[lastStateIndex] + 1;
+		//	cout << "lenAmbigList = "<< lenAmbigList <<endl;
+		stateListAlias.reserve(lenAmbigList);
+		ncl_copy(mat.stateList, (mat.stateList + lenAmbigList), std::back_inserter(stateListAlias));
+		}
+	nativeCMatrix.stateList = &stateListAlias[0];
+	nativeCMatrix.matrix = matrixAlias.GetAlias();
+
+	// cout << "Matrix in NxsCXXDiscreteMatrix ctor:" << mat.nTax << ' '<< mat.nChar<< endl;
+	for (unsigned i = 0; i < mat.nTax; ++i)
+		{
+		if (mat.nChar > 0)
+			ncl_copy(mat.matrix[i], mat.matrix[i] + mat.nChar, nativeCMatrix.matrix[i]);
+		}
+
+	}
+
diff --git a/ncl/nxscxxdiscretematrix.h b/ncl/nxscxxdiscretematrix.h
new file mode 100644
index 0000000..7192f76
--- /dev/null
+++ b/ncl/nxscxxdiscretematrix.h
@@ -0,0 +1,264 @@
+//	Copyright (C) 2008 Mark Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.1
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+
+#if !defined(NXS_CXX_DISCRETE_MATRIX_H)
+#define NXS_CXX_DISCRETE_MATRIX_H
+
+#include <string>
+#include <vector>
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsallocatematrix.h"
+#include "ncl/nxscharactersblock.h"
+#include "ncl/nxscdiscretematrix.h"
+
+class NxsCharacterPattern;
+	/**
+	 * A C++ class that wraps a CDiscretMatrix in order to handle the memory
+	 management more cleanly. This is intended to be an alternate, low-level way
+	 to get character data out of a NxsCharactersBlock
+	 */
+class NxsCXXDiscreteMatrix
+	{
+	public:
+		NxsCXXDiscreteMatrix()
+			{
+			Initialize(0L, false);
+			}
+		NxsCXXDiscreteMatrix(const NxsCDiscreteMatrix & );
+		NxsCXXDiscreteMatrix(const NxsCharactersBlock & cb, bool convertGapsToMissing, const NxsUnsignedSet * toInclude = 0L, bool standardizeCoding = true);
+
+		void Initialize(const NxsCharactersBlock * cb, bool convertGapsToMissing, const NxsUnsignedSet * toInclude = 0L, bool standardizeCoding = true);
+
+		const NxsCDiscreteMatrix & getConstNativeC() const
+			{
+			return nativeCMatrix;
+			}
+
+		NxsCDiscreteMatrix & getNativeC()
+			{
+			return nativeCMatrix;
+			}
+
+		unsigned	getNChar() const
+			{
+			return nativeCMatrix.nChar;
+			}
+
+		unsigned	getNTax() const
+			{
+			return nativeCMatrix.nTax;
+			}
+
+		unsigned	getNStates() const
+			{
+			return nativeCMatrix.nStates;
+			}
+
+		const char *	getSymbolsList() const   //POL added 15-Nov-2005
+			{
+			return nativeCMatrix.symbolsList;
+			}
+
+		const std::vector<int8_t> &getStateList() const
+			{
+			return stateListAlias;
+			}
+
+		const std::vector<unsigned> &getStateListPos() const
+			{
+			return stateListPosAlias;
+			}
+
+		const NxsCDiscreteStateSet *getRow(unsigned i) const
+			{
+			NCL_ASSERT(i < nativeCMatrix.nTax);
+			return nativeCMatrix.matrix[i];
+			}
+
+		const std::vector<int8_t> getRowAsVector(unsigned i) const
+			{
+			NCL_ASSERT(i < nativeCMatrix.nTax);
+			std::vector<int8_t> v;
+			for (unsigned j = 0; j < nativeCMatrix.nChar; j++)
+				{
+				v.push_back(nativeCMatrix.matrix[i][j]);
+				}
+			return v;
+			}
+
+		const NxsCDiscreteStateSet * const * getMatrix() const
+			{
+			return nativeCMatrix.matrix;
+			}
+
+		const int getDatatype() const
+			{
+			return (int)nativeCMatrix.datatype;
+			}
+
+		bool hasWeights() const
+			{
+			return hasIntWeights() || hasDblWeights();
+			}
+
+		bool hasIntWeights() const
+			{
+			return !(intWts.empty());
+			}
+
+		bool hasDblWeights() const
+			{
+			return !(dblWts.empty());
+			}
+
+		std::vector<int> & getIntWeights()
+			{
+			return intWts;
+			}
+
+		std::vector<double> & getDblWeights()
+			{
+			return dblWts;
+			}
+
+		const std::vector<int> & getIntWeightsConst() const
+			{
+			return intWts;
+			}
+
+		const std::vector<double> & getDblWeightsConst() const
+			{
+			return dblWts;
+			}
+
+		const std::set<unsigned> & getExcludedCharIndices() const
+			{
+			return activeExSet;
+			}
+
+		std::vector<unsigned> getExcludedCharIndicesAsVector() const
+			{
+			return std::vector<unsigned>(activeExSet.begin(), activeExSet.end());
+			}
+
+	private:
+		typedef ScopedTwoDMatrix<NxsCDiscreteStateSet> ScopedStateSetTwoDMatrix;
+
+		NxsCDiscreteMatrix			nativeCMatrix; 		/** taxa x characters matrix in a C struct*/
+		std::string					symbolsStringAlias;	/** memory management alias to symbols field of nativeCMatrix */
+		ScopedStateSetTwoDMatrix	matrixAlias;		/** memory management alias to matrix field of nativeCMatrix */
+		std::vector<NxsCDiscreteState_t>	stateListAlias;		/** memory management alias to ambigList field of nativeCMatrix */
+		std::vector<unsigned>		stateListPosAlias;		/** memory management alias to symbolsList field of nativeCMatrix */
+		std::vector<int>			intWts;
+		std::vector<double>			dblWts;
+		std::set<unsigned>			activeExSet;
+		NxsCXXDiscreteMatrix(const NxsCXXDiscreteMatrix &); /** don't define, not copyable*/
+		NxsCXXDiscreteMatrix & operator=(const NxsCXXDiscreteMatrix &); /** don't define, not copyable*/
+	};
+
+
+
+
+class NxsCharacterPattern
+    {
+    public: 
+        
+        bool operator < (const NxsCharacterPattern & other) const {
+            return this->stateCodes < other.stateCodes;
+        }
+        bool operator == (const NxsCharacterPattern & other) const {
+            return this->stateCodes == other.stateCodes;
+        }
+        // returns true if none of the state codes are the missing or gap codes (negative values
+        //  note this does not test if all of the state codes correspond to completely specified
+        //  cells that are only compatible with one state!
+        bool StateCodesAreNonNegative() const {
+            for (std::vector<NxsCDiscreteState_t>::const_iterator scIt = stateCodes.begin();
+                                                                  scIt != stateCodes.end(); 
+                                                                  ++scIt)
+                {
+                if (*scIt < 0)
+                    return false;
+                }
+            return true;
+        }
+        std::vector<NxsCDiscreteState_t> stateCodes;
+        mutable unsigned count;
+        mutable unsigned patternIndex; // used as scratchspace not always valid!!!
+        mutable double sumOfPatternWeights; // stored as float.  Use NxsCXXDiscreteMatrix::hasIntWeights of the original matrix to see if these weights should be interpretted as ints
+    };
+    
+
+/*----------------------------------------------------------------------------------------------------------------------
+| Fills `compressedTransposedMatrix` with the compressed patterns found in `mat`
+|
+| Data structure for mapping between indices in these patterns can be obtained by the client providing
+|   `compressedIndexPattern` arguments.
+|
+| Characters or taxa can be omitted by providing `taxaToInclude` or `charactersToInclude` arguments.
+|   If these arguments are 0L (or not provided) then all data will be included. Note that skipping taxa
+|   will cause the taxon indexing within a pattern to disagree with the overall taxon numbering because there will
+|   be "frameshifts" for all of the skipped taxa.  The included taxa will be present in the expected order, but it is 
+|   the caller code's responsibility to keep track of which taxa are included in the pattern.
+*/
+unsigned NxsCompressDiscreteMatrix(
+  const NxsCXXDiscreteMatrix & mat,			/**< is the data source */
+  std::set<NxsCharacterPattern> & patternSet, /* matrix that will hold the compressed columns */
+  std::vector<const NxsCharacterPattern *> * compressedIndexPattern = 0L, /** if not 0L, this will be filled to provide a map from an index in `compressedTransposedMatrix` to the original character count */
+  const NxsUnsignedSet * taxaToInclude = 0L,	/**< if not 0L, this should be  the indices of the taxa in `mat` to include (if 0L all characters will be included). Excluding taxa will result in shorter patterns (the skipped taxa will not be filled with empty codes, instead the taxon indexing will be frameshifted -- the client code must keep track of these frameshifts). */
+  const NxsUnsignedSet * charactersToInclude = 0L);	/**< if not 0L, this should be  the indices of the characters in `mat` to include (if 0L all characters will be included) */
+    
+/*----------------------------------------------------------------------------------------------------------------------
+| Fills `compressedTransposedMatrix` with the compressed patterns found in `mat`
+|
+| Data structure for mapping between indices in these representations can be obtained by the client providing
+|   `originalIndexToCompressed` and/or compressedIndexToOriginal arguments.
+|
+| Characters or taxa can be omitted by providing `taxaToInclude` or `charactersToInclude` arguments.
+|   If these arguments are 0L (or not provided) then all data will be included. Note that skipping taxa
+|   will cause the taxon indexing within a pattern to disagree with the overall taxon numbering because there will
+|   be "frameshifts" for all of the skipped taxa.  The included taxa will be present in the expected order, but it is 
+|   the caller code's responsibility to keep track of which taxa are included in the pattern.
+*/
+unsigned NxsCompressDiscreteMatrix(
+  const NxsCXXDiscreteMatrix & mat,			/**< is the data source */
+  std::vector<NxsCharacterPattern> & compressedTransposedMatrix, /* matrix that will hold the compressed columns */
+  std::vector<int> * originalIndexToCompressed, /** if not 0L, this will be filled to provide map an index in `mat` to the corresponding index in `compressedTransposedMatrix` (-1 in the vector indicates that the character was not included) */
+  std::vector<std::set<unsigned> > * compressedIndexToOriginal, /** if not 0L, this will be filled to provide a map from an index in `compressedTransposedMatrix` to the original character count */
+  const NxsUnsignedSet * taxaToInclude = 0L,	/**< if not 0L, this should be  the indices of the taxa in `mat` to include (if 0L all characters will be included). Excluding taxa will result in shorter patterns (the skipped taxa will not be filled with empty codes, instead the taxon indexing will be frameshifted -- the client code must keep track of these frameshifts). */
+  const NxsUnsignedSet * charactersToInclude = 0L);	/**< if not 0L, this should be  the indices of the characters in `mat` to include (if 0L all characters will be included) */
+	
+
+void NxsConsumePatternSetToPatternVector(
+  std::set<NxsCharacterPattern> & patternSet, /* INPUT matrix that will hold the compressed columns */
+  std::vector<NxsCharacterPattern> & compressedTransposedMatrix, /* OUTPUT matrix that will hold the compressed columns */
+  const std::vector<const NxsCharacterPattern *> * compressedIndexPattern = 0L, /** INPUT This mapping must be provided if either  `originalIndexToCompressed` or `compressedIndexToOriginal` is requested */
+  std::vector<int> * originalIndexToCompressed = 0L, /** OUTPUT if not 0L, this will be filled to provide map an index in `mat` to the corresponding index in `compressedTransposedMatrix` (-1 in the vector indicates that the character was not included) */
+  std::vector<std::set<unsigned> > * compressedIndexToOriginal = 0L); /** OUTPUT  if not 0L, this will be filled to provide a map from an index in `compressedTransposedMatrix` to the original character count */
+
+void NxsTransposeCompressedMatrix(
+  const std::vector<NxsCharacterPattern> & compressedTransposedMatrix, 
+  ScopedTwoDMatrix<NxsCDiscreteStateSet> & destination,
+  std::vector<unsigned> * patternCounts = 0L,
+  std::vector<double> * patternWeights = 0L);
+  
+ 
+
+#endif  // NXS_CXX_DISCRETE_MATRIX_H
diff --git a/ncl/nxsdatablock.cpp b/ncl/nxsdatablock.cpp
new file mode 100644
index 0000000..6f59c6b
--- /dev/null
+++ b/ncl/nxsdatablock.cpp
@@ -0,0 +1,63 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#include "ncl/nxsdatablock.h"
+
+/*!
+	Sets `NCL_BLOCKTYPE_ATTR_NAME' to "DATA" and `newtaxa' to true, and calls the base class (NxsCharactersBlock) constructor.
+*/
+NxsDataBlock::NxsDataBlock(
+  NxsTaxaBlockAPI *tb,			/* the taxa block object for storing taxon labels */
+  NxsAssumptionsBlockAPI *ab)	/* the assumptions block object for storing exsets */
+  : NxsCharactersBlock(tb, ab)
+	{
+	NCL_BLOCKTYPE_ATTR_NAME = "DATA";
+	Reset();
+	}
+
+/*!
+	Calls Reset function of the parent class (NxsCharactersBlock) and resets `newtaxa' to true in preparation for
+	reading another DATA block.
+*/
+void NxsDataBlock::Reset()
+	{
+	NxsCharactersBlock::Reset();
+	newtaxa = true;
+	}
+
+/*!
+	Converts this NxsDataBlock object into a NxsCharactersBlock object, storing the result in the supplied
+	NxsCharactersBlock object. This NxsDataBlock object will subsequently say it is empty when asked.
+*/
+void NxsDataBlock::TransferTo(
+  NxsCharactersBlock &charactersblock)	/* the NxsCharactersBlock object that will receive all the data from this object */
+	{
+	charactersblock.Reset();
+	charactersblock.Consume((NxsCharactersBlock &)(*this));
+	}
+
+NxsDataBlock *NxsDataBlockFactory::GetBlockReaderForID(const std::string & idneeded, NxsReader *reader, NxsToken *)
+	{
+	if (reader == NULL || idneeded != "DATA")
+		return NULL;
+	NxsDataBlock * nb = new NxsDataBlock(NULL, NULL);
+	nb->SetCreateImpliedBlock(true);
+	nb->SetImplementsLinkAPI(true);
+	return nb;
+	}
diff --git a/ncl/nxsdatablock.h b/ncl/nxsdatablock.h
new file mode 100644
index 0000000..b78d04f
--- /dev/null
+++ b/ncl/nxsdatablock.h
@@ -0,0 +1,69 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSDATABLOCK_H
+#define NCL_NXSDATABLOCK_H
+
+#include "ncl/nxscharactersblock.h"
+/*!
+	This class handles reading and storage for the NEXUS block DATA. It is derived from the NxsCharactersBlock class,
+	and differs from NxsCharactersBlock only in name and the fact that `newtaxa' is initially true rather than false.
+*/
+class NxsDataBlock
+  : public NxsCharactersBlock
+	{
+	public:
+		NxsDataBlock(NxsTaxaBlockAPI *tb, NxsAssumptionsBlockAPI *ab);
+
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, assumptionsBlock blocks!
+		*/
+		NxsDataBlock & operator=(const NxsDataBlock &other)
+			{
+			Reset();
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			CopyTaxaBlockSurrogateContents(other);
+			CopyCharactersContents(other);
+			return *this;
+			}
+
+		virtual NxsDataBlock * Clone() const
+			{
+			NxsDataBlock * a = new NxsDataBlock(taxa, assumptionsBlock);
+			*a = *this;
+			return a;
+			}
+
+		void TransferTo(NxsCharactersBlock &charactersblock);
+		void Reset();
+	private:
+		friend class MultiFormatReader;
+
+	};
+
+typedef NxsDataBlock DataBlock;
+
+class NxsDataBlockFactory
+	:public NxsBlockFactory
+	{
+	public:
+		virtual NxsDataBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
+	};
+
+#endif
diff --git a/ncl/nxsdefs.h b/ncl/nxsdefs.h
new file mode 100644
index 0000000..eb73b54
--- /dev/null
+++ b/ncl/nxsdefs.h
@@ -0,0 +1,108 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#ifndef NCL_NXSDEFS_H
+#define NCL_NXSDEFS_H
+
+#include <iostream>
+#include <vector>
+#include <map>
+#include <set>
+#include <list>
+#include <utility>
+
+#define NCL_MAJOR_VERSION 2
+#define NCL_MINOR_VERSION 1
+#define NCL_NAME_AND_VERSION  "NCL version 2.1.17"
+#define NCL_COPYRIGHT         "Copyright (c) 1999-2011 by Paul O. Lewis and Mark T. Holder"
+#define NCL_HOMEPAGEURL       "http://sourceforge.net/projects/ncl"
+
+#if defined(RESERVE_ID_KEYWORD)
+#	define NCL_BLOCKTYPE_ATTR_NAME blockTypeName
+#else
+#	define NCL_BLOCKTYPE_ATTR_NAME id
+#endif
+// NCL_COULD_BE_CONST is a mechanism for declaring some old (v < 2.1) functions
+// 	to be const without breaking old client code.
+// If you would like your code to be more const-correct, then define NCL_CONST_FUNCS
+//	when you compile NCL and your code.  This will cause several functions that
+//	should have been declared as const to be declared that way in your code.
+// By default NCL_CONST_FUNCS will not be defined and these functions will not
+//	be defined as const member functions.
+#if defined(NCL_CONST_FUNCS) && NCL_CONST_FUNCS
+#	define NCL_COULD_BE_CONST const
+	int onlyDefinedInCouldBeConst();
+#else
+#	define NCL_COULD_BE_CONST
+#endif
+
+#if defined(IGNORE_NXS_ASSERT) || defined(NDEBUG)
+#	define NCL_ASSERT(expr)
+#else
+	void ncl_assertion_failed(char const * expr, char const * function, char const * file, long line);
+#	define NCL_ASSERT(expr)  if (!(expr)) ncl_assertion_failed((const char *)#expr, (const char *)__FUNCTION__, __FILE__, __LINE__)
+#endif
+
+// Maximum number of states that can be stored; the only limitation is that this
+// number be less than the maximum size of an int (not likely to be a problem).
+// A good number for this is 76, which is 96 (the number of distinct symbols
+// able to be input from a standard keyboard) less 20 (the number of symbols
+// symbols disallowed by the NEXUS standard for use as state symbols)
+//
+#define NCL_MAX_STATES         76
+
+typedef std::streampos	file_pos;
+
+#define	SUPPORT_OLD_NCL_NAMES
+
+class NxsString;
+
+typedef std::vector<bool> NxsBoolVector;
+typedef std::vector<char> NxsCharVector;
+typedef std::vector<int> NxsIntVector;
+typedef std::vector<unsigned> NxsUnsignedVector;
+typedef std::vector<NxsString> NxsStringVector;
+typedef std::vector<NxsStringVector> NxsAllelesVector;
+
+typedef std::set<unsigned> NxsUnsignedSet;
+
+typedef std::map< unsigned, NxsStringVector> NxsStringVectorMap;
+typedef std::map< NxsString, NxsString> NxsStringMap;
+typedef std::map< NxsString, NxsUnsignedSet> NxsUnsignedSetMap;
+
+typedef std::pair<std::string, NxsUnsignedSet> NxsPartitionGroup;
+typedef std::list<NxsPartitionGroup> NxsPartition;
+typedef std::map<std::string, NxsPartition> NxsPartitionsByName;
+
+// The following typedefs are simply for maintaining compatibility with existing code.
+// The names on the right are deprecated and should not be used.
+//
+typedef NxsBoolVector BoolVect;
+typedef NxsUnsignedSet IntSet;
+typedef NxsUnsignedSetMap IntSetMap;
+typedef NxsAllelesVector AllelesVect;
+typedef NxsStringVector LabelList;
+typedef NxsStringVector StrVec;
+typedef NxsStringVector vecStr;
+typedef NxsStringVectorMap LabelListBag;
+typedef NxsStringMap AssocList;
+
+class ProcessedNxsToken;
+typedef std::vector<ProcessedNxsToken> ProcessedNxsCommand;
+
+#endif
diff --git a/ncl/nxsdiscretedatum.h b/ncl/nxsdiscretedatum.h
new file mode 100644
index 0000000..26e39e0
--- /dev/null
+++ b/ncl/nxsdiscretedatum.h
@@ -0,0 +1,58 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSDISCRETEDATUM_H
+#define NCL_NXSDISCRETEDATUM_H
+
+/*!
+	Reference to a cell in a DiscreteMatrix.  This class has been deprecated and is retained in NCL >= 2.1 for backward
+	compatibility only.
+	It no longer stores the data for a cell, but can refer to the cell in a matrix in the context in which the
+	matrix is at hand. The only time that NxsDiscreteDatum appears in the public NCL interface is as an argument to
+	NxsCharactersBlock::WriteStates().  The new implementation of NxsDiscreteDatum should continue to work in this
+	context because the NxsCharactersBlock holds the matrix
+*/
+class NxsDiscreteDatum
+	{
+	friend class NxsDiscreteMatrix;
+	friend class NxsUnalignedBlock;
+
+	public:
+		NxsDiscreteDatum(): taxInd(0), charInd(0){}
+		NxsDiscreteDatum(unsigned row, unsigned col): taxInd(row), charInd(col){}
+		void				CopyFrom(const NxsDiscreteDatum & other);
+
+		unsigned taxInd; /*row of the matrix */
+		unsigned charInd; /*col of the matrix */
+
+	};
+
+typedef NxsDiscreteDatum DiscreteDatum;
+
+/*!
+	This assignment operator calls the CopyFrom member function to make a copy of the NxsDiscreteDatum object `other'.
+*/
+inline void NxsDiscreteDatum::CopyFrom(
+  const NxsDiscreteDatum & other)	/* is the object to be copied */
+	{
+	taxInd = other.taxInd;
+	charInd = other.charInd;
+	}
+
+#endif
diff --git a/ncl/nxsdistancedatum.h b/ncl/nxsdistancedatum.h
new file mode 100644
index 0000000..bdde053
--- /dev/null
+++ b/ncl/nxsdistancedatum.h
@@ -0,0 +1,42 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSDISTANCEDATUM_H
+#define NCL_NXSDISTANCEDATUM_H
+
+/*!
+	This class stores pairwise distance values. It has no public access functions, reflecting the fact that it is
+	manipulated strictly by its only friend class, the NxsDistancesBlock class.
+*/
+class NxsDistanceDatum
+	{
+	public:
+
+		NxsDistanceDatum()
+		:value(0.0),
+		missing(true)
+		{}
+
+		double		value;		/* the pairwise distance value stored */
+		bool		missing;	/* true if there is missing data for this pair */
+	};
+
+typedef NxsDistanceDatum DistanceDatum;
+
+#endif
diff --git a/ncl/nxsdistancesblock.cpp b/ncl/nxsdistancesblock.cpp
new file mode 100644
index 0000000..eb4e38b
--- /dev/null
+++ b/ncl/nxsdistancesblock.cpp
@@ -0,0 +1,714 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <iomanip>
+#include <climits>
+#include <cstdlib>
+
+#include "ncl/nxsdistancesblock.h"
+#include "ncl/nxsreader.h"
+using namespace std;
+
+
+void NxsDistancesBlock::WriteFormatCommand(std::ostream &out) const
+	{
+	out << "    FORMAT Missing = " << missing << " Triangle = Lower Diagonal;\n";
+	}
+
+void NxsDistancesBlock::WriteMatrixCommand(std::ostream &out) const
+	{
+	if (taxa == NULL)
+		return;
+	unsigned width = taxa->GetMaxTaxonLabelLength();
+	const unsigned ntaxTotal = taxa->GetNTax();
+	out << "MATRIX";
+	int prec = (int)out.precision(10);
+	for (unsigned i = 0; i < ntaxTotal; i++)
+		{
+		const std::string currTaxonLabel = NxsString::GetEscaped(taxa->GetTaxonLabel(i));
+		out << '\n' << currTaxonLabel;
+		unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+		unsigned diff = width - currTaxonLabelLen;
+		for (unsigned k = 0; k < diff+5; k++)
+			out << ' ';
+		for (unsigned j = 0; j< i; j++)
+			{
+			if (IsMissing(i,j))
+				out << ' ' << missing << "         ";
+			else
+				out << ' '<< GetDistance(i, j);
+			}
+		out << " 0.0";
+		}
+	out << ";\n";
+	out.precision(prec);
+	}
+
+void NxsDistancesBlock::WriteAsNexus(std::ostream &out) const
+	{
+	out << "BEGIN DISTANCES;\n";
+	WriteBasicBlockCommands(out);
+	if (nchar > 0)
+		out << "    DIMENSIONS NChar = " << nchar << ";\n";
+	WriteFormatCommand(out);
+	WriteMatrixCommand(out);
+	WriteSkippedCommands(out);
+	out << "END;\n";
+	}
+
+
+/*!
+	See Reset() for defaults
+*/
+NxsDistancesBlock::NxsDistancesBlock(
+  NxsTaxaBlockAPI *t)	/* the NxsTaxaBlockAPI that will keep track of taxon labels */
+  : NxsBlock(),
+  NxsTaxaBlockSurrogate(t, NULL)
+	{
+	NCL_BLOCKTYPE_ATTR_NAME = "DISTANCES";
+	Reset();
+	}
+
+/*!
+	Deletes `matrix' and `taxonPos' arrays.
+*/
+NxsDistancesBlock::~NxsDistancesBlock()
+	{
+	Reset();
+	}
+
+/*!
+	Called when DIMENSIONS command needs to be parsed from within the DISTANCES block. Deals with everything after the
+	token DIMENSIONS up to and including the semicolon that terminates the DIMENSIONS command.
+*/
+void NxsDistancesBlock::HandleDimensionsCommand(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	nchar = 0;
+	unsigned ntaxRead = 0;
+	for (;;)
+		{
+		token.GetNextToken();
+		if (token.Equals("NEWTAXA"))
+			newtaxa = true;
+		else if (token.Equals("NTAX"))
+			{
+			DemandEquals(token, "after NTAX in DIMENSIONS command");
+			ntaxRead = DemandPositiveInt(token, "NTAX");
+			}
+		else if (token.Equals("NCHAR"))
+			{
+			DemandEquals(token, "in DIMENSIONS command");
+			nchar = DemandPositiveInt(token, "NCHAR");
+			}
+		else if (token.Equals(";"))
+			break;
+		}
+	if (newtaxa)
+		{
+		if (ntaxRead == 0)
+			{
+			errormsg = "DIMENSIONS command must have an NTAX subcommand when the NEWTAXA option is in effect.";
+			throw NxsException(errormsg, token);
+			}
+		expectedNtax = ntaxRead;
+		AssureTaxaBlock(createImpliedBlock, token, "Dimensions");
+		if (!createImpliedBlock)
+			{
+			taxa->Reset();
+			if (nexusReader)
+				nexusReader->RemoveBlockFromUsedBlockList(taxa);
+			}
+		taxa->SetNtax(expectedNtax);
+		}
+	else
+		{
+		AssureTaxaBlock(false, token, "Dimensions");
+		const unsigned ntaxinblock = taxa->GetNumTaxonLabels();
+		if (ntaxinblock == 0)
+			{
+			errormsg = "A TAXA block must be read before character data, or the DIMENSIONS command must use the NEWTAXA.";
+			throw NxsException(errormsg, token);
+			}
+		if (ntaxinblock < ntaxRead)
+			{
+			errormsg = "NTAX in ";
+			errormsg << NCL_BLOCKTYPE_ATTR_NAME << " block must be less than or equal to NTAX in TAXA block\nNote: one circumstance that can cause this error is \nforgetting to specify NTAX in DIMENSIONS command when \na TAXA block has not been provided";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		expectedNtax = (ntaxRead == 0 ? ntaxinblock : ntaxRead);;
+		}
+	}
+
+/*!
+	Called when FORMAT command needs to be parsed from within the DISTANCES block. Deals with everything after the
+	token FORMAT up to and including the semicolon that terminates the FORMAT command.
+*/
+void NxsDistancesBlock::HandleFormatCommand(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	for (;;)
+		{
+		token.GetNextToken();
+		if (token.Equals(";"))
+			break;
+		if (token.Equals("TRIANGLE"))
+			{
+			DemandEquals(token, "after TRIANGLE");
+			token.GetNextToken();
+			if (token.Equals("LOWER"))
+				triangle = NxsDistancesBlockEnum(lower);
+			else if (token.Equals("UPPER"))
+				triangle = NxsDistancesBlockEnum(upper);
+			else if (token.Equals("BOTH"))
+				triangle = NxsDistancesBlockEnum(both);
+			else
+				{
+				errormsg = "Expecting UPPER, LOWER, or BOTH but found ";
+				errormsg += token.GetToken();
+				errormsg += " instead";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			}
+		else if (token.Equals("DIAGONAL"))
+			diagonal = true;
+		else if (token.Equals("NODIAGONAL"))
+			diagonal = false;
+		else if (token.Equals("LABELS"))
+			labels = true;
+		else if (token.Equals("NOLABELS"))
+			labels = false;
+		else if (token.Equals("INTERLEAVE"))
+			interleave = true;
+		else if (token.Equals("NOINTERLEAVE"))
+			interleave = false;
+		else if (token.Equals("MISSING"))
+			{
+			DemandEquals(token, "after MISSING");
+			token.GetNextToken();
+			if (token.GetTokenLength() != 1 || isdigit(token.GetTokenReference()[0]))
+				{
+				errormsg = "Missing data symbol specified (";
+				errormsg += token.GetToken();
+				errormsg += ") is invalid (must be a single character)";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			missing = token.GetTokenReference()[0];
+			}
+		else
+			{
+			errormsg = "Token specified (";
+			errormsg += token.GetToken();
+			errormsg += ") is an invalid subcommand for the FORMAT command";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		}
+	}
+
+/*!
+	Called from within HandleMatrix, this function is used to deal with interleaved matrices. It is called once for
+	each pass through the taxa. The local variable `jmax' records the number of columns read in the current interleaved
+	page and is used to determine the offset used for j in subsequent pages.
+*/
+bool NxsDistancesBlock::HandleNextPass(
+  NxsToken &token,	/* the token we are using for reading the data file */
+  unsigned &offset,	/* the offset */
+  vector<unsigned> & fileMatrixCmdOrderToTaxInd,
+  set<unsigned> & taxIndsRead)
+	{
+	unsigned jmax = 0;
+	bool done = false;
+
+	unsigned i_first = 0;
+	if (triangle == NxsDistancesBlockEnum(lower))
+		i_first = offset;
+	unsigned i_last = expectedNtax;
+	errormsg.clear();
+	for (unsigned i = i_first; i < i_last; i++)
+		{
+		// Deal with taxon label if provided. Here are the four situations we need to deal with:
+		//   newtaxa  (offset > 0)  handled by
+		//      0           0         case 1
+		//      0           1         case 1
+		//      1           0         case 2
+		//      1           1         case 1
+		//
+		if (labels && (!newtaxa || offset > 0))
+			{
+			// Case 1: Expecting taxon labels, and also expecting them to already be in taxa
+			//
+			do
+				{
+				token.SetLabileFlagBit(NxsToken::newlineIsToken);
+				token.GetNextToken();
+				}
+			while(token.AtEOL());
+
+			try
+				{
+				// Look up position of taxon in NxsTaxaBlockAPI list
+				//
+				unsigned k = taxa->FindTaxon(token.GetToken());
+				if (k != i && triangle != NxsDistancesBlockEnum(lower))
+					{
+					errormsg << "Taxon " << token.GetToken() << " was not expected in the DISTANCES matrix.\nTaxa should be in the same order as in the Taxon block";
+					throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+					}
+
+				// Array taxonPos is initialized to UINT_MAX and filled in as taxa are encountered
+				//
+				if (fileMatrixCmdOrderToTaxInd[i] == UINT_MAX)
+					{
+					fileMatrixCmdOrderToTaxInd[i] = k;
+					if (taxIndsRead.count(k) > 0)
+						{
+						errormsg << "Taxon " << token.GetToken() << " was encountered more than one time in the Distances Matrix.";
+						throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+						}
+					taxIndsRead.insert(k);
+					}
+				else if (fileMatrixCmdOrderToTaxInd[i] != k)
+					{
+					errormsg << "Taxon labeled " << token.GetToken() << " is out of order compared to previous interleave pages";
+					throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+					}
+				}
+			catch (NxsTaxaBlock::NxsX_NoSuchTaxon)
+				{
+				errormsg = "Could not find ";
+				errormsg += token.GetToken();
+				errormsg += " among taxa previously defined";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			}
+
+		else if (labels && newtaxa)
+			{
+			// Case 2: Expecting taxon labels, and also expecting taxa block to be empty
+			//
+			do
+				{
+				token.SetLabileFlagBit(NxsToken::newlineIsToken);
+				token.GetNextToken();
+				}
+			while(token.AtEOL());
+			const NxsString t(token.GetToken().c_str());
+			taxa->AddTaxonLabel(t);
+			fileMatrixCmdOrderToTaxInd[i] = i;
+			taxIndsRead.insert(i);
+			}
+
+		// Now deal with the row of distance values
+		//
+		unsigned true_j = 0;
+		for (unsigned j = 0; j < expectedNtax; j++)
+			{
+			if (i == expectedNtax - 1)
+				{
+				if (j == expectedNtax - 1)
+					done = true;
+				if (true_j == expectedNtax - 1 || (!diagonal && triangle == NxsDistancesBlockEnum(upper)))
+					{
+					done = true;
+					break;
+					}
+				}
+			if (!diagonal && triangle == NxsDistancesBlockEnum(lower) && j == expectedNtax - offset - 1)
+				{
+				done = true;
+				break;
+				}
+
+			token.SetLabileFlagBit(NxsToken::newlineIsToken);
+			token.GetNextToken();
+
+			if (token.AtEOL())
+				{
+				if (j > jmax)
+					{
+					jmax = j;
+					if (!diagonal && triangle == NxsDistancesBlockEnum(upper) && i >= offset)
+						jmax++;
+					if (interleave && triangle == NxsDistancesBlockEnum(upper))
+						i_last = jmax + offset;
+					}
+				break;
+				}
+
+			true_j = j + offset;
+			if (triangle == NxsDistancesBlockEnum(upper) && i > offset)
+				true_j += (i - offset);
+			if (!diagonal && triangle == NxsDistancesBlockEnum(upper) && i >= offset)
+				true_j++;
+
+			if (true_j == expectedNtax)
+				{
+				errormsg = "Too many distances specified in row just read in";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+
+			string t = token.GetToken();
+			unsigned corrected_i = fileMatrixCmdOrderToTaxInd.at(i);
+			unsigned corrected_j = true_j;
+			if (triangle == NxsDistancesBlockEnum(lower))
+				corrected_j = fileMatrixCmdOrderToTaxInd.at(true_j);
+			if (corrected_i == UINT_MAX || corrected_j == UINT_MAX)
+				{
+				errormsg = "Illegal internal row number for taxon in Distance Matrix.";
+				throw NxsNCLAPIException(errormsg, token);
+				}
+			if (token.GetTokenLength() == 1 && t[0] == missing)
+				SetMissing(corrected_i, corrected_j);
+			else
+				SetDistance(corrected_i, corrected_j, atof(t.c_str()));
+			}
+		}
+	offset += jmax;
+	return done;
+	}
+
+void NxsDistancesBlock::CopyDistancesContents(const NxsDistancesBlock &other)
+	{
+	expectedNtax = other.expectedNtax;
+	nchar = other.nchar;
+	diagonal = other.diagonal;
+	interleave = other.interleave;
+	labels = other.labels;
+	triangle = other.triangle;
+	missing = other.missing;
+	matrix = other.matrix;
+	}
+
+/*!
+	Called when MATRIX command needs to be parsed from within the DISTANCES block. Deals with everything after the
+	token MATRIX up to and including the semicolon that terminates the MATRIX command.
+*/
+void NxsDistancesBlock::HandleMatrixCommand(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	errormsg.clear();
+	if (expectedNtax == 0 || taxa == NULL)
+		{
+		AssureTaxaBlock(false, token, "Matrix");
+		expectedNtax = taxa->GetNumTaxonLabels();
+		}
+	if (expectedNtax == 0)
+		{
+		errormsg = "MATRIX command cannot be read if NTAX is zero";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	if (triangle == NxsDistancesBlockEnum(both) && !diagonal)
+		{
+		errormsg = "Cannot specify NODIAGONAL and TRIANGLE=BOTH at the same time";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	if (newtaxa)
+		taxa->Reset();
+
+	vector<unsigned> fileMatrixCmdOrderToTaxInd(expectedNtax, UINT_MAX);
+	set<unsigned> taxIndsRead;
+	unsigned nTaxInTaxBlock = taxa->GetNumTaxonLabels();
+	if (nTaxInTaxBlock < expectedNtax)
+		{
+		errormsg << "NTAX in " << NCL_BLOCKTYPE_ATTR_NAME << " block must be less than or equal to NTAX in TAXA block\nNote: one circumstance that can cause this error is \nforgetting to specify NTAX in DIMENSIONS command when \na TAXA block has not been provided";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	NxsDistanceDatumRow row(nTaxInTaxBlock);
+	matrix.assign(nTaxInTaxBlock, row);
+	unsigned offset = 0;
+	for (;;)
+		{
+		if (HandleNextPass(token, offset, fileMatrixCmdOrderToTaxInd, taxIndsRead))
+			break;
+		}
+	DemandEndSemicolon(token, "MATRIX");
+	}
+
+/*!
+	This function provides the ability to read everything following the block name (which is read by the NEXUS object)
+	to the end or endblock statement. Characters are read from the input stream in. Overrides the abstract virtual
+	function in the base class.
+*/
+void NxsDistancesBlock::Read(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	isEmpty = false;
+
+	DemandEndSemicolon(token, "BEGIN DISTANCES");
+
+	for (;;)
+		{
+		token.GetNextToken();
+		NxsBlock::NxsCommandResult res = HandleBasicBlockCommands(token);
+		if (res == NxsBlock::NxsCommandResult(STOP_PARSING_BLOCK))
+			return;
+		if (res != NxsBlock::NxsCommandResult(HANDLED_COMMAND))
+			{
+			if (token.Equals("DIMENSIONS"))
+				HandleDimensionsCommand(token);
+			else if (token.Equals("FORMAT"))
+				HandleFormatCommand(token);
+			else if (token.Equals("TAXLABELS"))
+				HandleTaxLabels(token);
+			else if (token.Equals("MATRIX"))
+				HandleMatrixCommand(token);
+			else
+				SkipCommand(token);
+			}
+		}
+	}
+
+/*!
+	This function outputs a brief report of the contents of this taxa block. Overrides the abstract virtual function in
+	the base class.
+*/
+void NxsDistancesBlock::Report(
+  std::ostream &out) NCL_COULD_BE_CONST /* the output stream to which to write the report */ /*v2.1to2.2 1 */
+	{
+	const unsigned ntaxTotal = taxa->GetNumTaxonLabels();
+
+	out << endl;
+	out << NCL_BLOCKTYPE_ATTR_NAME << " block contains ";
+	if (ntaxTotal == 0)
+		{
+		out << "no taxa" << endl;
+		}
+	else if (ntaxTotal == 1)
+		out << "one taxon" << endl;
+	else
+		out << ntaxTotal << " taxa" << endl;
+
+	if (IsLowerTriangular())
+		out << "  Matrix is lower-triangular" << endl;
+	else if (IsUpperTriangular())
+		out << "  Matrix is upper-triangular" << endl;
+	else
+		out << "  Matrix is rectangular" << endl;
+
+	if (IsInterleave())
+		out << "  Matrix is interleaved" << endl;
+	else
+		out << "  Matrix is non-interleaved" << endl;
+
+	if (IsLabels())
+		out << "  Taxon labels provided" << endl;
+	else
+		out << "  No taxon labels provided" << endl;
+
+	if (IsDiagonal())
+		out << "  Diagonal elements specified" << endl;
+	else
+		out << "  Diagonal elements not specified" << endl;
+
+	out << "  Missing data symbol is " << missing << endl;
+
+	if (expectedNtax == 0)
+		return;
+
+	out.setf(ios::fixed, ios::floatfield);
+	out.setf(ios::showpoint);
+	for (unsigned i = 0; i < ntaxTotal; i++)
+		{
+		if (labels)
+			out << setw(20) << taxa->GetTaxonLabel(i);
+		else
+			out << "        ";
+
+		for (unsigned j = 0; j < ntaxTotal; j++)
+			{
+			if (triangle == NxsDistancesBlockEnum(upper) && j < i)
+				out << setw(12) << " ";
+			else if (triangle == NxsDistancesBlockEnum(lower) && j > i)
+				continue;
+			else if (!diagonal && i == j)
+				{
+				out << setw(12) << " ";
+				}
+			else if (IsMissing(i, j))
+				out << setw(12) << missing;
+			else
+				out << setw(12) << GetDistance(i, j);
+			}
+
+		out << endl;
+		}
+	}
+
+/*!
+	Flushes taxonLabels and sets ntax to 0 in preparation for reading a new TAXA block.
+	`triangle' to `NxsDistancesBlockEnum::lower',
+	`missing' to '?',
+	`labels' and `diagonal' to true,
+	`newtaxa' and `interleave' to false,
+	`expectedNtax' and `nchar' to 0.
+	and clears the matrix.
+*/
+void NxsDistancesBlock::Reset()
+	{
+	NxsBlock::Reset();
+	ResetSurrogate();
+	matrix.clear();
+	expectedNtax        = 0;
+	nchar       = 0;
+	diagonal    = true;
+	labels      = true;
+	interleave  = false;
+	missing     = '?';
+	triangle    = NxsDistancesBlockEnum(lower);
+	}
+
+/*!
+	Returns the value of nchar.
+*/
+unsigned NxsDistancesBlock::GetNchar() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return nchar;
+	}
+
+/*!
+	Returns the value of the (`i', `j')th element of `matrix'. Assumes `i' and `j' are both in the range [0..`ntax')
+	and the distance stored at `matrix[i][j]' is not missing. Also assumes `matrix' is not NULL.
+*/
+double NxsDistancesBlock::GetDistance(
+  unsigned i,	/* the row */
+  unsigned j) const /* the column */
+	{
+	return GetCell(i,j).value;
+	}
+
+/*!
+	Returns the value of `missing'.
+*/
+char NxsDistancesBlock::GetMissingSymbol() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return missing;
+	}
+
+/*!
+	Returns the value of `triangle'.
+*/
+unsigned NxsDistancesBlock::GetTriangle() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return triangle;
+	}
+
+/*!
+	Returns true if the value of `triangle' is NxsDistancesBlockEnum(both), false otherwise.
+*/
+bool NxsDistancesBlock::IsRectangular() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return (triangle == NxsDistancesBlockEnum(both) ? true : false);
+	}
+
+/*!
+	Returns true if the value of triangle is NxsDistancesBlockEnum(upper), false otherwise.
+*/
+bool NxsDistancesBlock::IsUpperTriangular() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return (triangle == NxsDistancesBlockEnum(upper) ? true : false);
+	}
+
+/*!
+	Returns true if the value of triangle is NxsDistancesBlockEnum(lower), false otherwise.
+*/
+bool NxsDistancesBlock::IsLowerTriangular() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return (triangle == NxsDistancesBlockEnum(lower) ? true : false);
+	}
+
+/*!
+	Returns the value of diagonal.
+*/
+bool NxsDistancesBlock::IsDiagonal() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return diagonal;
+	}
+
+/*!
+	Returns the value of interleave.
+*/
+bool NxsDistancesBlock::IsInterleave() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return interleave;
+	}
+
+/*!
+	Returns the value of labels.
+*/
+bool NxsDistancesBlock::IsLabels() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return labels;
+	}
+
+/*!
+	Returns true if the (`i',`j')th distance is missing. Assumes `i' and `j' are both in the range [0..`ntax') and
+	`matrix' is not NULL.
+*/
+bool NxsDistancesBlock::IsMissing(
+  unsigned i,	/* the row */
+  unsigned j) const	/* the column */
+	{
+	return (bool)(GetCell(i,j).missing);
+	}
+
+/*!
+	Sets the value of the (`i',`j')th matrix element to `d' and `missing' to false . Assumes `i' and `j' are both in
+	the range [0..`ntax') and `matrix' is not NULL.
+*/
+void NxsDistancesBlock::SetDistance(
+  unsigned i,	/* the row */
+  unsigned j,	/* the column */
+  double d)		/* the distance value */
+	{
+	NxsDistanceDatum & c =  GetCell(i, j);
+	c.value = d;
+	c.missing = false;
+	}
+
+/*!
+	Sets the value of the (`i', `j')th `matrix' element to missing. Assumes `i' and `j' are both in the range
+	[0..`ntax') and `matrix' is not NULL.
+*/
+void NxsDistancesBlock::SetMissing(
+  unsigned i,	/* the row */
+  unsigned j)	/* the column */
+	{
+	NxsDistanceDatum & c =  GetCell(i, j);
+	c.missing = 1;
+	c.value = 0.0;
+	}
+
+/*!
+	Sets `nchar' to `n'.
+*/
+void NxsDistancesBlock::SetNchar(
+  unsigned n)	/* the number of characters */
+	{
+	nchar = n;
+	}
+
+NxsDistancesBlock *NxsDistancesBlockFactory::GetBlockReaderForID(const std::string & idneeded, NxsReader *reader, NxsToken *)
+	{
+	if (reader == NULL || idneeded != "DISTANCES")
+		return NULL;
+	NxsDistancesBlock * nb  = new NxsDistancesBlock(NULL);
+	nb->SetCreateImpliedBlock(true);
+	nb->SetImplementsLinkAPI(true);
+	return nb;
+	}
diff --git a/ncl/nxsdistancesblock.h b/ncl/nxsdistancesblock.h
new file mode 100644
index 0000000..39dd4d5
--- /dev/null
+++ b/ncl/nxsdistancesblock.h
@@ -0,0 +1,197 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSDISTANCESBLOCK_H
+#define NCL_NXSDISTANCESBLOCK_H
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxstaxablock.h"
+#include "ncl/nxsdistancedatum.h"
+
+/*!
+	This class handles reading and storage for the NEXUS block DISTANCES. It overrides the member functions Read and
+	Reset, which are abstract virtual functions in the base class NxsBlock. Below is a table showing the correspondence
+	between the elements of a DISTANCES block and the variables and member functions that can be used to access each
+	piece of information stored.
+>
+	NEXUS command   Command attribute  Data Members        Member Functions
+	------------------------------------------------------------------------
+	DIMENSIONS      NEWTAXA            newtaxa
+
+	                NTAX               ntax                GetNtax
+
+	                NCHAR              nchar               GetNchar
+
+	FORMAT          TRIANGLE           triangle            GetTriangle
+	                                                       IsUpperTriangular
+	                                                       IsLowerTriangular
+	                                                       IsRectangular
+
+	                [NO]DIAGONAL       diagonal            IsDiagonal
+
+	                [NO]LABELS         labels              IsLabels
+
+	                MISSING            missing             GetMissingSymbol
+
+	                INTERLEAVE         interleave          IsInterleave
+
+	                TAXLABELS          (stored in the      (access through
+					                   NxsTaxaBlockAPI        data member taxa)
+									   object)
+
+	MATRIX                             matrix              GetDistance
+	                                                       IsMissing
+	                                                       SetMissing
+	                                                       SetDistance
+	------------------------------------------------------------------------
+>
+*/
+class NxsDistancesBlock
+  : public NxsBlock, public NxsTaxaBlockSurrogate
+	{
+	public:
+							NxsDistancesBlock(NxsTaxaBlockAPI *t);
+		virtual				~NxsDistancesBlock();
+
+		double				GetDistance(unsigned i, unsigned j) const;
+		char				GetMissingSymbol() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		unsigned			GetNchar() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		unsigned			GetTriangle() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool				IsRectangular() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool				IsBoth() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool				IsDiagonal() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool				IsInterleave() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool				IsLabels() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		bool				IsLowerTriangular() NCL_COULD_BE_CONST ;  /*v2.1to2.2 1 */
+		bool				IsMissing(unsigned i, unsigned j) const;
+		bool				IsUpperTriangular() NCL_COULD_BE_CONST ;  /*v2.1to2.2 1 */
+		virtual void		Report(std::ostream &out) NCL_COULD_BE_CONST ;  /*v2.1to2.2 1 */
+		virtual void		Reset();
+		void				SetDistance(unsigned i, unsigned j, double d);
+		void				SetMissing(unsigned i, unsigned j);
+		void				SetNchar(unsigned i);
+		void				SetNexus(NxsReader *nxsptr)
+			{
+			NxsBlock::SetNexus(nxsptr);
+			NxsTaxaBlockSurrogate::SetNexusReader(nxsptr);
+			}
+			/*! \ref BlockTypeIDDiscussion */
+        virtual const std::string & GetBlockName() const
+            {
+            return NCL_BLOCKTYPE_ATTR_NAME;
+            }
+
+		enum NxsDistancesBlockEnum		/* used by data member triangle to determine which triangle(s) of the distance matrix is/are occupied */
+			{
+			upper			= 1,		/* matrix is upper-triangular */
+			lower			= 2,		/* matrix is lower-triangular */
+			both			= 3			/* matrix is rectangular */
+			};
+
+		virtual VecBlockPtr		GetImpliedBlocks()
+			{
+			return GetCreatedTaxaBlocks();
+			}
+
+		/*only used it the linkAPI is enabled*/
+		virtual void		HandleLinkCommand(NxsToken & token)
+			{
+			HandleLinkTaxaCommand(token);
+			}
+		virtual void		WriteLinkCommand(std::ostream &out) const
+			{
+			WriteLinkTaxaCommand(out);
+			}
+		void				WriteAsNexus(std::ostream &out) const;
+
+
+		NxsDistancesBlock &operator=(const NxsDistancesBlock &other)
+			{
+			Reset();
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			CopyTaxaBlockSurrogateContents(other);
+			CopyDistancesContents(other);
+			return *this;
+			}
+
+		void CopyDistancesContents(const NxsDistancesBlock &other);
+		NxsDistancesBlock * Clone() const
+			{
+			NxsDistancesBlock *d = new NxsDistancesBlock(taxa);
+			*d = *this;
+			return d;
+			}
+		bool 		SwapEquivalentTaxaBlock(NxsTaxaBlockAPI * tb)
+		{
+			return SurrogateSwapEquivalentTaxaBlock(tb);
+		}
+
+	protected:
+		void				WriteFormatCommand(std::ostream &out) const;
+		void				WriteMatrixCommand(std::ostream &out) const;
+
+		void				HandleDimensionsCommand(NxsToken &token);
+		void				HandleFormatCommand(NxsToken &token);
+		void				HandleMatrixCommand(NxsToken &token);
+		bool				HandleNextPass(NxsToken &token, unsigned &offset, std::vector<unsigned> & fileMatrixCmdOrderToTaxInd, std::set<unsigned> & taxIndsRead);
+		virtual void		Read(NxsToken &token);
+
+	private:
+		NxsDistanceDatum & GetCell(unsigned i, unsigned j)
+			{
+			return matrix.at(i).at(j);
+			}
+		const NxsDistanceDatum & GetCell(unsigned i, unsigned j) const
+			{
+			return matrix.at(i).at(j);
+			}
+		typedef std::vector<NxsDistanceDatum> NxsDistanceDatumRow;
+		typedef std::vector<NxsDistanceDatumRow> NxsDistanceDatumMatrix;
+
+		unsigned			expectedNtax;		/* number of taxa (determines dimensions of the matrix) */
+		unsigned			nchar;		/* the number of characters used in generating the pairwise distances */
+
+		bool				diagonal;	/* true if diagonal elements provided when reading in DISTANCES block */
+		bool				interleave;	/* true if interleave format used when reading in DISTANCES block */
+		bool				labels;		/* true if taxon labels were provided when reading in DISTANCES block */
+
+		int					triangle;	/* indicates whether matrix is upper triangular, lower triangular, or rectangular, taking on one of the elements of the NxsDistancesBlockEnum enumeration */
+
+		char				missing;	/* the symbol used to represent missing data (e.g. '?') */
+
+		NxsDistanceDatumMatrix	matrix;	/* the structure used for storing the pairwise distance matrix */
+		friend class PublicNexusReader;
+	};
+
+typedef NxsDistancesBlock	DistancesBlock;
+
+class NxsDistancesBlockFactory
+	:public NxsBlockFactory
+	{
+	public:
+		virtual NxsDistancesBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
+	};
+
+inline bool NxsDistancesBlock::IsBoth() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
+	{
+	return this->IsRectangular();
+	}
+
+#endif
+
diff --git a/ncl/nxsexception.cpp b/ncl/nxsexception.cpp
new file mode 100644
index 0000000..3b3521a
--- /dev/null
+++ b/ncl/nxsexception.cpp
@@ -0,0 +1,106 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#include "ncl/nxsexception.h"
+#include "ncl/nxstoken.h"
+
+using namespace std;
+/*!
+	Copies 's' to msg and sets line, col and pos to the current line, column and position in the file where parsing
+	stopped.
+*/
+NxsException::NxsException(
+  const std::string & s,	/* the message for the user */
+  file_pos fp,	/* the current file position */
+  long fl,		/* the current file line */
+  long fc)		/* the current file column */
+	{
+	msg.assign(s);
+	addPositionInfo(fp, fl, fc);
+	}
+
+/*!
+	Creates a NxsException object with the specified message, getting file position information from the NxsToken.
+*/
+NxsException::NxsException(
+  const std::string &s,		/* message that describes the error */
+  const NxsToken &t)		/* NxsToken that was supplied the last token (the token that caused the error) */
+	{
+	msg		= NxsString(s.c_str());
+	this->addPositionInfo(t);
+  	}
+
+NxsException::NxsException(const std::string &s, const ProcessedNxsToken &t)
+	{
+	msg		= NxsString(s.c_str());
+	this->addPositionInfo(t);
+	}
+
+NxsException::NxsException(const std::string &s, const NxsTokenPosInfo &t)
+	{
+	msg		= NxsString(s.c_str());
+	this->addPositionInfo(t);
+	}
+
+const char * NxsException::nxs_what () const
+	{
+	std::string m = "Nexus Parsing error: ";
+	m.append(msg);
+	msg.assign(m);
+	if (line >= 0)
+		msg << " at line " << line;
+	if (col >= 0)
+		msg << " column " << col;
+	return msg.c_str();
+	}
+
+NxsSignalCanceledParseException::NxsSignalCanceledParseException(const std::string & s)
+	:NxsException(s)
+	{
+	msg = "Signal detected during NEXUS class library";
+	if (!s.empty())
+		msg << " in the processing step: " << s;
+	msg << '.';
+	}
+
+
+void NxsException::addPositionInfo(const NxsToken & t) 
+	{
+	pos = t.GetFilePosition();
+	line = t.GetFileLine();
+	col = t.GetFileColumn();
+	}
+void NxsException::addPositionInfo(const ProcessedNxsToken & t)
+	{
+	pos		= t.GetFilePosition();
+	line	= t.GetLineNumber();
+	col		= t.GetColumnNumber();
+	}
+void NxsException::addPositionInfo(const NxsTokenPosInfo & t)
+	{
+	pos		= t.GetFilePosition();
+	line	= t.GetLineNumber();
+	col		= t.GetColumnNumber();
+	}
+void NxsException::addPositionInfo(file_pos fp, long fl, long fc)
+	{
+	pos		= fp;
+	line	= fl;
+	col		= fc;
+	}
diff --git a/ncl/nxsexception.h b/ncl/nxsexception.h
new file mode 100644
index 0000000..ce10c9d
--- /dev/null
+++ b/ncl/nxsexception.h
@@ -0,0 +1,97 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSEXCEPTION_H
+#define NCL_NXSEXCEPTION_H
+
+#include "ncl/nxsstring.h"
+
+class NxsToken;
+class ProcessedNxsToken;
+class NxsTokenPosInfo;
+/*!
+	Exception class that conveys a message specific to the problem encountered.
+*/
+class NxsException: public std::exception
+	{
+	public:
+		mutable NxsString	msg;	/* NxsString to hold message */
+		file_pos	pos;	/* current file position */
+		long		line;	/* current line in file */
+		long		col;	/* column of current line */
+		virtual ~NxsException() throw()
+			{
+			}
+
+		NxsException(const std::string & s, file_pos fp = 0, long fl = 0L, long fc = 0L);
+		NxsException(const std::string &s, const NxsToken &t);
+		NxsException(const std::string &s, const ProcessedNxsToken &t);
+		NxsException(const std::string &s, const NxsTokenPosInfo &t);
+		const char * what () const throw ()
+			{
+			return msg.empty() ? "Unknown Nexus Exception" : msg.c_str();
+			}
+		const char * nxs_what () const;
+		void addPositionInfo(const NxsToken & t);
+		void addPositionInfo(const ProcessedNxsToken & t);
+		void addPositionInfo(const NxsTokenPosInfo & t);
+		void addPositionInfo(file_pos fp, long fl, long fc);
+	};
+
+typedef NxsException XNexus;
+
+/*!
+	Thrown when a programming error (a violation of one of the APIs used in NCL) is revealed.
+*/
+class NxsNCLAPIException: public NxsException
+	{
+	public:
+		NxsNCLAPIException(NxsString s) :NxsException(s, 0, -1L,-1L){}
+		NxsNCLAPIException(NxsString s, NxsToken &t) :NxsException(s, t){}
+	};
+
+/*!
+	Thrown when an unimplemented method is called.
+*/
+class NxsUnimplementedException: public NxsNCLAPIException
+	{
+	public:
+		NxsUnimplementedException(NxsString s):NxsNCLAPIException(s){}
+		NxsUnimplementedException(NxsString s, NxsToken &t):NxsNCLAPIException(s,t){}
+	};
+
+
+class DuplicatedLabelNxsException: public NxsException
+	{
+	public:
+		DuplicatedLabelNxsException(const std::string & s):NxsException(s){}
+	};
+
+
+/*------------------------------------------------------------------------------
+ This exception will be thrown if NCL signal handling is activated (static
+	methods in NxsReader control this) and a SIGINT is detected during a
+	parse.
+*/
+class NxsSignalCanceledParseException: public NxsException
+	{
+	public:
+		NxsSignalCanceledParseException(const std::string & s);
+	};
+#endif
diff --git a/ncl/nxsmultiformat.cpp b/ncl/nxsmultiformat.cpp
new file mode 100644
index 0000000..5546b17
--- /dev/null
+++ b/ncl/nxsmultiformat.cpp
@@ -0,0 +1,1597 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis and Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+
+/* The phylip parser is based on code from PHYLIP which is:
+ * version 3.6. (c) Copyright 1993-2004 by the University of Washington.
+ * Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, Andrew Keeffe,
+ * Mike Palczewski, Doug Buxton and Dan Fineman. Permission is granted to
+ * copy and use this program provided no fee is charged for it and provided
+ * that this copyright notice is not removed.
+ */
+
+
+/*
+ * This file is a phylip to NEXUS converter that consists of code from PHYLIP
+ * 3.6.5 (see copyright above) tweaked by Mark Holder to output NEXUS.
+ *
+ * This file was created by concatenating the headers, and .c files:
+ *	phylip.h,
+ *	seq.h,
+ *	discrete.h
+ *	phylip.c
+ *	seq.c,
+ *	pars.c, and
+ *	discrete.c concatenated
+ *	followed by removal of code that is unused in this simple program, and
+ * the addition of routines for printing out NEXUS.
+ */
+
+
+#include <cassert>
+#include <fstream>
+#include <algorithm>
+#include "ncl/nxsmultiformat.h"
+#include "ncl/nxsstring.h"
+
+const unsigned MAX_BUFFER_SIZE = 0x80000;
+
+
+
+
+
+
+
+const char * gFormatNames[] = {	"nexus",
+								"dnafasta",
+								"aafasta",
+								"rnafasta",
+								"dnaphylip",
+								"rnaphylip",
+								"aaphylip",
+								"discretephylip",
+								"dnaphylipinterleaved",
+								"rnaphylipinterleaved",
+								"aaphylipinterleaved",
+								"discretephylipinterleaved",
+								"dnarelaxedphylip",
+								"rnarelaxedphylip",
+								"aarelaxedphylip",
+								"discreterelaxedphylip",
+								"dnarelaxedphylipinterleaved",
+								"rnarelaxedphylipinterleaved",
+								"aarelaxedphylipinterleaved",
+								"discreterelaxedphylipinterleaved",
+								"dnaaln",
+								"rnaaln",
+								"aaaln",
+								"phyliptree",
+								"relaxedphyliptree",
+								"nexml",
+								"dnafin",
+								"aafin",
+								"rnafin"
+							};
+const unsigned gNumFormats = 29;
+const unsigned PHYLIP_NMLNGTH = 10;
+
+std::vector<std::string> MultiFormatReader::getFormatNames()
+	{
+	std::vector<std::string> v(gNumFormats);
+	for (unsigned i = 0; i < gNumFormats; ++i)
+		{
+		v[i] = std::string(gFormatNames[i]);
+		}
+	return v;
+	}
+
+
+
+class FileToCharBuffer
+{
+		char prevChar;
+		std::istream & inf;
+		unsigned remaining;
+		unsigned pos;
+	public:
+		unsigned totalSize;
+	protected:
+		unsigned lineNumber;
+		unsigned prevNewlinePos;
+	public:
+		/* reads at most MAX_BUFFER_SIZE characters from inf into the buffer that is
+		returned. The caller must delete the buffer.  On exit `len` will store the
+		length of the buffer.
+		*/
+
+		FileToCharBuffer(std::istream & instream);
+
+		/* reads at most maxLen characters from `inf` into the `buffer`
+		Returns false if no characters are read.
+		If true is returned then `maxLen` will indicate the number of characters read.
+		*/
+		bool refillBuffer(unsigned offset);
+		char current() const
+			{
+			return buffer[pos];
+			}
+		bool advance()
+			{
+			if (pos + 1 >= inbuffer)
+				{
+				if (!refillBuffer(0))
+					return false;
+				}
+			else
+				++pos;
+			const char c = current();
+			if (c == 13)
+				{
+				++lineNumber;
+				prevNewlinePos = position();
+				}
+			else if (c == 10)
+				{
+				if (prev() != 13)
+					++lineNumber;
+				prevNewlinePos = position();
+				}
+			return true;
+			}
+		bool advance_then_store(char & c)
+			{
+			if (!this->advance())
+				return false;
+			c = this->current();
+			return true;
+			}
+		bool skip_to_beginning_of_line(char & next);
+		char prev() const
+			{
+			if (pos == 0)
+				return prevChar;
+			return buffer[pos - 1];
+			}
+		~FileToCharBuffer()
+			{
+			delete [] buffer;
+			}
+		unsigned position() const
+			{
+			return totalSize +  pos - remaining - inbuffer;
+			}
+		unsigned line() const
+			{
+			return lineNumber;
+			}
+		unsigned column() const
+			{
+			unsigned p = position();
+			if (p < prevNewlinePos)
+				return 0;
+			return p - prevNewlinePos;
+			}
+		char * buffer;
+		unsigned inbuffer;
+
+};
+
+
+void MultiFormatReader::ReadFilepath(const char * filepath, const char * formatName)
+	{
+	if (!formatName)
+		return;
+	DataFormatType f =  formatNameToCode(formatName);
+	if (f == UNSUPPORTED_FORMAT)
+		{
+		NxsString m;
+		m << "Unsupported format: " << formatName;
+		throw NxsException(m);
+		}
+	this->ReadFilepath(filepath, f);
+	}
+
+void MultiFormatReader::ReadStream(std::istream & inf, const char * formatName)
+	{
+	if (!formatName)
+		return;
+	DataFormatType f =  formatNameToCode(formatName);
+	if (f == UNSUPPORTED_FORMAT)
+		{
+		NxsString m;
+		m << "Unsupported format: " << formatName;
+		throw NxsException(m);
+		}
+	this->ReadStream(inf, f);
+	}
+
+FileToCharBuffer::FileToCharBuffer(std::istream & instream)
+	:prevChar('\n'),
+	inf(instream),
+	pos(0),
+	totalSize(0),
+	lineNumber(1),
+	prevNewlinePos(0),
+	buffer(0L)
+	{
+	std::streampos s = inf.tellg();
+	inf.seekg (0, std::ios::end);
+	std::streampos e = inf.tellg();
+	if (e <= s)
+		{
+		inbuffer = 0;
+		remaining = 0;
+		return;
+		}
+	inf.seekg(s);
+	totalSize = static_cast<unsigned>(e - s);
+	inbuffer = std::min(MAX_BUFFER_SIZE, totalSize);
+	remaining = totalSize - inbuffer;
+	buffer = new char [inbuffer];
+	inf.read(buffer, inbuffer);
+	const char c = current();
+	if (c == 13)
+		{
+		++lineNumber;
+		prevNewlinePos = position();
+		}
+	else if (c == 10)
+		{
+		if (prev() != 13)
+			++lineNumber;
+		prevNewlinePos = position();
+		}
+	}
+
+bool FileToCharBuffer::refillBuffer(unsigned offset)
+	{
+	if (remaining  == 0)
+		return false;
+	if (offset == 0)
+		prevChar = buffer[inbuffer-1];
+	inbuffer = std::min(inbuffer - offset, remaining);
+	remaining -= inbuffer;
+	inf.read(buffer + offset, inbuffer);
+	pos = offset;
+	return true;
+	}
+
+
+MultiFormatReader::DataFormatType MultiFormatReader::formatNameToCode(const std::string &s)
+	{
+	std::string l(s);
+	NxsString::to_lower(l);
+	int ind = NxsString::index_in_array(l, gFormatNames, gNumFormats);
+	if (ind < 0)
+		return UNSUPPORTED_FORMAT;
+	NCL_ASSERT(ind < UNSUPPORTED_FORMAT);
+	return MultiFormatReader::DataFormatType(ind);
+	}
+
+
+
+/* Assumes that `contents` was returned from readFileToMemory() has been called
+	with `inf` and the `len` refers the size of the buffer allocated by
+	readFileToMemory
+*/
+bool  MultiFormatReader::readFastaSequences(
+	FileToCharBuffer & ftcb,
+	const NxsDiscreteDatatypeMapper &dm,
+	std::list<std::string> & taxaNames,
+	std::list<NxsDiscreteStateRow> & matList,
+	size_t & longest)
+	{
+	NCL_ASSERT(ftcb.buffer);
+	NxsString err;
+	for (;;)
+		{
+		if (ftcb.current() == '>' && ( ftcb.prev() == '\n' ||  ftcb.prev() == '\r'))
+			{
+			std::string n;
+			if (!ftcb.advance())
+				break;
+			for (;;)
+				{
+				char c = ftcb.current();
+				if (c == '\n' || c == '\r')
+					break;
+				n.append(1, c);
+				if (!ftcb.advance())
+					break;
+				}
+			std::string nameStripped = NxsString::strip_surrounding_whitespace(n);
+			if (this->coerceUnderscoresToSpaces)
+			    {
+			    NxsString x(nameStripped.c_str());
+			    x.UnderscoresToBlanks();
+			    nameStripped = x;
+			    }
+			taxaNames.push_back(nameStripped);
+
+			matList.push_back(NxsDiscreteStateRow());
+			if (!ftcb.advance())
+				break;
+			NxsDiscreteStateRow & row = *(matList.rbegin());
+			row.reserve(longest);
+			for (;;)
+				{
+				char c = ftcb.current();
+				if (c == '>' && (ftcb.prev() == '\n' || ftcb.prev() == '\r'))
+					break;
+				if (isgraph(c))
+					{
+					NxsDiscreteStateCell stateCode = dm.GetStateCodeStored(c);
+					if (stateCode == NXS_INVALID_STATE_CODE)
+						{
+						err << "Illegal state code \"" << c << "\" found when reading character " << (unsigned) row.size() << " for taxon " << n;
+						throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+						}
+					row.push_back(stateCode);
+					}
+				if (!ftcb.advance())
+					break;
+				}
+			longest = std::max(longest, row.size());
+			}
+		else 
+			{
+			if (isgraph(ftcb.current()))
+				{
+				err << "Illegal non-whitespace occurring outside of a name/sequence pair.  Expecting the first name to startwith > but found \"" << ftcb.current() << "\".";
+				throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+				}
+			if (!ftcb.advance())
+				break;
+			}
+		}
+	// pad with missing data to make even rows
+	std::list<NxsDiscreteStateRow>::iterator sIt = matList.begin();
+	bool allSameLength = true;
+	for (; sIt != matList.end(); ++sIt)
+		{
+		NxsDiscreteStateRow & row = *sIt;
+		if (row.size() < longest)
+			{
+			allSameLength = false;
+			break;
+			}
+		}
+	return allSameLength;
+	}
+
+std::string  MultiFormatReader::readPhylipName(FileToCharBuffer & ftcb, unsigned i, bool relaxedNames)
+	{
+	NxsString err;
+	std::string n;
+	if (relaxedNames)
+		{
+		do {
+			n.append(1,ftcb.current());
+			if (!ftcb.advance())
+				{
+				err << "End of file found when reading the name of taxon " << i+1 << ", \"" << n << "\"";
+				throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+				}
+			}
+		while (isgraph(ftcb.current()));
+		while (!isgraph(ftcb.current()))
+			{
+			if (!ftcb.advance())
+				{
+				err << "End of file found when expecting the beginning of the data for taxon " << i+1 << ", \"" << n << "\"";
+				throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+				}
+			}
+		}
+	else
+		{
+		std::string ws;
+		for (unsigned letter = 0; letter < PHYLIP_NMLNGTH; ++letter)
+			{
+			char c = ftcb.current();
+			if (isgraph(c))
+				{
+				n.append(ws);
+				n.append(1,c);
+				ws.clear();
+				}
+			else
+				ws.append(1, c);
+			if (!ftcb.advance())
+				{
+				err << "End of file found when reading the name for taxon " << i+1 << ", \"" << n << "\"";
+				throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+				}
+			}
+		}
+    if (this->coerceUnderscoresToSpaces)
+        {
+        NxsString x(n.c_str());
+        x.UnderscoresToBlanks();
+        n = x;
+        }
+
+	return n;
+	}
+
+void  MultiFormatReader::readPhylipData(
+	FileToCharBuffer & ftcb,
+	const NxsDiscreteDatatypeMapper &dm,
+	std::list<std::string> & taxaNames,
+	std::list<NxsDiscreteStateRow> & matList,
+	const unsigned n_taxa,
+	const unsigned n_char,
+	bool relaxedNames)
+	{
+	NCL_ASSERT(n_taxa > 0 && n_char > 0);
+	NxsString err;
+	matList.clear();
+	matList.assign(n_taxa, NxsDiscreteStateRow(n_char, NXS_INVALID_STATE_CODE));
+	std::list<NxsDiscreteStateRow>::iterator mIt = matList.begin();
+	while (!isgraph(ftcb.current()))
+		{
+		if (!ftcb.advance())
+			goto funcExit;
+		}
+
+	for (unsigned i = 0; i < n_taxa; ++i)
+		{
+		std::string n = readPhylipName(ftcb, i, relaxedNames);
+        taxaNames.push_back(n);
+		NCL_ASSERT(mIt != matList.end());
+		NxsDiscreteStateRow & row = *mIt++;
+		for (unsigned j = 0; j < n_char; ++j)
+			{
+			bool readChar = false;
+			for (;;)
+				{
+				const char c = ftcb.current();
+				if (isgraph(c))
+					{
+					if (isdigit(c))// I don't know why PHYLIP allows digits in the midst of the sequence, but it seems to.
+						{
+						err << "Number encountered (and ignored) within sequence for taxon " << n;
+						NexusWarn(err, NxsReader::PROBABLY_INCORRECT_CONTENT_WARNING, ftcb.position(), ftcb.line(), ftcb.column());
+						err.clear();
+						}
+					else
+						{
+						const NxsDiscreteStateCell stateCode = dm.GetStateCodeStored(c);
+						if (stateCode == NXS_INVALID_STATE_CODE)
+							{
+							if (c == '.')
+								{
+								if (i == 0)
+									{
+									err << "Illegal match character state code  \".\" found in the first taxon for character " << j + 1 ;
+									throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+									}
+								NxsDiscreteStateRow & firstRow = *(matList.begin());
+								row[j] = firstRow.at(j);
+								}
+							else
+								{
+								err << "Illegal state code \"" << c << "\" found when reading site " << j + 1 << " for taxon " << n;
+								throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+								}
+							}
+						else
+							row[j] = stateCode;
+						readChar = true;
+						}
+					}
+				if (!ftcb.advance())
+					goto funcExit;
+				if (readChar)
+					break;
+				}
+			}
+		char f = ftcb.current();
+		while (f != '\r' && f != '\n')
+			{
+			if (isgraph(f))
+				{
+				err << "Sequence longer than " << n_char << " found for taxon " << n << ". The character \""<< f << "\" was found, and will be ignored. If the file position of this error corresponds to sequences for the next taxon in the matrix, then that is an indication that the sequences for taxon " << n << " are too short.";
+				NexusWarn(err, NxsReader::PROBABLY_INCORRECT_CONTENT_WARNING, ftcb.position(), ftcb.line(), ftcb.column());
+				err.clear();
+				}
+			if (!ftcb.advance())
+				goto funcExit;
+			f = ftcb.current();
+			}
+		while (!isgraph(ftcb.current()))
+			{
+			if (!ftcb.advance())
+				goto funcExit;
+			}
+		}
+	funcExit:
+		if (matList.size() != n_taxa)
+			{
+			err << "Unexpected end of file.\nExpecting data for " << n_taxa << " taxa, but only found data for " << (unsigned) matList.size();
+			throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+			}
+		const NxsDiscreteStateRow & lastRow = *matList.rbegin();
+		if (lastRow.size() != n_char)
+			{
+			err << "Unexpected end of file.\nExpecting " << n_char << " characters for taxon " <<  *(taxaNames.rbegin()) << ", but only found " << (unsigned) lastRow.size() << " characters.";
+			throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+			}
+	}
+
+
+void  MultiFormatReader::readInterleavedPhylipData(
+	FileToCharBuffer & ftcb,
+	const NxsDiscreteDatatypeMapper &dm,
+	std::list<std::string> & taxaNames,
+	std::list<NxsDiscreteStateRow> & matList,
+	const unsigned n_taxa,
+	const unsigned n_char,
+	bool relaxedNames)
+	{
+	NCL_ASSERT(n_taxa > 0 && n_char > 0);
+	NxsString err;
+	matList.clear();
+	matList.assign(n_taxa, NxsDiscreteStateRow(n_char, NXS_INVALID_STATE_CODE));
+	std::list<NxsDiscreteStateRow>::iterator mIt = matList.begin();
+	unsigned startCharIndex = 0;
+	unsigned endCharIndex = n_char;
+	while (!isgraph(ftcb.current()))
+		{
+		if (!ftcb.advance())
+			goto funcExit;
+		}
+	while (startCharIndex < n_char)
+		{
+		for (unsigned i = 0; i < n_taxa; ++i)
+			{
+			if (startCharIndex == 0)
+				{
+				std::string n = readPhylipName(ftcb, i, relaxedNames);
+				taxaNames.push_back(n);
+				}
+			if (i == 0)
+				mIt = matList.begin();
+			NCL_ASSERT(mIt != matList.end());
+			NxsDiscreteStateRow & row = *mIt++;
+			unsigned j = startCharIndex;
+			for (;;)
+				{
+				const char c = ftcb.current();
+				if (isgraph(c))
+					{
+					if (j >= endCharIndex)
+						{
+						if (i == 0)
+							{
+							err << "Too many characters were found for the taxon " << *(taxaNames.begin());
+							throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+							}
+						else
+							{
+							std::list<std::string>::const_iterator nIt = taxaNames.begin();
+							for (unsigned q = 0; q < i ; ++q)
+								++nIt;
+							err << "Illegal character \"" << c << "\" found, after all of the data for this interleave page has been read for the taxon " << *nIt;
+							throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+							}
+						}
+					if (isdigit(c))// I don't know why PHYLIP allows digits in the midst of the sequence, but it seems to.
+						{
+						std::list<std::string>::const_iterator nIt = taxaNames.begin();
+						for (unsigned q = 0; q < i ; ++q)
+							++nIt;
+						err << "Number encountered (and ignored) within sequence for taxon " << *nIt;
+						NexusWarn(err, NxsReader::PROBABLY_INCORRECT_CONTENT_WARNING, ftcb.position(), ftcb.line(), ftcb.column());
+						err.clear();
+						}
+					else
+						{
+						const NxsDiscreteStateCell stateCode = dm.GetStateCodeStored(c);
+						if (stateCode == NXS_INVALID_STATE_CODE)
+							{
+							if (c == '.')
+								{
+								if (i == 0)
+									{
+									err << "Illegal match character state code  \".\" found in the first taxon for character " << j + 1 ;
+									throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+									}
+								NxsDiscreteStateRow & firstRow = *(matList.begin());
+								row[j] = firstRow.at(j);
+								}
+							else
+								{
+								std::list<std::string>::const_iterator nIt = taxaNames.begin();
+								for (unsigned q = 0; q < i ; ++q)
+									++nIt;
+								err << "Illegal state code \"" << c << "\" found when reading site " << j + 1 << " for taxon " << *nIt;
+								throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+								}
+							}
+						else
+							row[j] = stateCode;
+						j++;
+						}
+					}
+				else if (c == '\r' || c == '\n')
+					{
+					if (i == 0)
+						endCharIndex = j;
+					else if (j != endCharIndex)
+						{
+						std::list<std::string>::const_iterator nIt = taxaNames.begin();
+						for (unsigned q = 0; q < i ; ++q)
+							++nIt;
+						err << "Expecting " << endCharIndex -  startCharIndex << "characters  in this interleave page (based on the number of characters in the first taxon), but only found " << j - startCharIndex << " for taxon " << *nIt;
+						throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+						}
+					break;
+					}
+				if (!ftcb.advance())
+					goto funcExit;
+				}
+			while (!isgraph(ftcb.current()))
+				{
+				if (!ftcb.advance())
+					goto funcExit;
+				}
+			}
+		startCharIndex = endCharIndex;
+		endCharIndex = n_char;
+		}
+	funcExit:
+		if (matList.size() != n_taxa)
+			{
+			err << "Unexpected end of file.\nExpecting data for " << n_taxa << " taxa, but only found data for " << (unsigned) matList.size();
+			throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+			}
+		const NxsDiscreteStateRow & lastRow = *matList.rbegin();
+		if (lastRow.size() != n_char)
+			{
+			err << "Unexpected end of file.\nExpecting " << n_char << " characters for taxon " <<  *(taxaNames.rbegin()) << ", but only found " << (unsigned) lastRow.size() << " characters.";
+			throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+			}
+	}
+
+bool FileToCharBuffer::skip_to_beginning_of_line(char & next)
+	{
+	next = this->current();
+	for (;;)
+		{
+		const char c = next;
+		if (!this->advance_then_store(next))
+			return false;
+		if (c == '\n')
+			return true;
+		if (c == '\r')
+			{
+			if (next == '\n' && (!this->advance_then_store(next)))
+				return false;
+			return true;
+			}
+		}
+	}
+
+bool  MultiFormatReader::readAlnData(
+	FileToCharBuffer & ftcb,
+	const NxsDiscreteDatatypeMapper &dm,
+	std::list<std::string> & taxaNames,
+	std::list<NxsDiscreteStateRow> & matList)
+	{
+	taxaNames.clear();
+	NCL_ASSERT(ftcb.buffer);
+	NxsString err;
+	char c;
+	if (!ftcb.current())
+		throw NxsException("Could not read from file", ftcb.position(), ftcb.line(), ftcb.column());
+
+	c = ftcb.current();
+	unsigned index = 0;
+	const char * firstWord = "CLUSTAL";
+	std::string found;
+	const unsigned lenFirstWord = (unsigned const)strlen(firstWord);
+	while (index < lenFirstWord)
+		{
+		found.append(1, c);
+		if (toupper(c) != firstWord[index] || !ftcb.advance())
+			{
+			err << "Expecting file to start \"CLUSTAL\" found \"" << found << "\"";
+			throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+			}
+		++index;
+		c = ftcb.current();
+		}
+	do {
+		if (!ftcb.skip_to_beginning_of_line(c))
+			throw NxsException("Expecting multi-line file",ftcb.position(), ftcb.line(), ftcb.column());
+	} while (!isgraph(c));
+	bool readingFirstBlock = true;
+	for (;;)
+		{
+		// skip lines starting with whitespace
+		while (!isgraph(c))
+			{
+			if (!ftcb.skip_to_beginning_of_line(c))
+				{
+				if (taxaNames.empty())
+					throw NxsException("Sequences after clustal header", ftcb.position(), ftcb.line(), ftcb.column());
+				goto funcExit;
+				}
+			}
+		unsigned curr_tax_ind = 0;
+		std::list<std::string>::const_iterator taxNameIt;
+		std::list<NxsDiscreteStateRow>::iterator matRowIt;
+		if (!readingFirstBlock)
+			{
+			taxNameIt = taxaNames.begin();
+			matRowIt = matList.begin();
+			}
+		NxsDiscreteStateRow * row = NULL;
+		// this is the loop over taxa for a "page" of interleave data
+		for (;isgraph(c);)
+			{
+			std::string n;
+			for (;;)
+				{
+				n.append(1, c);
+				if (!ftcb.advance())
+					break;
+				c = ftcb.current();
+				if (!isgraph(c))
+					break;
+				}
+			if (readingFirstBlock)
+				{
+                if (this->coerceUnderscoresToSpaces)
+                    {
+                    NxsString x(n.c_str());
+                    x.UnderscoresToBlanks();
+                    n = x;
+                    }
+				taxaNames.push_back(n);
+				matList.push_back(NxsDiscreteStateRow());
+				row = &(*(matList.rbegin()));
+				}
+			else if (curr_tax_ind > taxaNames.size())
+				{
+				err << "Expecting a line beginning with whitespace (or a blank line), but found \"" << n << "\"";
+				throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+				}
+			else
+				{
+				std::string prev_name = *taxNameIt++;
+				if (!NxsString::case_insensitive_equals(prev_name.c_str(), n.c_str()))
+					{
+					err << "Expecting data for taxon # " << (1 + curr_tax_ind) << " \"" << prev_name << "\" but got \"" << n << "\"";
+					throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+					}
+				row = &(*matRowIt++);
+				}
+
+
+			while (ftcb.advance_then_store(c))
+				{
+				if (isgraph(c))
+					break;
+				}
+			if  (!isgraph(c))
+				{
+				err << "Unexpected end-of-file after taxon name \"" << n << "\"";
+				throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+				}
+			// this is the loop over states for a given taxon
+			bool eof = false;
+			bool eoseq = false;
+			for (;!eoseq;)
+				{
+				if (isgraph(c))
+					{
+					if (isdigit(c))
+						{
+						if (!ftcb.skip_to_beginning_of_line(c))
+							{
+							if (!readingFirstBlock && (curr_tax_ind + 1) != taxaNames.size())
+								{
+								err << "Unexpected End of file. Expecting data for " << (unsigned) taxaNames.size() << " sequences";
+								throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+								}
+							goto funcExit;
+							}
+						break;
+						}
+					else
+						{
+						NxsDiscreteStateCell stateCode = dm.GetStateCodeStored(c);
+						if (stateCode == NXS_INVALID_STATE_CODE)
+							{
+							err << "Illegal state code \"" << c << "\" found when reading character " << (unsigned long) row->size() << " for taxon " << n;
+							throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+							}
+						row->push_back(stateCode);
+						eof = !ftcb.advance_then_store(c);
+						}
+					}
+				if ((!eof) && (!isgraph(c)))
+					{
+					if (c == '\n')
+						{
+						eof = !ftcb.advance_then_store(c);
+						eoseq = true;
+						}
+					else if (c == '\r')
+						{
+						eof = !ftcb.advance_then_store(c);
+						if (!eof && c == '\n')
+							eof = !ftcb.advance_then_store(c);
+						eoseq = true;
+						}
+					else
+						eof = !ftcb.advance_then_store(c);
+					}
+				if (eof)
+					{
+					if (!readingFirstBlock && (curr_tax_ind + 1) != taxaNames.size())
+						{
+						err << "Unexpected End of file. Expecting data for " << (unsigned) taxaNames.size() << " sequences";
+						throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+						}
+					goto funcExit;
+					}
+				}
+			if (isgraph(c))
+				curr_tax_ind++;
+			else
+				{
+				if (!readingFirstBlock && (1 + curr_tax_ind) != taxaNames.size())
+					{
+					err << "Unexpected line beginning with whitespace. Expecting data for " << (unsigned) taxaNames.size() << " sequences";
+					throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+					}
+				curr_tax_ind = 0;
+				readingFirstBlock = false;
+				}
+			}
+		}
+
+	funcExit:
+		// pad with missing data to make even rows
+		std::list<NxsDiscreteStateRow>::iterator sIt = matList.begin();
+		long longest = -1;
+		for (; sIt != matList.end(); ++sIt)
+			{
+			NxsDiscreteStateRow & row = *sIt;
+			if (longest == -1)
+				longest = (long) row.size();
+			else if (longest != (long) row.size())
+				return false;
+			}
+		return true;
+	}
+
+void MultiFormatReader::addTaxaNames(const std::list<std::string> & taxaNames, NxsTaxaBlockAPI * taxa)
+	{
+	NCL_ASSERT(taxa);
+	std::list<std::string>::const_iterator nIt = taxaNames.begin();
+
+	std::vector<NxsNameToNameTrans> nameTrans;
+	bool nameTransNeeded = false;
+	NxsString t;
+
+	for (; nIt != taxaNames.end(); ++nIt)
+		{
+		std::string name = *nIt;
+		NxsNameToNameTrans trans(name, name);
+		for (unsigned i = 1; ; ++i)
+			{
+			try {
+				taxa->AddTaxonLabel(name);
+				break;
+				}
+			catch (DuplicatedLabelNxsException & x)
+				{
+				if (!this->conversionOutputRecord.addNumbersToDisambiguateNames)
+					throw;
+				nameTransNeeded = true;
+				t.assign(*nIt);
+				t << i;
+				trans.second = t;
+				name = t;
+				}
+			}
+		if (this->conversionOutputRecord.addNumbersToDisambiguateNames)
+			nameTrans.push_back(trans);
+		}
+
+
+	// write out a name translation file if we need to
+	if (nameTransNeeded && this->conversionOutputRecord.writeNameTranslationFile)
+		this->conversionOutputRecord.writeNameTranslation(nameTrans, taxa);
+	}
+
+void MultiFormatReader::moveDataToMatrix(std::list<NxsDiscreteStateRow> & matList,  NxsDiscreteStateMatrix &mat)
+	{
+	mat.clear();
+	mat.resize(matList.size());
+	NxsDiscreteStateMatrix::iterator dIt = mat.begin();
+	std::list<NxsDiscreteStateRow>::iterator sIt = matList.begin();
+	for (; sIt != matList.end(); ++sIt, ++dIt)
+		{
+		NxsDiscreteStateRow & source = *sIt;
+		NxsDiscreteStateRow & dest = *dIt;
+		dest.swap(source);
+		}
+	}
+
+void  MultiFormatReader::moveDataToDataBlock(const std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList, const unsigned nchar, NxsDataBlock * dataB)
+	{
+	NCL_ASSERT(dataB);
+	NxsString d;
+	d << "Dimensions ntax = " << (unsigned) matList.size() << " nchar = " << nchar << " ; ";
+	std::istringstream fakeDimStream(d);
+	NxsToken fakeDimToken(fakeDimStream);
+	NxsString newTaxLabel("NewTaxa");
+	NxsString ntaxLabel("NTax");
+	NxsString ncharLabel("NChar");
+	dataB->HandleDimensions(fakeDimToken, newTaxLabel, ntaxLabel, ncharLabel);
+
+	NCL_ASSERT(dataB->taxa);
+	addTaxaNames(taxaNames, dataB->taxa);
+
+	moveDataToMatrix(matList, dataB->discreteMatrix);
+	}
+
+void  MultiFormatReader::moveDataToUnalignedBlock(const std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList, NxsUnalignedBlock * uB)
+	{
+	NCL_ASSERT(uB);
+	NxsString d;
+	d << "Dimensions NewTaxa ntax = " << (unsigned) matList.size() << " ; ";
+	std::istringstream fakeDimStream(d);
+	NxsToken fakeDimToken(fakeDimStream);
+	uB->HandleDimensions(fakeDimToken);
+
+	NCL_ASSERT(uB->taxa);
+	addTaxaNames(taxaNames, uB->taxa);
+
+	moveDataToMatrix(matList, uB->uMatrix);
+	}
+
+void  MultiFormatReader::readFastaFile(std::istream & inf, NxsCharactersBlock::DataTypesEnum dt)
+	{
+	NxsString blockID("DATA");
+	NxsBlock *nb = cloneFactory.GetBlockReaderForID(blockID, this, NULL);
+	NCL_ASSERT(nb);
+	if (!nb)
+		return;
+	nb->SetNexus(this);
+
+	NxsDataBlock * dataB = static_cast<NxsDataBlock *>(nb); // this should be safe because we know that the PublicNexusReader has a DataBlock assigned to "DATA" -- unless the caller has replaced that clone template (gulp)
+	FileToCharBuffer ftcb(inf);
+	if (ftcb.buffer)
+		{
+		dataB->Reset();
+		dataB->datatype = dt;
+		dataB->ResetSymbols();
+		dataB->gap = '-';
+		NxsPartition dtParts;
+		std::vector<NxsCharactersBlock::DataTypesEnum> dtv;
+		dataB->CreateDatatypeMapperObjects(dtParts, dtv);
+
+		const NxsDiscreteDatatypeMapper * dm = dataB->GetDatatypeMapperForChar(0);
+
+		std::list<std::string> taxaNames;
+		std::list<NxsDiscreteStateRow> matList;
+		size_t longest = 0;
+		bool aligned = true;
+		try {
+			aligned = readFastaSequences(ftcb, *dm, taxaNames, matList, longest);
+			}
+		catch (...)
+			{
+			cloneFactory.BlockError(dataB);
+			throw;
+			}
+
+		if (aligned)
+			{
+			moveDataToDataBlock(taxaNames, matList, (unsigned int)longest, dataB);
+			BlockReadHook(blockID, dataB);
+			}
+		else
+			{
+			cloneFactory.BlockError(dataB);
+			blockID.assign("UNALIGNED");
+			NxsBlock * nub = cloneFactory.GetBlockReaderForID(blockID, this, NULL);
+			if (!nub)
+				{
+				NCL_ASSERT(nub);
+				return;
+				}
+			nub->SetNexus(this);
+
+			NxsUnalignedBlock * unalignedB = static_cast<NxsUnalignedBlock *>(nub); // this should be safe because we know that the PublicNexusReader has a DataBlock assigned to "DATA" -- unless the caller has replaced that clone template (gulp)
+			unalignedB->Reset();
+			unalignedB->datatype = dt;
+			unalignedB->ResetSymbols();
+			unalignedB->gap = '-';
+			unalignedB->ResetDatatypeMapper();
+			moveDataToUnalignedBlock(taxaNames, matList, unalignedB);
+			BlockReadHook(blockID, unalignedB);
+			}
+		}
+	else
+		{
+		cloneFactory.BlockError(dataB);
+		NxsString err;
+		err << "No Data read -- file appears to be empty";
+		this->NexusError(err, 0, -1, -1);
+		}
+	}
+
+
+/* Assumes that `contents` was returned from readFileToMemory() has been called
+	with `inf` and the `len` refers the size of the buffer allocated by
+	readFileToMemory
+*/
+bool  MultiFormatReader::readFinSequences(
+	FileToCharBuffer & ftcb,
+	NxsDiscreteDatatypeMapper &dm,
+	std::list<std::string> & taxaNames,
+	std::list<NxsDiscreteStateRow> & matList,
+	size_t & longest)
+	{
+	NCL_ASSERT(ftcb.buffer);
+	NxsString err;
+
+	std::string firstLine;
+	for (;;)
+		{
+		char c = ftcb.current();
+		if (c == '\n' || c == '\r')
+			break;
+		firstLine.append(1, c);
+		if (!ftcb.advance())
+			break;
+		}
+	std::string sfl = NxsString::strip_surrounding_whitespace(firstLine);
+	if (!NxsString::case_insensitive_equals(sfl.c_str(), "label data"))
+		{
+		err << "Expecting the first line of the file to contain just the words \"label data\", but found \"" << sfl << '\"';
+		throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+		}
+
+	for (;;)
+		{
+		const char cc = ftcb.current();
+		if (!isgraph(cc))
+			{
+			if (!ftcb.advance())
+				break;
+			}
+		else if (cc == '@')
+			break;
+		else 
+			{
+			std::string name;
+			bool commentLine= false;
+			if (ftcb.current() == '/')
+				{
+				if (!ftcb.advance())
+					{
+					err << "Unexpected end of file after / character";
+					throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+					}
+				if (ftcb.current() == '*')
+					{
+					commentLine = true;
+					bool prevStar = false;
+					for (;;)
+						{
+						if (!ftcb.advance())
+							{
+							err << "Unexpected end of file in comment";
+							throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+							}
+						char cmtc = ftcb.current();
+						if (prevStar && cmtc == '/')
+							break;
+						prevStar = (cmtc == '*');
+						}
+					if (!ftcb.advance())
+						break;
+					}
+				else
+					name.append(1, '/');
+				}
+			if (commentLine)
+				continue;
+			// read taxon name -- no escaping of characters will be done
+			for (;;)
+				{
+				char c = ftcb.current();
+				if (!isgraph(c))
+					break;
+				name.append(1, c);
+				if (!ftcb.advance())
+					break;
+				}
+			// skip ws
+			for (;;)
+				{
+				char sc = ftcb.current();
+				if (isgraph(sc))
+					break;
+				if (sc == '\n' || sc == '\r' || !ftcb.advance())
+					{
+					err << "Unexpected end of line (or end of file).  Expecting sequence for " << name;
+					throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+					}
+				}
+			if (this->coerceUnderscoresToSpaces)
+			    {
+			    NxsString x(name.c_str());
+			    x.UnderscoresToBlanks();
+			    name = x;
+			    }
+			taxaNames.push_back(name);
+			matList.push_back(NxsDiscreteStateRow());
+			NxsDiscreteStateRow & row = *(matList.rbegin());
+			row.reserve(longest);
+			// read sequence
+			for (;;)
+				{
+				char seqc = ftcb.current();
+				if (isgraph(seqc))
+					{
+					NxsDiscreteStateCell stateCode;
+					if (seqc == '[')
+						{
+						std::string recoded;
+						recoded.append(1, '{');
+						if (!ftcb.advance())
+							{
+							err << "Unexpected end of file is [ group!";
+							throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+							}
+						while (ftcb.current() != ']')
+							{
+							recoded.append(1, ftcb.current());
+							if (!ftcb.advance())
+								{
+								err << "Unexpected end of file is [ group!";
+								throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+								}
+							}
+						recoded.append(1, '}');
+						try{
+							NxsString nn;
+							nn << name;
+							stateCode = dm.StateCodeForNexusMultiStateSet('\0',
+  																	  recoded,
+  																	  0L,
+  																	  (unsigned int)taxaNames.size(),
+  																	  (unsigned int)row.size(),
+  																	  0L,
+  																	  nn);
+							}
+						catch (NxsException & x)
+							{
+							x.addPositionInfo(ftcb.position(), ftcb.line(), ftcb.column());
+							throw x;
+							}
+						}
+					else
+						{
+						stateCode = dm.GetStateCodeStored(seqc);
+						if (stateCode == NXS_INVALID_STATE_CODE)
+							{
+							err << "Illegal state code \"" << seqc << "\" found when reading character " << (unsigned) row.size() << " for taxon \"" << name << "\".";
+							throw NxsException(err, ftcb.position(), ftcb.line(), ftcb.column());
+							}
+						}
+					row.push_back(stateCode);
+					}
+				else if (seqc == '\n' || seqc == '\r')
+					break;
+				if (!ftcb.advance())
+					break;
+				}
+			longest = std::max(longest, row.size());
+			}
+		}
+	// pad with missing data to make even rows
+	std::list<NxsDiscreteStateRow>::iterator sIt = matList.begin();
+	bool allSameLength = true;
+	for (; sIt != matList.end(); ++sIt)
+		{
+		NxsDiscreteStateRow & row = *sIt;
+		if (row.size() < longest)
+			{
+			allSameLength = false;
+			break;
+			}
+		}
+	return allSameLength;
+	}
+
+
+void  MultiFormatReader::readFinFile(std::istream & inf, NxsCharactersBlock::DataTypesEnum dt)
+	{
+	NxsString blockID("DATA");
+	NxsBlock *nb = cloneFactory.GetBlockReaderForID(blockID, this, NULL);
+	NCL_ASSERT(nb);
+	if (!nb)
+		return;
+	nb->SetNexus(this);
+
+	NxsDataBlock * dataB = static_cast<NxsDataBlock *>(nb); // this should be safe because we know that the PublicNexusReader has a DataBlock assigned to "DATA" -- unless the caller has replaced that clone template (gulp)
+	FileToCharBuffer ftcb(inf);
+	if (ftcb.buffer)
+		{
+		dataB->Reset();
+		dataB->datatype = dt;
+		dataB->ResetSymbols();
+		dataB->gap = '-';
+		NxsPartition dtParts;
+		std::vector<NxsCharactersBlock::DataTypesEnum> dtv;
+		dataB->CreateDatatypeMapperObjects(dtParts, dtv);
+
+		NxsDiscreteDatatypeMapper * dm = dataB->GetMutableDatatypeMapperForChar(0);
+
+		std::list<std::string> taxaNames;
+		std::list<NxsDiscreteStateRow> matList;
+		size_t longest = 0;
+		bool aligned = true;
+		try {
+			aligned = readFinSequences(ftcb, *dm, taxaNames, matList, longest);
+			}
+		catch (...)
+			{
+			cloneFactory.BlockError(dataB);
+			throw;
+			}
+
+		if (aligned)
+			{
+			moveDataToDataBlock(taxaNames, matList, (unsigned int)longest, dataB);
+			BlockReadHook(blockID, dataB);
+			}
+		else
+			{
+			cloneFactory.BlockError(dataB);
+			blockID.assign("UNALIGNED");
+			NxsBlock * nub = cloneFactory.GetBlockReaderForID(blockID, this, NULL);
+			if (!nub)
+				{
+				NCL_ASSERT(nub);
+				return;
+				}
+			nub->SetNexus(this);
+
+			NxsUnalignedBlock * unalignedB = static_cast<NxsUnalignedBlock *>(nub); // this should be safe because we know that the PublicNexusReader has a DataBlock assigned to "DATA" -- unless the caller has replaced that clone template (gulp)
+			unalignedB->Reset();
+			unalignedB->datatype = dt;
+			unalignedB->ResetSymbols();
+			unalignedB->ResetDatatypeMapper();
+			moveDataToUnalignedBlock(taxaNames, matList, unalignedB);
+			BlockReadHook(blockID, unalignedB);
+			}
+		}
+	else
+		{
+		cloneFactory.BlockError(dataB);
+		NxsString err;
+		err << "No Data read -- file appears to be empty";
+		this->NexusError(err, 0, -1, -1);
+		}
+	}
+
+void  MultiFormatReader::ReadFilepath(const char * filepath, DataFormatType format)
+	{
+	if (format == NEXUS_FORMAT)
+		{
+		NxsReader::ReadFilepath(filepath);
+		}
+	else
+		{
+		std::ifstream inf;
+		try{
+			inf.open(filepath, std::ios::binary);
+			if (!inf.good())
+				{
+				NxsString err;
+				err << "Could not open the file \"" << filepath <<"\"";
+				this->NexusError(err, 0, -1, -1);
+				}
+			else
+				this->ReadStream(inf, format, filepath);
+			}
+		catch (NxsException & x)
+			{
+			this->NexusError(x.msg, x.pos, x.line, x.col);
+			}
+		catch (...)
+			{
+			NxsString err;
+			err << "Unknown error occurred while reading \"" << filepath <<"\"." ;
+			this->NexusError(err, 0, -1, -1);
+			}
+		
+		}
+	}
+
+void  MultiFormatReader::ReadStream(std::istream & inf, DataFormatType format, const char * filepath)
+	{
+	if (format == NEXUS_FORMAT)
+		{
+		NxsReader::ReadFilestream(inf);
+		}
+	else
+		{
+		if (format == FASTA_DNA_FORMAT)
+			readFastaFile(inf, NxsCharactersBlock::dna);
+		else if (format == FASTA_RNA_FORMAT)
+			readFastaFile(inf, NxsCharactersBlock::rna);
+		else if (format == FASTA_AA_FORMAT)
+			readFastaFile(inf, NxsCharactersBlock::protein);
+		else if (format == PHYLIP_DNA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::dna, false, false);
+		else if (format == PHYLIP_RNA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::rna, false, false);
+		else if (format == PHYLIP_AA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::protein, false, false);
+		else if (format == PHYLIP_DISC_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::standard, false, false);
+		else if (format == INTERLEAVED_PHYLIP_DNA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::dna, false, true);
+		else if (format == INTERLEAVED_PHYLIP_RNA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::rna, false, true);
+		else if (format == INTERLEAVED_PHYLIP_AA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::protein, false, true);
+		else if (format == INTERLEAVED_PHYLIP_DISC_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::standard, false, true);
+		else if (format == RELAXED_PHYLIP_DNA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::dna, true, false);
+		else if (format == RELAXED_PHYLIP_RNA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::rna, true, false);
+		else if (format == RELAXED_PHYLIP_AA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::protein, true, false);
+		else if (format == RELAXED_PHYLIP_DISC_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::standard, true, false);
+		else if (format == INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::dna, true, true);
+		else if (format == INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::rna, true, true);
+		else if (format == INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::protein, true, true);
+		else if (format == INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT)
+			readPhylipFile(inf, NxsCharactersBlock::standard, true, true);
+		else if (format == ALN_DNA_FORMAT)
+			readAlnFile(inf, NxsCharactersBlock::dna);
+		else if (format == ALN_RNA_FORMAT)
+			readAlnFile(inf, NxsCharactersBlock::rna);
+		else if (format == ALN_AA_FORMAT)
+			readAlnFile(inf, NxsCharactersBlock::protein);
+		else if (format == RELAXED_PHYLIP_TREE_FORMAT)
+			readPhylipTreeFile(inf, true);
+		else if (format == PHYLIP_TREE_FORMAT)
+			readPhylipTreeFile(inf, false);
+		else if (format == FIN_DNA_FORMAT)
+			readFinFile(inf, NxsCharactersBlock::dna);
+		else if (format == FIN_RNA_FORMAT)
+			readFinFile(inf, NxsCharactersBlock::rna);
+		else if (format == FIN_AA_FORMAT)
+			readFinFile(inf, NxsCharactersBlock::protein);
+		else
+			{
+			NxsString m;
+			if (filepath)
+				m << "The file " << filepath << " is not in a supported format.";
+			else
+				m << "Unsupported format.";
+			NexusError(m, 0, -1, -1);
+			return;
+			}
+		PostExecuteHook();
+		}
+	}
+// More tolerant than strict PHYLIP (tolerates any amount of whitespace before or
+// between ntax and nchar.
+// throws a NxsException if the header cannot be read.
+// returns the file position.
+unsigned MultiFormatReader::readPhylipHeader(std::istream & inf, unsigned & ntax, unsigned & nchar)
+	{
+	int ntaxi = 0;
+	int nchari = 0;
+	if (inf.good())
+		{
+		inf >> ntaxi;
+		}
+	else
+		{
+		NxsString err("Invalid file stream (this probably indicates an error occurred while opening the file).");
+		throw NxsException(err, 0, -1, -1);
+		}
+	
+	if (inf.good())
+		inf >> nchari;
+	else
+		{
+		NxsString err("A file error occurred while reading ntax.");
+		throw NxsException(err, 0, -1, -1);
+		}
+	if (!inf.good())
+		{
+		NxsString err("A file error occurred while reading ntax.");
+		throw NxsException(err, 0, -1, -1);
+		}
+	if (ntaxi < 1 || nchari < 1)
+		{
+		NxsString err("Expecting the file to start with positive number of taxa then the number of characters.");
+		throw NxsException(err, 0, -1, -1);
+		}
+	ntax = (unsigned) ntaxi;
+	nchar = (unsigned) nchari;
+	return (unsigned) inf.tellg();
+	}
+
+void MultiFormatReader::readPhylipTreeFile(std::istream & inf, bool relaxedNames)
+	{
+	NxsString blockID("TREES");
+	NxsBlock *nb = cloneFactory.GetBlockReaderForID(blockID, this, NULL);
+	NCL_ASSERT(nb);
+	if (!nb)
+		return;
+	nb->SetNexus(this);
+
+	/* this should be safe because we know that the PublicNexusReader has a
+		NxsTreesBlock assigned to "TREES" -- unless the caller has replaced that
+		clone template (gulp)
+	*/
+	NxsTreesBlock * treesB = static_cast<NxsTreesBlock *>(nb);
+	NxsString err;
+	try {
+		treesB->Reset();
+		NxsToken inTokens(inf);
+		treesB->ReadPhylipTreeFile(inTokens);
+		if (!relaxedNames)
+			{
+			const NxsTaxaBlockAPI * taxa = treesB->GetTaxaBlockPtr(0L);
+			if (!taxa)
+				{
+				err << "No taxa found in tree description (which probably means that no tree was found).";
+				throw NxsException(err, inTokens);
+				}
+			const std::vector<std::string> l = taxa->GetAllLabels();
+			for (std::vector<std::string>::const_iterator lIt = l.begin(); lIt != l.end(); ++lIt)
+				{
+				if (lIt->length() > PHYLIP_NMLNGTH)
+					{
+					err << "The taxon label " << *lIt << " has more than the allowed number of charcters (" << PHYLIP_NMLNGTH << ')';
+					throw NxsException(err);
+					}
+				}
+			}
+		BlockReadHook(blockID, treesB);
+		}
+	catch (...)
+		{
+		cloneFactory.BlockError(nb);
+		throw;
+		}
+	}
+
+/* if this returns NULL, then the read failed and gLogMessage will contain
+	and error message.
+*/
+void MultiFormatReader::readAlnFile(std::istream & inf, NxsCharactersBlock::DataTypesEnum dt)
+	{
+	NxsString blockID("DATA");
+	NxsBlock *nb = cloneFactory.GetBlockReaderForID(blockID, this, NULL);
+	NCL_ASSERT(nb);
+	if (!nb)
+		return;
+	nb->SetNexus(this);
+	/* this should be safe because we know that the PublicNexusReader has a
+		DataBlock assigned to "DATA" -- unless the caller has replaced that
+		clone template (gulp)
+	*/
+	NxsDataBlock * dataB = static_cast<NxsDataBlock *>(nb);
+
+	try {
+		dataB->Reset();
+		dataB->datatype = dt;
+		dataB->ResetSymbols();
+		dataB->gap = '-';
+		NxsPartition dtParts;
+		std::vector<NxsCharactersBlock::DataTypesEnum> dtv;
+		dataB->CreateDatatypeMapperObjects(dtParts, dtv);
+
+		const NxsDiscreteDatatypeMapper * dm = dataB->GetDatatypeMapperForChar(0);
+		NCL_ASSERT(dm);
+		FileToCharBuffer ftcb(inf);
+		if (ftcb.buffer)
+			{
+			std::list<std::string> taxaNames;
+			std::list<NxsDiscreteStateRow> matList;
+			if (!readAlnData(ftcb, *dm, taxaNames, matList))
+				throw NxsException("Expecting the same number of characters for all sequences in the ALN file");
+			const unsigned nchar = (unsigned const)matList.begin()->size();
+			moveDataToDataBlock(taxaNames, matList, nchar, dataB);
+			BlockReadHook(blockID, dataB);
+			}
+		}
+	catch (...)
+		{
+		cloneFactory.BlockError(nb);
+		throw;
+		}
+}
+
+/* if this returns NULL, then the read failed and gLogMessage will contain
+	and error message.
+*/
+void MultiFormatReader::readPhylipFile(std::istream & inf, NxsCharactersBlock::DataTypesEnum dt, bool relaxedNames, bool interleaved)
+	{
+	NxsString blockID("DATA");
+	NxsBlock *nb = cloneFactory.GetBlockReaderForID(blockID, this, NULL);
+	NCL_ASSERT(nb);
+	if (!nb)
+		return;
+	nb->SetNexus(this);
+	/* this should be safe because we know that the PublicNexusReader has a
+		DataBlock assigned to "DATA" -- unless the caller has replaced that
+		clone template (gulp)
+	*/
+	NxsDataBlock * dataB = static_cast<NxsDataBlock *>(nb);
+
+	try {
+		dataB->Reset();
+		dataB->datatype = dt;
+		dataB->ResetSymbols();
+		dataB->gap = '-';
+		NxsPartition dtParts;
+		std::vector<NxsCharactersBlock::DataTypesEnum> dtv;
+		dataB->CreateDatatypeMapperObjects(dtParts, dtv);
+
+		const NxsDiscreteDatatypeMapper * dm = dataB->GetDatatypeMapperForChar(0);
+		NCL_ASSERT(dm);
+		unsigned ntax = 0;
+		unsigned nchar = 0;
+		unsigned headerLen = readPhylipHeader(inf, ntax, nchar);
+		FileToCharBuffer ftcb(inf);
+		ftcb.totalSize += headerLen;
+		if (ftcb.buffer)
+			{
+			std::list<std::string> taxaNames;
+			std::list<NxsDiscreteStateRow> matList;
+			if (interleaved)
+				readInterleavedPhylipData(ftcb, *dm, taxaNames, matList, ntax, nchar, relaxedNames);
+			else
+				readPhylipData(ftcb, *dm, taxaNames, matList, ntax, nchar, relaxedNames);
+			moveDataToDataBlock(taxaNames, matList, nchar, dataB);
+			BlockReadHook(blockID, dataB);
+			}
+		}
+	catch (...)
+		{
+		cloneFactory.BlockError(nb);
+		throw;
+		}
+}
diff --git a/ncl/nxsmultiformat.h b/ncl/nxsmultiformat.h
new file mode 100644
index 0000000..79b50d2
--- /dev/null
+++ b/ncl/nxsmultiformat.h
@@ -0,0 +1,260 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis and Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSMULTIFORMAT_H
+#define NCL_NXSMULTIFORMAT_H
+#include <iostream>
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxspublicblocks.h"
+class FileToCharBuffer;
+/*!
+	A special class of PublicNexusReader, that can parse
+		\li PHYLIP,
+		\li relaxed PHYLIP,
+		\li FASTA, and
+		\li ALN
+	formatted files in addition to NEXUS.  Non-NEXUS files are parsed and the
+	information from these files is added to the appropriate NxsBlock object.
+	So the parser essentially creates a the normal NCL interface even if the
+	input is not NEXUS
+*/
+class MultiFormatReader: public PublicNexusReader
+{
+	public:
+		/*! enumeration of all of the formats supported by MultiFormatReader
+
+			This enumeration type is used in calls to ReadStream and ReadFilepath
+			so that the reader knows what type of data to expect.
+		*/
+		enum DataFormatType
+			{
+				NEXUS_FORMAT,
+				FASTA_DNA_FORMAT,
+				FASTA_AA_FORMAT,
+				FASTA_RNA_FORMAT,
+				PHYLIP_DNA_FORMAT,
+				PHYLIP_RNA_FORMAT,
+				PHYLIP_AA_FORMAT,
+				PHYLIP_DISC_FORMAT,
+				INTERLEAVED_PHYLIP_DNA_FORMAT,
+				INTERLEAVED_PHYLIP_RNA_FORMAT,
+				INTERLEAVED_PHYLIP_AA_FORMAT,
+				INTERLEAVED_PHYLIP_DISC_FORMAT,
+				RELAXED_PHYLIP_DNA_FORMAT,
+				RELAXED_PHYLIP_RNA_FORMAT,
+				RELAXED_PHYLIP_AA_FORMAT,
+				RELAXED_PHYLIP_DISC_FORMAT,
+				INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT,
+				INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT,
+				INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT,
+				INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT,
+				ALN_DNA_FORMAT,
+				ALN_RNA_FORMAT,
+				ALN_AA_FORMAT,
+				PHYLIP_TREE_FORMAT,
+				RELAXED_PHYLIP_TREE_FORMAT,
+				NEXML_FORMAT,
+				FIN_DNA_FORMAT,
+				FIN_AA_FORMAT,
+				FIN_RNA_FORMAT,
+				UNSUPPORTED_FORMAT // keep this last
+			};
+
+
+        void SetCoerceUnderscoresToSpaces(bool v) 
+            {
+            this->coerceUnderscoresToSpaces = v;
+            }
+
+        bool GetCoerceUnderscoresToSpaces() const
+            {
+            return this->coerceUnderscoresToSpaces;
+            }
+		
+		/*! \returns a vector with the "official" format names that can be used with formatNameToCode
+
+		Currently this list is:  {"nexus", "dnafasta", "aafasta", "rnafasta", "dnaphylip", "rnaphylip", "aaphylip", "discretephylip", "dnaphylipinterleaved", "rnaphylipinterleaved", "aaphylipinterleaved", "discretephylipinterleaved", "dnarelaxedphylip", "rnarelaxedphylip", "aarelaxedphylip", "discreterelaxedphylip", "dnarelaxedphylipinterleaved", "rnarelaxedphylipinterleaved", "aarelaxedphylipinterleaved", "discreterelaxedphylipinterleaved", "dnaaln", "rnaaln", "aaaln", "phyliptree", "relaxedp [...]
+
+		*/
+		static std::vector<std::string> getFormatNames();
+		/*! Converts a string such as "nexus" to the corresponding facet of the DataForamType enum.
+
+			Format names are not case sensitive
+		*/
+		static DataFormatType formatNameToCode(const std::string &);
+
+
+		/*!	Creates a new MultiFormatReader
+			\arg blocksToRead -1 indicates that every block type should be read.
+				alternatively, the caller can OR-together bits of the PublicNexusReader::NexusBlocksToRead enum
+				to indicate which blocks should be processed.
+			\arg mode should be a facet of the NxsReader::WarningHandlingMode enum
+				that indicates where warning messages should be directed.
+		*/
+		MultiFormatReader(const int blocksToRead = -1, NxsReader::WarningHandlingMode mode=NxsReader::WARNINGS_TO_STDERR)
+			:PublicNexusReader(blocksToRead, mode),
+			coerceUnderscoresToSpaces(false)
+			{}
+		virtual ~MultiFormatReader(){}
+		/*! Read the specified format
+			\arg inp the input stream
+			\arg formatName the "official" format name (list of legal choices is available from getFormatNames())
+		*/
+		void ReadStream(std::istream & inp, const char * formatName);
+		/*! Read the specified format
+			\arg inp the input stream
+			\arg format a facet of DataFormatType indicating the file format
+		*/
+		void ReadStream(std::istream & inp, DataFormatType format, const char * filepath=0L);
+
+		/*! Read a file of the specified format
+			\arg filepath the file path to open and read
+			\arg formatName the "official" format name (list of legal choices is available from getFormatNames())
+		*/
+		void ReadFilepath(const char * filepath, const char * formatName);
+		/*! Read a file of the specified format
+			\arg filepath the file path to open and read
+			\arg format a facet of DataFormatType indicating the file format
+		*/
+		void ReadFilepath(const char * filepath, DataFormatType format);
+
+		/*! A convenience function for reading FASTA files
+			\arg inf the input stream to read
+			\arg dt a facet of  NxsCharactersBlock::DataTypesEnum that indicates the expected datatype
+		*/
+		void readFastaFile(std::istream & inf, NxsCharactersBlock::DataTypesEnum dt);
+
+	private:
+		void addTaxaNames(const std::list<std::string> & taxaName, NxsTaxaBlockAPI * taxa);
+		void moveDataToDataBlock(const std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList, const unsigned nchar, NxsDataBlock * dataB);
+		void moveDataToMatrix(std::list<NxsDiscreteStateRow> & matList,  NxsDiscreteStateMatrix &mat);
+		void moveDataToUnalignedBlock(const std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList, NxsUnalignedBlock * uB);
+		bool readFastaSequences(FileToCharBuffer & ftcb, const NxsDiscreteDatatypeMapper &dm, std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList, size_t & longest);
+		bool readFinSequences(FileToCharBuffer & ftcb, NxsDiscreteDatatypeMapper &dm, std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList, size_t & longest);
+		void readPhylipFile(std::istream & inf, NxsCharactersBlock::DataTypesEnum dt, bool relaxedNames, bool interleaved);
+		void readPhylipTreeFile(std::istream & inf, bool relaxedNames);
+		void readAlnFile(std::istream & inf, NxsCharactersBlock::DataTypesEnum dt);
+		bool readAlnData(FileToCharBuffer & ftcb, const NxsDiscreteDatatypeMapper &dm, std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList);
+
+		unsigned readPhylipHeader(std::istream & inf, unsigned & ntax, unsigned & nchar);
+		void readPhylipData(FileToCharBuffer & ftcb, const NxsDiscreteDatatypeMapper &dm, std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList, const unsigned n_taxa, const unsigned n_char, bool relaxedNames);
+		void readInterleavedPhylipData(FileToCharBuffer & ftcb, const NxsDiscreteDatatypeMapper &dm, std::list<std::string> & taxaNames, std::list<NxsDiscreteStateRow> & matList, const unsigned n_taxa, const unsigned n_char, bool relaxedNames);
+		std::string readPhylipName(FileToCharBuffer & ftcb, unsigned i, bool relaxedNames);
+
+		/*! A convenience function for reading .fin files
+			\arg inf the input stream to read
+			\arg dt a facet of  NxsCharactersBlock::DataTypesEnum that indicates the expected datatype
+		*/
+		void readFinFile(std::istream & inf, NxsCharactersBlock::DataTypesEnum dt);
+		
+		bool coerceUnderscoresToSpaces;
+
+};
+
+/*! \enum MultiFormatReader::DataFormatType
+An enumeration of all of the formats supported by MultiFormatReader
+
+This enumeration type is used in calls to ReadStream and ReadFilepath
+so that the reader knows what type of data to expect.
+*/
+/*! var MultiFormatReader::NEXUS_FORMAT
+ read any NCL supported NEXUS block
+*/
+/*! var MultiFormatReader::FASTA_DNA_FORMAT
+ DNA sequence data in FASTA format
+*/
+/*! var MultiFormatReader::FASTA_AA_FORMAT
+ amino acid sequence data in FASTA format
+*/
+/*! var MultiFormatReader::FASTA_RNA_FORMAT
+ RNA sequence data in FASTA format
+*/
+/*! var MultiFormatReader::PHYLIP_DNA_FORMAT
+ DNA sequence data in non-interleaved PHYLIP format
+*/
+/*! var MultiFormatReader::PHYLIP_RNA_FORMAT
+ RNA sequence data in non-interleaved PHYLIP format
+*/
+/*! var MultiFormatReader::PHYLIP_AA_FORMAT
+ amino acid sequence data in non-interleaved PHYLIP format
+*/
+/*! var MultiFormatReader::PHYLIP_DISC_FORMAT
+ Discrete data (like the NEXUS "standard" format) in non-interleaved PHYLIP format
+*/
+/*! var MultiFormatReader::INTERLEAVED_PHYLIP_DNA_FORMAT
+ DNA sequence data in interleaved PHYLIP format
+*/
+/*! var MultiFormatReader::INTERLEAVED_PHYLIP_RNA_FORMAT
+ RNA sequence data in interleaved PHYLIP format
+*/
+/*! var MultiFormatReader::INTERLEAVED_PHYLIP_AA_FORMAT
+ amino acid sequence data in interleaved PHYLIP format
+*/
+/*! var MultiFormatReader::INTERLEAVED_PHYLIP_DISC_FORMAT
+ Discrete data (like the NEXUS "standard" format) data in interleaved PHYLIP format
+*/
+/*! var MultiFormatReader::RELAXED_PHYLIP_DNA_FORMAT
+ DNA sequence data in non-interleaved relaxed PHYLIP format
+*/
+/*! var MultiFormatReader::RELAXED_PHYLIP_RNA_FORMAT
+ RNA sequence data in non-interleaved relaxed PHYLIP format
+*/
+/*! var MultiFormatReader::RELAXED_PHYLIP_AA_FORMAT
+ amino acid sequence data in non-interleaved relaxed PHYLIP format
+*/
+/*! var MultiFormatReader::RELAXED_PHYLIP_DISC_FORMAT
+ Discrete data (like the NEXUS "standard" format) data in non-interleaved relaxed PHYLIP format
+*/
+/*! var MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DNA_FORMAT
+ DNA sequence data in interleaved relaxed PHYLIP format
+*/
+/*! var MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_RNA_FORMAT
+ RNA sequence data in interleaved relaxed PHYLIP format
+*/
+/*! var MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_AA_FORMAT
+ Amino acid sequence data in interleaved relaxed PHYLIP format
+*/
+/*! var MultiFormatReader::INTERLEAVED_RELAXED_PHYLIP_DISC_FORMAT
+ Discrete data (like the NEXUS "standard" format) data in interleaved relaxed PHYLIP format
+*/
+/*! var MultiFormatReader::ALN_DNA_FORMAT
+ DNA sequence data in ALN format
+*/
+/*! var MultiFormatReader::ALN_RNA_FORMAT
+ RNA sequence data in ALN format
+*/
+/*! var MultiFormatReader::ALN_AA_FORMAT
+ Amino acid sequence data in ALN format
+*/
+/*! var MultiFormatReader::PHYLIP_TREE_FORMAT
+ Trees in NEWICK (PHYLIP) format
+*/
+/*! var MultiFormatReader::RELAXED_PHYLIP_TREE_FORMAT
+ Trees in NEWICK  format with relaxed phylip names
+*/
+/*! var MultiFormatReader::NEXML_FORMAT
+ NEXML formatted file currently unsupported, but support is planned
+*/
+/*! var MultiFormatReader::UNSUPPORTED_FORMAT
+For NCL internal use only ( to mark the end of the DataFormatType enum).
+*/
+
+#endif
+
diff --git a/ncl/nxspublicblocks.cpp b/ncl/nxspublicblocks.cpp
new file mode 100644
index 0000000..bbe6c30
--- /dev/null
+++ b/ncl/nxspublicblocks.cpp
@@ -0,0 +1,808 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+
+
+#include <istream>
+#include <fstream>
+#include "ncl/nxspublicblocks.h"
+#include "ncl/nxsreader.h"
+using namespace std;
+
+
+/*! Registers the strings is the vector as taxon labels.
+
+	This is is a convenience function that creates a NxsTaxaBlock, fills it, and
+	then calls AddReadTaxaBlock.
+
+	\returns the block created.
+*/
+NxsTaxaBlock * PublicNexusReader::RegisterTaxa(const std::vector<std::string> & tl) {
+	if (tl.empty()) {
+		return 0L;
+	}
+	NxsTaxaBlock *tb = new NxsTaxaBlock();
+	tb->SetNtax( (unsigned)tl.size() );
+	for (std::vector<std::string>::const_iterator labelIt = tl.begin(); labelIt != tl.end(); ++labelIt)
+		tb->AddTaxonLabel(*labelIt);
+	AddReadTaxaBlock(tb);
+	return tb;
+}
+
+/*! A convenience function to get a list of NxsBlocks from a file path without having to create and dispose of a  PublicNexusReader object*/
+BlockReaderList PublicNexusReader::parseFileOrThrow(
+    const char *filepath, /* path of file to parse */
+    NxsReader::WarningHandlingMode mode,
+    bool parsePrivateBlocks, /* true to store the commands found in  private blocks */
+    bool storeTokenInfo)
+    {
+    PublicNexusReader nexusReader(mode);
+    return NxsReader::parseFileWithReader(nexusReader, filepath, parsePrivateBlocks, storeTokenInfo);
+    }
+
+BlockReaderList DefaultErrorReportNxsReader::parseFile(
+    const char *filepath, /* path of file to parse */
+    std::ostream * stdOutstream,
+    std::ostream * errOutstream,
+    bool parsePrivateBlocks, /* true to store the commands found in  private blocks */
+    bool storeTokenInfo)
+    {
+    DefaultErrorReportNxsReader nexusReader(stdOutstream, errOutstream);
+    return NxsReader::parseFileWithReader(nexusReader, filepath, parsePrivateBlocks, storeTokenInfo);
+    }
+
+/*! Convenience function for reading a filepath.
+   Returns a list of NxsBlock pointers (which the caller must delete)
+   corresponding to the NxsBlocks found in the file.
+   Raises NxsExceptions on errors.
+*/
+BlockReaderList NxsReader::parseFileWithReader(
+    NxsReader & nexusReader,
+    const char *filepath, /*!< path of file to parse */
+    bool parsePrivateBlocks, /*!< true to store the commands found in  private blocks */
+    bool storeTokenInfo) /*!< true for storage of full token info (such as file position) for private blocks */
+    {
+    if (!filepath)
+        nexusReader.NexusError("Invalid (NULL) file specified to be parsed", 0, -1, -1);
+    ifstream inf(filepath, ios::binary);
+    if (!inf.good())
+        {
+        NxsString err;
+        err << "Could not parse the file \"" << filepath <<"\"";
+        nexusReader.NexusError(err, 0, -1, -1);
+        }
+    nexusReader.statusMessage("Creating token");
+	NxsToken token(inf);
+	NxsDefaultPublicBlockFactory factory(parsePrivateBlocks, storeTokenInfo);
+	nexusReader.AddFactory(&factory);
+	try {
+        nexusReader.statusMessage("Executing");
+	    nexusReader.Execute(token);
+	    }
+	catch(...)
+	    {
+        nexusReader.RemoveFactory(&factory);
+        throw;
+	    }
+	nexusReader.RemoveFactory(&factory);
+	BlockReaderList brl = nexusReader.GetBlocksFromLastExecuteInOrder();
+	return brl;
+    }
+
+
+void NxsStoreTokensBlockReader::Reset()
+	{
+	NxsBlock::Reset();
+	commandsRead.clear();
+	}
+
+void NxsStoreTokensBlockReader::ReportConst(std::ostream &out) const
+	{
+	out << NCL_BLOCKTYPE_ATTR_NAME << " block contains ";
+	if (storeAllTokenInfo)
+		{
+		out << (unsigned)commandsRead.size() << " commands:\n";
+		for (std::list<ProcessedNxsCommand>::const_iterator cIt = commandsRead.begin(); cIt != commandsRead.end(); ++cIt)
+			{
+			const ProcessedNxsToken & t = (*cIt)[0];
+			out << "    " << t.GetToken() << "\n";
+			}
+		}
+	else
+		{
+		out << (unsigned)justTokens.size() << " commands:\n";
+		for (ListVecString::const_iterator cIt = justTokens.begin(); cIt != justTokens.end(); ++cIt)
+			out << "    " << cIt->at(0) << "\n";
+		}
+	}
+
+void NxsStoreTokensBlockReader::ReadCommand(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	if (storeAllTokenInfo)
+		{
+		ProcessedNxsCommand fullTokens;
+		token.ProcessAsCommand(&fullTokens);
+		if (!fullTokens.empty())
+			commandsRead.push_back(fullTokens);
+		}
+	else
+		{
+		VecString justString;
+		while (!token.Equals(";"))
+			{
+			justString.push_back(token.GetToken());
+			token.GetNextToken();
+			}
+		if (!justString.empty())
+			justTokens.push_back(justString);
+		}
+	}
+
+void NxsStoreTokensBlockReader::Read(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	isEmpty = false;
+	isUserSupplied = true;
+	NxsString begcmd("BEGIN ");
+	begcmd += this->NCL_BLOCKTYPE_ATTR_NAME;
+	DemandEndSemicolon(token, begcmd.c_str());
+
+	for(;;)
+		{
+		token.GetNextToken();
+        if (token.Equals("END") || token.Equals("ENDBLOCK"))
+            {
+            HandleEndblock(token);
+            return ;
+            }
+		this->ReadCommand(token);
+		}
+	}
+
+void NxsStoreTokensBlockReader::WriteAsNexus(std::ostream &out) const
+	{
+	out << "BEGIN " << NxsString::GetEscaped(this->NCL_BLOCKTYPE_ATTR_NAME) << ";\n";
+	if (storeAllTokenInfo)
+		{
+		for (std::list<ProcessedNxsCommand>::const_iterator cIt = commandsRead.begin(); cIt != commandsRead.end(); ++cIt)
+			{
+			const ProcessedNxsCommand & t = *cIt;
+			if (WriteCommandAsNexus(out, t))
+    			out << '\n';
+			}
+		}
+	else
+		{
+		for (ListVecString::const_iterator cIt = justTokens.begin(); cIt != justTokens.end(); ++cIt)
+			{
+			const VecString & t = *cIt;
+			out << "   ";
+			for (VecString::const_iterator wIt = t.begin(); wIt != t.end(); ++wIt)
+				out << ' ' << NxsString::GetEscaped(*wIt);
+			out << ";\n";
+			}
+		}
+	WriteSkippedCommands(out);
+	out << "END;\n";
+	}
+
+/*! Returns a new instance of a block  for the appropriate block type NCL_BLOCKTYPE_ATTR_NAME. \ref BlockTypeIDDiscussion
+*/
+NxsBlock  *NxsDefaultPublicBlockFactory::GetBlockReaderForID(
+  const std::string & NCL_BLOCKTYPE_ATTR_NAME, /*! \ref BlockTypeIDDiscussion */
+  NxsReader *reader,
+  NxsToken *token)
+	{
+	if (NCL_BLOCKTYPE_ATTR_NAME == "ASSUMPTIONS" || NCL_BLOCKTYPE_ATTR_NAME == "SETS")
+		return assumpBlockFact.GetBlockReaderForID(NCL_BLOCKTYPE_ATTR_NAME, reader, token);
+	if (NCL_BLOCKTYPE_ATTR_NAME == "CHARACTERS")
+		return charBlockFact.GetBlockReaderForID(NCL_BLOCKTYPE_ATTR_NAME, reader, token);
+	if (NCL_BLOCKTYPE_ATTR_NAME == "DATA")
+		return dataBlockFact.GetBlockReaderForID(NCL_BLOCKTYPE_ATTR_NAME, reader, token);
+	if (NCL_BLOCKTYPE_ATTR_NAME == "DISTANCES")
+		return distancesBlockFact.GetBlockReaderForID(NCL_BLOCKTYPE_ATTR_NAME, reader, token);
+	if (NCL_BLOCKTYPE_ATTR_NAME == "TAXA")
+		return taxaBlockFact.GetBlockReaderForID(NCL_BLOCKTYPE_ATTR_NAME, reader, token);
+	if (NCL_BLOCKTYPE_ATTR_NAME == "TREES")
+		return treesBlockFact.GetBlockReaderForID(NCL_BLOCKTYPE_ATTR_NAME, reader, token);
+	if (NCL_BLOCKTYPE_ATTR_NAME == "TAXAASSOCIATION")
+		return taxaAssociationBlockFact.GetBlockReaderForID(NCL_BLOCKTYPE_ATTR_NAME, reader, token);
+	if (NCL_BLOCKTYPE_ATTR_NAME == "UNALIGNED")
+		return unalignedBlockFact.GetBlockReaderForID(NCL_BLOCKTYPE_ATTR_NAME, reader, token);
+	if (tokenizeUnknownBlocks)
+		{
+		NxsStoreTokensBlockReader * nb = new NxsStoreTokensBlockReader(NCL_BLOCKTYPE_ATTR_NAME, storeTokenInfoArg);
+		nb->SetImplementsLinkAPI(false);
+    	return nb;
+        }
+	return NULL;
+	}
+
+/*! Creates a reader for the specified blocks.
+	The first argument is integer with bits that is composed of bits from PublicNexusReader::NexusBlocksToRead,
+		indicating which of the public blocks should be read. Either compose the
+		argument by ORing together bits (such as NEXUS_TREES_BLOCK_BIT|NEXUS_TAXA_BLOCK_BIT)
+		or simply pass in -1 to read all public blocks.
+	The "standard" NCL NxsBlock (NxsCharactersBlock, NxsTaxaBlock...) instances will be
+		created as initial clone block templates in the contained NxsCloneBlockFactory.
+		These instances can be altered by using getting pointers to them using the
+		GetAssumptionsBlockTemplate(), GetTaxaBlockTemplate()... methods.
+*/
+PublicNexusReader::PublicNexusReader(
+  const int blocksToRead, /*!< integer with bits that is composed of bits from PublicNexusReader::NexusBlocksToRead, indicating which of the public blocks should be read*/
+  NxsReader::WarningHandlingMode warnModeArg) /*!< warning mode (passed to ExceptionRaisingNxsReader::ExceptionRaisingNxsReader() */
+	:ExceptionRaisingNxsReader(warnModeArg),
+	bitsForBlocksToRead(blocksToRead),
+	assumptionsBlockTemplate(0L),
+	charactersBlockTemplate(0L),
+	dataBlockTemplate(0L),
+	distancesBlockTemplate(0L),
+	storerBlockTemplate(0L),
+	taxaBlockTemplate(0L),
+	taxaAssociationBlockTemplate(0L),
+	treesBlockTemplate(0L),
+	unalignedBlockTemplate(0L)
+{
+	this->AddFactory(&cloneFactory);
+
+	taxaBlockTemplate = new NxsTaxaBlock();
+	taxaBlockTemplate->SetImplementsLinkAPI(false);
+	cloneFactory.AddPrototype(taxaBlockTemplate);
+
+	if (blocksToRead & NEXUS_ASSUMPTIONS_BLOCK_BIT)
+		{
+		assumptionsBlockTemplate = new NxsAssumptionsBlock(0L);
+		assumptionsBlockTemplate->SetImplementsLinkAPI(true);
+		cloneFactory.AddPrototype(assumptionsBlockTemplate, "ASSUMPTIONS");
+		cloneFactory.AddPrototype(assumptionsBlockTemplate, "SETS");
+		cloneFactory.AddPrototype(assumptionsBlockTemplate, "CODONS");
+		}
+
+	if (blocksToRead & NEXUS_TREES_BLOCK_BIT)
+		{
+		treesBlockTemplate = new NxsTreesBlock(NULL);
+		treesBlockTemplate->SetCreateImpliedBlock(true);
+		treesBlockTemplate->SetImplementsLinkAPI(true);
+		treesBlockTemplate->SetProcessAllTreesDuringParse(true);
+		treesBlockTemplate->SetAllowImplicitNames(true);
+		treesBlockTemplate->SetWriteFromNodeEdgeDataStructure(true);
+		cloneFactory.AddPrototype(treesBlockTemplate);
+		}
+	if (blocksToRead & NEXUS_CHARACTERS_BLOCK_BIT)
+		{
+		charactersBlockTemplate = new NxsCharactersBlock(NULL, NULL);
+		charactersBlockTemplate->SetCreateImpliedBlock(true);
+		charactersBlockTemplate->SetImplementsLinkAPI(true);
+		charactersBlockTemplate->SetSupportMixedDatatype(true);
+		charactersBlockTemplate->SetConvertAugmentedToMixed(true);
+
+		dataBlockTemplate = new NxsDataBlock(NULL, NULL);
+		dataBlockTemplate->SetCreateImpliedBlock(true);
+		dataBlockTemplate->SetImplementsLinkAPI(true);
+		dataBlockTemplate->SetSupportMixedDatatype(true);
+		dataBlockTemplate->SetConvertAugmentedToMixed(true);
+		cloneFactory.AddPrototype(charactersBlockTemplate, "CHARACTERS");
+		cloneFactory.AddPrototype(dataBlockTemplate, "DATA");
+		}
+	if (blocksToRead & NEXUS_UNALIGNED_BLOCK_BIT)
+		{
+		unalignedBlockTemplate = new NxsUnalignedBlock(NULL);
+		unalignedBlockTemplate->SetCreateImpliedBlock(true);
+		unalignedBlockTemplate->SetImplementsLinkAPI(true);
+		cloneFactory.AddPrototype(unalignedBlockTemplate);
+		}
+	if (blocksToRead & NEXUS_DISTANCES_BLOCK_BIT)
+		{
+		distancesBlockTemplate = new NxsDistancesBlock(NULL);
+		distancesBlockTemplate->SetCreateImpliedBlock(true);
+		distancesBlockTemplate->SetImplementsLinkAPI(true);
+		cloneFactory.AddPrototype(distancesBlockTemplate);
+		}
+	if (blocksToRead & NEXUS_TAXAASSOCIATION_BLOCK_BIT)
+		{
+		taxaAssociationBlockTemplate = new NxsTaxaAssociationBlock();
+		cloneFactory.AddPrototype(taxaAssociationBlockTemplate);
+		}
+	if (blocksToRead & NEXUS_UNKNOWN_BLOCK_BIT)
+		{
+		std::string emptyString;
+		storerBlockTemplate = new NxsStoreTokensBlockReader(emptyString, true);
+		storerBlockTemplate->SetImplementsLinkAPI(false);
+		cloneFactory.AddDefaultPrototype(storerBlockTemplate);
+		}
+}
+
+/*! \ref NxsReader::Execute().  This method calls PostExecuteHook() after NxsReader::Execute
+		is completed.
+*/
+void PublicNexusReader::Execute(NxsToken& token, bool notifyStartStop)
+{
+	NxsReader::Execute(token, notifyStartStop);
+	PostExecuteHook();
+}
+
+/*! \ref Called after successful execute.
+	in the PublicNexusReader, this function up-casts blocks to the type that
+	they should be.
+
+	\warn if you derive from PublicNexusReader and change the type of the clone templates, then
+	you must override this function so that the casts in this function will be safe.
+*/
+void PublicNexusReader::PostExecuteHook()
+{
+	BlockReaderList blocks = GetBlocksFromLastExecuteInOrder();
+	for (BlockReaderList::const_iterator bIt = blocks.begin(); bIt != blocks.end(); ++bIt)
+		{
+		NxsBlock * b = *bIt;
+		const std::string NCL_BLOCKTYPE_ATTR_NAME = b->GetID();
+		const std::string capId = NxsString::get_upper(NCL_BLOCKTYPE_ATTR_NAME);
+		const char * capIdP = capId.c_str();
+		if (strcmp(capIdP, "TAXA") == 0)
+			taxaBlockVec.push_back(static_cast<NxsTaxaBlock *>(b));
+		else if (strcmp(capIdP, "TREES") == 0)
+			treesBlockVec.push_back(static_cast<NxsTreesBlock *>(b));
+		else if ((strcmp(capIdP, "CHARACTERS") == 0) || (strcmp(capIdP, "DATA") == 0))
+			charactersBlockVec.push_back(static_cast<NxsCharactersBlock *>(b));
+		else if ((strcmp(capIdP, "ASSUMPTIONS") == 0) || (strcmp(capIdP, "SETS") == 0) || (strcmp(capIdP, "CODONS") == 0))
+			assumptionsBlockVec.push_back(static_cast<NxsAssumptionsBlock *>(b));
+		else if (strcmp(capIdP, "DISTANCES") == 0)
+			distancesBlockVec.push_back(static_cast<NxsDistancesBlock *>(b));
+		else if (strcmp(capIdP, "TAXAASSOCIATION") == 0)
+			taxaAssociationBlockVec.push_back(static_cast<NxsTaxaAssociationBlock *>(b));
+		else if (strcmp(capIdP, "UNALIGNED") == 0)
+			unalignedBlockVec.push_back(static_cast<NxsUnalignedBlock *>(b));
+		else
+			{
+			storerBlockVec.push_back(static_cast<NxsStoreTokensBlockReader *>(b));
+			}
+		}
+}
+
+void PublicNexusReader::AddFactory(NxsBlockFactory *f)
+{
+	if (f == &cloneFactory)
+		NxsReader::AddFactory(f);
+	else
+		{
+		NCL_ASSERT(false);
+		}
+}
+
+PublicNexusReader::~PublicNexusReader()
+{
+	delete assumptionsBlockTemplate;
+	delete charactersBlockTemplate;
+	delete dataBlockTemplate;
+	delete distancesBlockTemplate;
+	delete storerBlockTemplate;
+	delete taxaBlockTemplate;
+	delete taxaAssociationBlockTemplate;
+	delete treesBlockTemplate;
+	delete unalignedBlockTemplate;
+}
+
+unsigned PublicNexusReader::GetNumAssumptionsBlocks(const NxsTaxaBlock *taxa) const
+	{
+	unsigned n = 0;
+	std::vector<NxsAssumptionsBlock *>::const_iterator bIt = assumptionsBlockVec.begin();
+	for (; bIt != assumptionsBlockVec.end(); ++bIt)
+		{
+		NxsAssumptionsBlock * b = *bIt;
+		if (taxa && taxa != b->taxa)
+			continue;
+		n++;
+		}
+	return n;
+	}
+
+NxsAssumptionsBlock * PublicNexusReader::GetAssumptionsBlock(const NxsTaxaBlock *taxa, unsigned index) const
+	{
+	unsigned n = 0;
+	std::vector<NxsAssumptionsBlock *>::const_iterator bIt = assumptionsBlockVec.begin();
+	for (; bIt != assumptionsBlockVec.end(); ++bIt)
+		{
+		NxsAssumptionsBlock * b = *bIt;
+		if (taxa && taxa != b->taxa)
+			continue;
+		if (index == n)
+			return b;
+		n++;
+		}
+	return 0L;
+	}
+
+unsigned PublicNexusReader::GetNumAssumptionsBlocks( const NxsCharactersBlock * chars) const
+	{
+	unsigned n = 0;
+	std::vector<NxsAssumptionsBlock *>::const_iterator bIt = assumptionsBlockVec.begin();
+	for (; bIt != assumptionsBlockVec.end(); ++bIt)
+		{
+		NxsAssumptionsBlock * b = *bIt;
+		if (chars && chars != b->charBlockPtr)
+			continue;
+		n++;
+		}
+	return n;
+	}
+
+NxsAssumptionsBlock * PublicNexusReader::GetAssumptionsBlock(const NxsCharactersBlock * chars, unsigned index) const
+	{
+	unsigned n = 0;
+	std::vector<NxsAssumptionsBlock *>::const_iterator bIt = assumptionsBlockVec.begin();
+	for (; bIt != assumptionsBlockVec.end(); ++bIt)
+		{
+		NxsAssumptionsBlock * b = *bIt;
+		if (chars && chars != b->charBlockPtr)
+			continue;
+		if (index == n)
+			return b;
+		n++;
+		}
+	return 0L;
+	}
+
+unsigned PublicNexusReader::GetNumAssumptionsBlocks(const NxsTreesBlock *tree) const
+	{
+	unsigned n = 0;
+	std::vector<NxsAssumptionsBlock *>::const_iterator bIt = assumptionsBlockVec.begin();
+	for (; bIt != assumptionsBlockVec.end(); ++bIt)
+		{
+		NxsAssumptionsBlock * b = *bIt;
+		if (tree && tree != b->treesBlockPtr)
+			continue;
+		n++;
+		}
+	return n;
+	}
+
+NxsAssumptionsBlock * PublicNexusReader::GetAssumptionsBlock(const NxsTreesBlock *tree, unsigned index) const
+	{
+	unsigned n = 0;
+	std::vector<NxsAssumptionsBlock *>::const_iterator bIt = assumptionsBlockVec.begin();
+	for (; bIt != assumptionsBlockVec.end(); ++bIt)
+		{
+		NxsAssumptionsBlock * b = *bIt;
+		if (tree && tree != b->treesBlockPtr)
+			continue;
+		if (index == n)
+			return b;
+		n++;
+		}
+	return 0L;
+	}
+
+unsigned PublicNexusReader::GetNumCharactersBlocks(const NxsTaxaBlock *taxa) const
+	{
+	unsigned n = 0;
+	std::vector<NxsCharactersBlock *>::const_iterator bIt = charactersBlockVec.begin();
+	for (; bIt != charactersBlockVec.end(); ++bIt)
+		{
+		NxsCharactersBlock * b = *bIt;
+		if (!taxa || taxa == b->taxa)
+			n++;
+		}
+	return n;
+	}
+
+NxsCharactersBlock * PublicNexusReader::GetCharactersBlock(const NxsTaxaBlock *taxa, unsigned index) const
+	{
+	unsigned n = 0;
+	std::vector<NxsCharactersBlock *>::const_iterator bIt = charactersBlockVec.begin();
+	for (; bIt != charactersBlockVec.end(); ++bIt)
+		{
+		NxsCharactersBlock * b = *bIt;
+		if (!taxa || taxa == b->taxa)
+			{
+			if (index == n)
+				return b;
+			n++;
+			}
+		}
+	return 0L;
+	}
+
+unsigned PublicNexusReader::GetNumDistancesBlocks(const NxsTaxaBlock *taxa) const
+	{
+	unsigned n = 0;
+	std::vector<NxsDistancesBlock *>::const_iterator bIt = distancesBlockVec.begin();
+	for (; bIt != distancesBlockVec.end(); ++bIt)
+		{
+		NxsDistancesBlock * b = *bIt;
+		if (!taxa || taxa == b->taxa)
+			n++;
+		}
+	return n;
+	}
+
+NxsDistancesBlock * PublicNexusReader::GetDistancesBlock(const NxsTaxaBlock *taxa, unsigned index) const
+	{
+	unsigned n = 0;
+	std::vector<NxsDistancesBlock *>::const_iterator bIt = distancesBlockVec.begin();
+	for (; bIt != distancesBlockVec.end(); ++bIt)
+		{
+		NxsDistancesBlock * b = *bIt;
+		if (!taxa || taxa == b->taxa)
+			{
+			if (index == n)
+				return b;
+			n++;
+			}
+		}
+	return 0L;
+	}
+
+unsigned PublicNexusReader::GetNumUnalignedBlocks(const NxsTaxaBlock *taxa) const
+	{
+	unsigned n = 0;
+	std::vector<NxsUnalignedBlock *>::const_iterator bIt = unalignedBlockVec.begin();
+	for (; bIt != unalignedBlockVec.end(); ++bIt)
+		{
+		NxsUnalignedBlock * b = *bIt;
+		if (!taxa || taxa == b->taxa)
+			n++;
+		}
+	return n;
+	}
+
+NxsUnalignedBlock * PublicNexusReader::GetUnalignedBlock(const NxsTaxaBlock *taxa, unsigned index) const
+	{
+	unsigned n = 0;
+	std::vector<NxsUnalignedBlock *>::const_iterator bIt = unalignedBlockVec.begin();
+	for (; bIt != unalignedBlockVec.end(); ++bIt)
+		{
+		NxsUnalignedBlock * b = *bIt;
+		if (!taxa || taxa == b->taxa)
+			{
+			if (index == n)
+				return b;
+			n++;
+			}
+		}
+	return 0L;
+	}
+
+
+unsigned PublicNexusReader::GetNumTaxaAssociationBlocks(const NxsTaxaBlock *taxa) const
+	{
+	unsigned n = 0;
+	std::vector<NxsTaxaAssociationBlock *>::const_iterator bIt = taxaAssociationBlockVec.begin();
+	for (; bIt != taxaAssociationBlockVec.end(); ++bIt)
+		{
+		NxsTaxaAssociationBlock * b = *bIt;
+		if (!taxa || taxa == b->GetFirstTaxaBlock() || taxa == b->GetSecondTaxaBlock())
+			n++;
+		}
+	return n;
+	}
+
+NxsTaxaAssociationBlock * PublicNexusReader::GetTaxaAssociationBlock(const NxsTaxaBlock *taxa, unsigned index) const
+	{
+	unsigned n = 0;
+	std::vector<NxsTaxaAssociationBlock *>::const_iterator bIt = taxaAssociationBlockVec.begin();
+	for (; bIt != taxaAssociationBlockVec.end(); ++bIt)
+		{
+		NxsTaxaAssociationBlock * b = *bIt;
+		if (!taxa || taxa == b->GetFirstTaxaBlock() || taxa == b->GetSecondTaxaBlock())
+			{
+			if (index == n)
+				return b;
+			n++;
+			}
+		}
+	return 0L;
+	}
+
+unsigned PublicNexusReader::GetNumTreesBlocks(const NxsTaxaBlock *taxa) const
+	{
+	unsigned n = 0;
+	std::vector<NxsTreesBlock *>::const_iterator bIt = treesBlockVec.begin();
+	for (; bIt != treesBlockVec.end(); ++bIt)
+		{
+		NxsTreesBlock * b = *bIt;
+		if (!taxa || taxa == b->taxa)
+			n++;
+		}
+	return n;
+	}
+
+NxsTreesBlock * PublicNexusReader::GetTreesBlock(const NxsTaxaBlock *taxa, unsigned index) const
+	{
+	unsigned n = 0;
+	std::vector<NxsTreesBlock *>::const_iterator bIt = treesBlockVec.begin();
+	for (; bIt != treesBlockVec.end(); ++bIt)
+		{
+		NxsTreesBlock * b = *bIt;
+		if (!taxa || taxa == b->taxa)
+			{
+			if (index == n)
+				return b;
+			n++;
+			}
+		}
+	return 0L;
+	}
+
+unsigned PublicNexusReader::GetNumUnknownBlocks() const
+	{
+	return (unsigned)storerBlockVec.size();
+	}
+
+NxsStoreTokensBlockReader * PublicNexusReader::GetUnknownBlock(unsigned index) const
+	{
+	if (index < storerBlockVec.size())
+		return storerBlockVec[index];
+	return 0L;
+	}
+
+unsigned PublicNexusReader::GetNumTaxaBlocks() const
+	{
+	return (unsigned)taxaBlockVec.size();
+	}
+
+NxsTaxaBlock * PublicNexusReader::GetTaxaBlock(unsigned index) const
+	{
+	if (index < taxaBlockVec.size())
+		return taxaBlockVec[index];
+	return 0L;
+	}
+
+void PublicNexusReader::ClearUsedBlockList()
+	{
+	NxsReader::ClearUsedBlockList();
+	assumptionsBlockVec.clear();
+	charactersBlockVec.clear();
+	dataBlockVec.clear();
+	distancesBlockVec.clear();
+	storerBlockVec.clear();
+	taxaBlockVec.clear();
+	taxaAssociationBlockVec.clear();
+	treesBlockVec.clear();
+	unalignedBlockVec.clear();
+	}
+
+
+
+
+bool fileExists(const std::string &fn);
+
+// this is not a great way to check for existence - we may lack read permissions.
+bool fileExists(const std::string &fn)
+{
+	std::ifstream inf;
+	inf.open(fn.c_str());
+	const bool b = inf.good();
+	inf.close();
+	return b;
+}
+
+std::string NxsConversionOutputRecord::getUniqueFilenameWithLowestIndex(const char * prefix)
+{
+	NxsString fn;
+	fn.assign(prefix);
+	const unsigned MAX_SUFFIX =  10000;
+	for (unsigned i = 1; i <= MAX_SUFFIX ; ++i)
+		{
+		if (!fileExists(fn))
+			return fn;
+		fn.assign(prefix);
+		fn << i;
+		}
+	fn.clear();
+	fn << "Files \"" << prefix << "\" through \"" << prefix << MAX_SUFFIX << "\" exist, and I am afraid to write any more files to that directory. I quit.";
+	throw NxsException(fn);
+}
+
+// writes the name pairs separated by newlines to a file whose filepath is specified
+//	by fn.
+void NxsConversionOutputRecord::writeTaxonNameTranslationFilepath(const char * fn, const std::vector<NxsNameToNameTrans> & nameTrans, const NxsTaxaBlockAPI *tb, bool verbose)
+{
+	std::ofstream tnf;
+	tnf.open(fn);
+	if (!tnf.good())
+		{
+		NxsString msg;
+		msg << "Could not open the file " << fn << " for writing translation of names";
+		throw NxsException(msg);
+		}
+	if (verbose)
+		std::cerr << "Writing \"" << fn << "\" to store the translation of names\n";
+	writeTaxonNameTranslationStream(tnf, nameTrans, tb);
+	tnf.close();
+}
+
+
+// writes the name pairs separated by newlines to the ostream tnf
+void NxsConversionOutputRecord::writeTaxonNameTranslationStream(std::ostream & tnf, const std::vector<NxsNameToNameTrans> & nameTrans, const NxsTaxaBlockAPI *tb)
+{
+	std::string blockLabel = tb->GetTitle();
+	tnf << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+	tnf << "<taxa label=";
+	writeAttributeValue(tnf, blockLabel);
+	tnf << " >\n";
+	for (std::vector<NxsNameToNameTrans>::const_iterator nIt = nameTrans.begin(); nIt != nameTrans.end(); ++nIt)
+		{
+		tnf << " <taxon src=";
+		writeAttributeValue(tnf, nIt->first);
+		tnf << " dest=";
+		writeAttributeValue(tnf, nIt->second);
+		tnf << " />\n";
+		}
+	tnf << "</taxa>\n";
+}
+
+void NxsConversionOutputRecord::writeNameTranslation(std::vector<NxsNameToNameTrans> nameTrans, const NxsTaxaBlockAPI * taxa)
+	{
+	if (taxaBlocksToConversionFiles.find(taxa) != taxaBlocksToConversionFiles.end())
+		return;
+	std::string fn;
+	if (this->numberTranslationFiles)
+		fn = getUniqueFilenameWithLowestIndex(this->translationFilename.c_str());
+	else
+		fn = this->translationFilename;
+	writeTaxonNameTranslationFilepath(fn.c_str(), nameTrans, taxa, this->verboseWritingOfNameTranslationFile);
+	taxaBlocksToConversionFiles[taxa] = fn;
+	}
+
+void writeAttributeValue(ostream & out, const std::string & v)
+	{
+	if (v.c_str() == NULL)
+		out << "\'\'";
+	else
+		{
+
+		if (v.find_first_of("\'\"&") != string::npos)
+			{
+			if (strchr(v.c_str(), '\'') != NULL)
+				{
+				out << '\"';
+				for (std::string::const_iterator cIt = v.begin(); cIt != v.end(); ++cIt)
+					{
+					const char & c = *cIt;
+					if (c == '\"')
+						out << """;
+					else if (c == '&')
+						out << "&";
+					else
+						out << c;
+					}
+				out << '\"';
+
+				}
+			else
+				{
+				out << '\'';
+				for (std::string::const_iterator cIt = v.begin(); cIt != v.end(); ++cIt)
+					{
+					const char & c = *cIt;
+					if (c == '&')
+						out << "&";
+					else
+						out << c;
+					}
+				out << '\'';
+				}
+			}
+		else
+			out << '\'' << v << '\'';
+		}
+	}
+
+
+
diff --git a/ncl/nxspublicblocks.h b/ncl/nxspublicblocks.h
new file mode 100644
index 0000000..9970456
--- /dev/null
+++ b/ncl/nxspublicblocks.h
@@ -0,0 +1,731 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#ifndef NCL_NXSPUBLICBLOCKS_H
+#define NCL_NXSPUBLICBLOCKS_H
+
+#include <vector>
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsblock.h"
+#include "ncl/nxsassumptionsblock.h"
+#include "ncl/nxscharactersblock.h"
+#include "ncl/nxsdatablock.h"
+#include "ncl/nxsdistancesblock.h"
+#include "ncl/nxstaxablock.h"
+#include "ncl/nxstaxaassociationblock.h"
+#include "ncl/nxstreesblock.h"
+#include "ncl/nxsunalignedblock.h"
+#include "ncl/nxsreader.h"
+
+class NxsStoreTokensBlockReader
+	: public NxsBlock
+	{
+	public:
+		/*---------------------------------------------------------------------------------------
+		| If the blockname is empty then, any block will be read by the instance
+		*/
+		NxsStoreTokensBlockReader(std::string blockName, bool storeTokenInfo)
+			:storeAllTokenInfo(storeTokenInfo),
+			tolerateEOFInBlock(false)
+			{
+			NCL_BLOCKTYPE_ATTR_NAME = NxsString(blockName.c_str());
+			}
+		void Read(NxsToken &token);
+		void Reset();
+		void Report(std::ostream &out) NCL_COULD_BE_CONST  /*v2.1to2.2 1 */
+			{
+			ReportConst(out);
+			}
+		void WriteAsNexus(std::ostream &out) const;
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, assumptionsBlock blocks!
+		*/
+		NxsStoreTokensBlockReader & operator=(const NxsStoreTokensBlockReader &other)
+			{
+			Reset();
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			commandsRead = other.commandsRead;
+			justTokens = other.justTokens;
+			storeAllTokenInfo = other.storeAllTokenInfo;
+			tolerateEOFInBlock = other.tolerateEOFInBlock;
+			return *this;
+			}
+
+		NxsStoreTokensBlockReader * Clone() const
+			{
+			NxsStoreTokensBlockReader * b = new NxsStoreTokensBlockReader(NCL_BLOCKTYPE_ATTR_NAME, storeAllTokenInfo);
+			*b = *this;
+			return b;
+			}
+		/*! \ref BlockTypeIDDiscussion */
+		virtual bool CanReadBlockType(const NxsToken & token)
+			{
+			if (NCL_BLOCKTYPE_ATTR_NAME.length() == 0)
+				{
+				NCL_BLOCKTYPE_ATTR_NAME.assign(token.GetTokenReference().c_str());
+				NCL_BLOCKTYPE_ATTR_NAME.ToUpper();
+				return true;
+				}
+			return token.Equals(NCL_BLOCKTYPE_ATTR_NAME);
+			}
+		virtual bool TolerateEOFInBlock() const
+			{
+			return tolerateEOFInBlock; /*  */
+			}
+		void SetTolerateEOFInBlock(bool v)
+			{
+			tolerateEOFInBlock = v;
+			}
+		const std::list<ProcessedNxsCommand> & GetCommands() const
+			{
+			return commandsRead;
+			}
+	protected:
+		void ReadCommand(NxsToken &token);
+		void ReportConst(std::ostream &out) const;
+
+		typedef std::vector<std::string> VecString;
+		typedef std::list<VecString> ListVecString;
+
+
+		std::list<ProcessedNxsCommand> commandsRead;
+		ListVecString justTokens;
+		bool storeAllTokenInfo;
+		bool tolerateEOFInBlock;
+	};
+/*!
+ 	A factory class that delegates calls to the other "default" public block parsers that NCL provides.
+
+	Provided as a convenience class to make it possible to read all supported blocks with the addition of one factory
+		to the NxsReader.
+
+
+*/
+class NxsDefaultPublicBlockFactory
+	: public NxsBlockFactory
+	{
+	public:
+		/**----------------------------------------------------------------------------------------------------------------------
+		|	Constructor takes two booleans.
+		|	If readUnknownBlocks is "true" then a NxsStoreTokensBlockReader will be spawned for every unknown block.
+		|	storeTokenInfo is passed to the NxsStoreTokensBlockReader constructor (true for storage of full token info - such as
+		|		file position.
+		*/
+		NxsDefaultPublicBlockFactory(bool readUnknownBlocks, bool storeTokenInfo)
+			:tokenizeUnknownBlocks(readUnknownBlocks),
+			storeTokenInfoArg(storeTokenInfo)
+			{}
+		virtual NxsBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
+
+	protected:
+		NxsAssumptionsBlockFactory assumpBlockFact;
+		NxsCharactersBlockFactory charBlockFact;
+		NxsDataBlockFactory dataBlockFact;
+		NxsDistancesBlockFactory distancesBlockFact;
+		NxsTaxaBlockFactory taxaBlockFact;
+		NxsTaxaAssociationBlockFactory taxaAssociationBlockFact;
+		NxsTreesBlockFactory treesBlockFact;
+		NxsUnalignedBlockFactory unalignedBlockFact;
+
+		bool tokenizeUnknownBlocks;
+		bool storeTokenInfoArg;
+	};
+
+
+/*!
+ 	A factory class that takes examplar that will be cloned to read each block.
+
+	To use this factory you MUST overload NxsBlock::Clone() for class that you would like to use to parse blocks
+*/
+class NxsCloneBlockFactory
+	: public NxsBlockFactory
+	{
+	public:
+		NxsCloneBlockFactory()
+			:defPrototype(NULL)
+			{}
+		/*! \returns a new NxsBlock instance (or NULL) to read the NEXUS content
+		in a block of name `NCL_BLOCKTYPE_ATTR_NAME`.
+
+			This function is called by the NxsReader during the parse if no
+			NxsBlock instances for this block ID type were added to the reader.
+		*/
+		virtual NxsBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, /*!< The block ID \ref BlockTypeIDDiscussion */
+								NxsReader *, /*!< pointer to the NxsReader that is conducting the parse */
+								NxsToken *) /*!< pointer to the current NxsToken object that wraps the istream (this function should not advance the token) */
+			{
+			std::string b(NCL_BLOCKTYPE_ATTR_NAME.c_str());
+			NxsString::to_upper(b);
+			std::map<std::string , const NxsBlock *>::const_iterator pIt = prototypes.find(b);
+			if (pIt == prototypes.end())
+				return (defPrototype ? defPrototype->Clone() : NULL);
+			return pIt->second->Clone();
+			}
+
+		/*! Registers a block instance to be used whenever an unknown block (any
+		block with an ID that does not correspond with any of the registered blocks)
+		is encountered in a file.
+		*/
+		bool AddDefaultPrototype(const NxsBlock * exemplar)
+			{
+			bool replaced = defPrototype != NULL;
+			defPrototype = exemplar;
+			return replaced;
+			}
+		/*! Registers the block instance passed in as a template to clone a block reader
+			whenever a block with the name `blockName` is encountered.
+		*/
+		bool AddPrototype(const NxsBlock * exemplar, /*!< The block to be cloned */
+						  const char * blockName = NULL) /*!< The block ID \ref BlockTypeIDDiscussion */
+			{
+			std::string b;
+			if (blockName)
+				b.assign(blockName);
+			else
+				{
+				if (exemplar == NULL)
+					return false;
+				NxsString bId  = exemplar->GetID();
+				b.assign(bId.c_str());
+				}
+			NxsString::to_upper(b);
+			bool replaced = prototypes.find(b) != prototypes.end();
+			prototypes[b] = exemplar;
+			return replaced;
+			}
+
+	protected:
+		std::map<std::string , const NxsBlock *> prototypes;
+		const NxsBlock * defPrototype;
+	};
+
+
+
+typedef std::pair<std::string, std::string> NxsNameToNameTrans;
+
+/*! hacky (home-spun)  writing of XML attributes */
+void writeAttributeValue(std::ostream & out, const std::string & v);
+
+/*! This class is used internally to keep track of operations that may be needed
+to make taxon labels from different sources avoid clashing with each other.
+*/
+class NxsConversionOutputRecord
+	{
+	public:
+
+		NxsConversionOutputRecord()
+			:addNumbersToDisambiguateNames(false),
+			writeNameTranslationFile(true),
+			translationFilename("NameTranslationFile"),
+			numberTranslationFiles(true),
+			verboseWritingOfNameTranslationFile(true)
+			{}
+
+		void writeNameTranslation(std::vector<NxsNameToNameTrans>, const NxsTaxaBlockAPI * );
+
+		static std::string getUniqueFilenameWithLowestIndex(const char * prefix);
+		static void writeTaxonNameTranslationFilepath(const char * fn, const std::vector<NxsNameToNameTrans> & nameTrans, const NxsTaxaBlockAPI *, bool verbose=false);
+		static void writeTaxonNameTranslationStream(std::ostream & fn, const std::vector<NxsNameToNameTrans> & nameTrans, const NxsTaxaBlockAPI *);
+
+		//The following set of members were added to deal with name clashes that
+		//	are legal (but a very bad idea) in phylip.  If names are auto-translated
+		//	to unique names (by the addition of numbers, then it is very useful to print out a file
+		//	listing the translations.
+		bool addNumbersToDisambiguateNames; // if true, then taxon names may be altered on reading to  make them unique
+		bool writeNameTranslationFile; // if true, and taxon names are modified, then a translation file will be written
+		std::string translationFilename; // if writeNameTranslationFile is used, then this will be the file name or prefix
+		bool numberTranslationFiles; // if true, then translationFilename will serve as a prefix and the real filename may contain a number to make it unique.
+		bool verboseWritingOfNameTranslationFile; // if true, then writing a translationFilename will trigger a message to std::cerr
+		std::map<const NxsTaxaBlockAPI *, std::string> taxaBlocksToConversionFiles;
+	};
+
+
+/*!
+A NxsReader that uses clone factories to read public blocks.
+
+The blocks created by reading a file MUST BE DELETED by the caller (either by a
+	call to DeleteBlocksFromFactories() or by requesting each pointer to a block
+	and then deleting the blocks).
+
+Blocks are created by cloning a template block. If you would like to alter
+	the default behavior of a block, you can request a reference to the
+	"template" NxsBlock of the appropriate type, modify it, and then parse the file.
+
+You may give the reader "context" programatically by adding "Read" blocks (which
+	will mimic the behavior of those blocks having appeared in the file itself.
+
+Commands in Non-public blocks are dealt with by creating a NxsStoreTokensBlockReader
+	to store the commands.
+
+After parsing, the client can request the number of TAXA blocks read, and the
+	number of CHARACTERS, TREES, ... blocks that refer to a particular taxa
+	block.
+
+
+
+NOT COPYABLE
+*/
+class PublicNexusReader: public ExceptionRaisingNxsReader
+	{
+	public:
+
+		static BlockReaderList parseFileOrThrow(const char *filepath,
+												NxsReader::WarningHandlingMode mode = NxsReader::WARNINGS_TO_STDERR,
+												bool parsePrivateBlocks=true,
+												bool storeTokenInfo=true);
+
+		/*! Enumeration of bits used that can be "ORed" together to create an argument for
+			PublicNexusReader instance that will only read certain NEXUS blocks
+		*/
+		enum NexusBlocksToRead
+		{
+			NEXUS_TAXA_BLOCK_BIT = 0x01, /// Flags TAXA blocks as a type to be read
+			NEXUS_TREES_BLOCK_BIT = 0x02, /// Flags TREES blocks as a type to be read
+			NEXUS_CHARACTERS_BLOCK_BIT = 0x04, /// Flags CHARACTERS and DATA blocks as types to be read
+			NEXUS_ASSUMPTIONS_BLOCK_BIT = 0x08, /// Flags ASSUMPTIONS blocks as a type to be read
+			NEXUS_SETS_BLOCK_BIT = 0x10, /// Flags SETS blocks as a type to be read
+			NEXUS_UNALIGNED_BLOCK_BIT = 0x20, /// Flags UNALIGNED blocks as a type to be read
+			NEXUS_DISTANCES_BLOCK_BIT = 0x40, /// Flags DISTANCES blocks as a type to be read
+			NEXUS_TAXAASSOCIATION_BLOCK_BIT = 0x80, /// Flags TAXAASSOCIATION blocks to be read
+			NEXUS_UNKNOWN_BLOCK_BIT = 0x100 /// to be used internally
+		};
+
+		/*!	Creates a new PublicNexusReader
+			\arg blocksToRead -1 indicates that every block type should be read.
+				alternatively, the caller can OR-together bits of the NexusBlocksToRead enum
+				to indicate which blocks should be processed.
+			\arg mode should be a facet of the NxsReader::WarningHandlingMode enum
+				that indicates where warning messages should be directed.
+		*/
+		PublicNexusReader(const int blocksToRead = -1, NxsReader::WarningHandlingMode mode=NxsReader::WARNINGS_TO_STDERR);
+		virtual ~PublicNexusReader();
+
+		virtual void	Execute(NxsToken& token, bool notifyStartStop = true);
+		std::string GetErrorMessage()
+			{
+			return errorMsg;
+			}
+
+		/*! \arg a vector of taxon names.
+		 	\returns a new taxa block for the these taxa. This taxa block will also
+		 	be stored in the reader so that future files can refer to these taxa.
+
+		 	This function is useful if you want to programmatically create
+		 	a NEXUS TAXA block and have the reader treat it in the same way as
+		 	if the NxsTaxaBlock were read from a file
+		*/
+		NxsTaxaBlock * RegisterTaxa(const std::vector<std::string> & tl);
+
+		/*!	\returns a pointer to the template for the NxsAssumptionsBlock.
+			This object will be cloned whenever an ASSUMPTIONS or SETS block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every NxsAssumptionsBlock created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsAssumptionsBlock * GetAssumptionsBlockTemplate() {return assumptionsBlockTemplate;}
+		/*!	\returns a pointer to the template for the NxsCharactersBlock.
+			This object will be cloned whenever a CHARACTERS block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every NxsCharactersBlock created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsCharactersBlock * GetCharactersBlockTemplate() {return charactersBlockTemplate;}
+		/*!	\returns a pointer to the template for the NxsDataBlock.
+			This object will be cloned whenever a DATA block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every NxsDataBlock created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsDataBlock * GetDataBlockTemplate() {return dataBlockTemplate;}
+		/*!	\returns a pointer to the template for the NxsDistancesBlock.
+			This object will be cloned whenever a DISTANCES block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every NxsDistancesBlock created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsDistancesBlock * GetDistancesBlockTemplate() {return distancesBlockTemplate;}
+		/*!	\returns a pointer to the template for the NxsTaxaBlock.
+			This object will be cloned whenever a TAXA block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every NxsTaxaBlock created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsTaxaBlock * GetTaxaBlockTemplate() {return taxaBlockTemplate;}
+		/*!	\returns a pointer to the template for the NxsTaxaAssociationBlock.
+			This object will be cloned whenever a TAXAASSOCIATION block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every NxsTaxaBlock created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsTaxaAssociationBlock * GetTaxaAssociationBlockTemplate() {return taxaAssociationBlockTemplate;}
+		/*!	\returns a pointer to the template for the NxsTreesBlock.
+			This object will be cloned whenever a TREES block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every NxsTreesBlock created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsTreesBlock * GetTreesBlockTemplate() {return treesBlockTemplate;}
+		/*!	\returns a pointer to the template for the GetUnalignedBlockTemplate.
+			This object will be cloned whenever an UNALIGNED block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every GetUnalignedBlockTemplate created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsUnalignedBlock * GetUnalignedBlockTemplate() {return unalignedBlockTemplate;}
+		/*!	\returns a pointer to the template for the NxsStoreTokensBlockReader.
+			This object will be cloned whenever an unknown block is encountered,
+			so modifying the default behavior of this instance will change the behavior
+			of every NxsStoreTokensBlockReader created by the reader.
+
+			Do NOT DELETE the template! (the client has to delete all spawned blocks, but
+			the PublicNexusReader deletes its own templates)
+		*/
+		NxsStoreTokensBlockReader * GetUnknownBlockTemplate() const {return storerBlockTemplate;}
+
+		/*! \returns the number of NxsAssumptionsBlock objects created during the parse which
+				refer to the taxa block `taxa`
+			If `taxa` is 0L, then the total number of Assumptions blocks will be returned
+		*/
+		unsigned GetNumAssumptionsBlocks(const NxsTaxaBlock *taxa) const;
+		/*! \returns the number of NxsAssumptionsBlock objects created during the parse which
+				refer to the characters block `chars`
+			If `chars` is 0L, then the total number of Assumptions blocks will be returned
+		*/
+		unsigned GetNumAssumptionsBlocks(const NxsCharactersBlock *chars) const;
+		/*! \returns the number of NxsAssumptionsBlock objects created during the parse which
+				refer to the trees block `trees`
+			If `trees` is 0L, then the total number of Assumptions blocks will be returned
+		*/
+		unsigned GetNumAssumptionsBlocks(const NxsTreesBlock *trees) const;
+		/*! \returns a pointer to the NxsCharactersBlock with index
+			Indexing starts at 0 and refers to the index in a list of NxsCharactersBlock
+			objects that refer to the NxsTaxaBlock `taxa`.  Thus, the index does not
+			necessarily represent the position among ALL of the NxsDistancesBlock objects
+
+			0L will be returned if the index is out of range. Indices should be <
+				the number returned by GetNumCharactersBlocks(taxa).
+			If `taxa` is 0L, then the total block indexing scheme will refer to the
+				total number of Assumptions blocks read.
+		*/
+		NxsAssumptionsBlock * GetAssumptionsBlock(const NxsTaxaBlock *taxa, unsigned index) const;
+		NxsAssumptionsBlock * GetAssumptionsBlock(const NxsCharactersBlock *taxa, unsigned index) const;
+		NxsAssumptionsBlock * GetAssumptionsBlock(const NxsTreesBlock *taxa, unsigned index) const;
+
+		/*! \returns the number of NxsStoreTokensBlockReader objects created during the parse.
+		*/
+		unsigned GetNumUnknownBlocks() const;
+		/*! \returns a pointer to the NxsTaxaBlock with index (indexing starts at 0).
+				0L will be returned if the index is out of range. index should be < the
+				number returned by GetNumUnknownBlocks();
+		*/
+		NxsStoreTokensBlockReader * GetUnknownBlock(unsigned index) const;
+
+		/*! \returns the number of NxsCharactersBlock objects created during the parse which
+				refer to the taxa in `taxa`
+			If `taxa` is 0L, then the total number of Characters blocks will be returned
+		*/
+		unsigned GetNumCharactersBlocks(const NxsTaxaBlock *taxa) const;
+		/*! \returns a pointer to the NxsCharactersBlock with index
+			Indexing starts at 0 and refers to the index in a list of NxsCharactersBlock
+			objects that refer to the NxsTaxaBlock `taxa`.  Thus, the index does not
+			necessarily represent the position among ALL of the NxsDistancesBlock objects
+
+			0L will be returned if the index is out of range. Indices should be <
+				the number returned by GetNumCharactersBlocks(taxa).
+			If `taxa` is 0L, then the total block indexing scheme will refer to the
+				total number of Characters blocks read.
+		*/
+		NxsCharactersBlock * GetCharactersBlock(const NxsTaxaBlock *taxa, unsigned index) const;
+
+		/*! \returns the number of NxsDistancesBlock objects created during the parse which
+				refer to the taxa in `taxa`
+			If `taxa` is 0L, then the total number of Distances blocks will be returned
+		*/
+		unsigned GetNumDistancesBlocks(const NxsTaxaBlock *taxa) const;
+		/*! \returns a pointer to the NxsDistancesBlock with index
+			Indexing starts at 0 and refers to the index in a list of NxsDistancesBlock
+			objects that refer to the NxsTaxaBlock `taxa`.  Thus, the index does not
+			necessarily represent the position among ALL of the NxsDistancesBlock objects
+
+			0L will be returned if the index is out of range. Indices should be <
+				the number returned by GetNumDistancesBlocks(taxa).
+			If `taxa` is 0L, then the total block indexing scheme will refer to the
+				total number of Distances blocks read.
+		*/
+		NxsDistancesBlock * GetDistancesBlock(const NxsTaxaBlock *taxa, unsigned index) const;
+
+		/*! \returns the number of NxsTaxaBlock objects created during the parse (some
+		 	of these objects may be "implied" by another block, but the client
+		 	code can treat them as if they occurred in the file explicitly).
+		*/
+		unsigned GetNumTaxaBlocks() const;
+		/*! \returns a pointer to the NxsTaxaBlock with index (indexing starts at 0).
+				0L will be returned if the index is out of range.
+		*/
+		NxsTaxaBlock * GetTaxaBlock(unsigned index) const;
+
+		/*! \returns the number of NxsTaxaAssociationBlock objects created during the parse which
+				refer to the taxa as their first of second taxa block
+			If `taxa` is 0L, then the total number of Trees blocks will be returned
+		*/
+		unsigned GetNumTaxaAssociationBlocks(const NxsTaxaBlock *taxa) const;
+		/*! \returns a pointer to the NxsTaxaAssociationBlock with index
+			Indexing starts at 0 and refers to the index in a list of NxsTaxaAssociationBlock
+			objects that refer to the NxsTaxaBlock `taxa`.  Thus, the index does not
+			necessarily represent the position among ALL of the NxsTaxaAssociationBlock objects
+
+			0L will be returned if the index is out of range. Indices should be <
+				the number returned by GetNumTreesBlocks(taxa).
+			If `taxa` is 0L, then the total block indexing scheme will refer to the
+				total number of Trees blocks read.
+		*/
+		NxsTaxaAssociationBlock * GetTaxaAssociationBlock(const NxsTaxaBlock *taxa, unsigned index) const;
+
+		/*! \returns the number of NxsTreesBlock objects created during the parse which
+				refer to the taxa in `taxa`
+			If `taxa` is 0L, then the total number of Trees blocks will be returned
+		*/
+		unsigned GetNumTreesBlocks(const NxsTaxaBlock *taxa) const;
+		/*! \returns a pointer to the NxsTreesBlock with index
+			Indexing starts at 0 and refers to the index in a list of NxsTreesBlock
+			objects that refer to the NxsTaxaBlock `taxa`.  Thus, the index does not
+			necessarily represent the position among ALL of the NxsTreesBlock objects
+
+			0L will be returned if the index is out of range. Indices should be <
+				the number returned by GetNumTreesBlocks(taxa).
+			If `taxa` is 0L, then the total block indexing scheme will refer to the
+				total number of Trees blocks read.
+		*/
+		NxsTreesBlock * GetTreesBlock(const NxsTaxaBlock *taxa, unsigned index) const;
+
+		/*! \returns the number of NxsUnalignedBlock objects created during the parse which
+				refer to the taxa in `taxa`
+			If `taxa` is 0L, then the total number of Unaligned blocks will be returned
+		*/
+		unsigned GetNumUnalignedBlocks(const NxsTaxaBlock *taxa) const;
+		/*! \returns a pointer to the NxsUnalignedBlock with index
+			Indexing starts at 0 and refers to the index in a list of NxsUnalignedBlock
+			objects that refer to the NxsTaxaBlock `taxa`.  Thus, the index does not
+			necessarily represent the position among ALL of the NxsUnalignedBlock objects
+
+			0L will be returned if the index is out of range. Indices should be <
+				the number returned by GetNumUnalignedBlocks(taxa).
+			If `taxa` is 0L, then the total block indexing scheme will refer to the
+				total number of Unaligned blocks read.
+		*/
+		NxsUnalignedBlock * GetUnalignedBlock(const NxsTaxaBlock *taxa, unsigned index) const;
+
+
+		/*! Deletes all of the blocks that were spawned during the parse.
+			\warning Do not call this function if you still retain references
+			  to the spawned objects.
+		*/
+		virtual void DeleteBlocksFromFactories()
+			{
+			NxsReader::DeleteBlocksFromFactories();
+			ClearUsedBlockList();
+			}
+		/*! Mainly used internally.
+			\ref ClearContent() which is probably the function that you want
+			Removes the record of the order of blocks encountered during the
+				last parse.
+
+		*/
+		virtual void ClearUsedBlockList();
+		/*! Removes all references to blocks spawned during the parse, but does
+			NOT delete them.
+			Call this function if you want to reuse the parser and you want to
+
+			delete all of the spawned blocks yourself (after calling
+			ClearUsedBlockList() the DeleteBlocksFromFactories() function
+			will not delete blocks)
+		*/
+		virtual void ClearContent()
+			{
+			assumptionsBlockVec.clear();
+			charactersBlockVec.clear();
+			dataBlockVec.clear();
+			distancesBlockVec.clear();
+			storerBlockVec.clear();
+			taxaBlockVec.clear();
+			taxaAssociationBlockVec.clear();
+			treesBlockVec.clear();
+			unalignedBlockVec.clear();
+			ExceptionRaisingNxsReader::ClearContent();
+			}
+
+		/*! Adds (or "registers") a NxsAssumptionsBlock with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadAssumptionsBlock(NxsAssumptionsBlock * block)
+			{
+			assumptionsBlockVec.push_back(block);
+			AddReadBlock("ASSUMPTIONS", block);
+			}
+		/*! Adds (or "registers") a NxsCharactersBlock with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadCharactersBlock(NxsCharactersBlock * block)
+			{
+			charactersBlockVec.push_back(block);
+			AddReadBlock("CHARACTERS", block);
+			}
+		/*! Adds (or "registers") a NxsDataBlock with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadDataBlock(NxsDataBlock * block)
+			{
+			dataBlockVec.push_back(block);
+			AddReadBlock("CHARACTERS", block);
+			}
+		/*! Adds (or "registers") a NxsDistancesBlock with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadDistancesBlock(NxsDistancesBlock * block)
+			{
+			distancesBlockVec.push_back(block);
+			AddReadBlock("DISTANCES", block);
+			}
+		/*! Adds (or "registers") a NxsTaxaBlock with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadTaxaBlock(NxsTaxaBlock * block)
+			{
+			taxaBlockVec.push_back(block);
+			AddReadBlock("TAXA", block);
+			}
+		/*! Adds (or "registers") a NxsTaxaAssociationBlock with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadTaxaAssociationBlock(NxsTaxaAssociationBlock * block)
+			{
+			taxaAssociationBlockVec.push_back(block);
+			AddReadBlock("TAXAASSOCIATION", block);
+			}
+		/*! Adds (or "registers") a NxsTreesBlock with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadTreesBlock(NxsTreesBlock * block)
+			{
+			treesBlockVec.push_back(block);
+			AddReadBlock("TREES", block);
+			}
+		/*! Adds (or "registers") a NxsUnalignedBlock with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadUnalignedBlock(NxsUnalignedBlock * block)
+			{
+			unalignedBlockVec.push_back(block);
+			AddReadBlock("UNKNOWN", block);
+			}
+		/*! Adds (or "registers") a NxsStoreTokensBlockReader with the reader. Can be
+			useful if you:
+				-# obtain references to blocks you want to keep,
+				-# call ClearContent()
+				-# add back the block instances that provide necessary context for additional parses.
+		*/
+		void AddReadUnknownBlock(NxsStoreTokensBlockReader * block)
+			{
+			storerBlockVec.push_back(block);
+			AddReadBlock(block->GetID(), block);
+			}
+
+		/*! this public field is used in some hacks that relate to printing out
+			translation records during parsing (when names have to change in order
+			for the input file to be valid NEXUS, but we want the parser to be
+			loose but to log its changes).
+		*/
+		NxsConversionOutputRecord conversionOutputRecord;
+
+	protected:
+		void PostExecuteHook();
+		virtual void    AddFactory(NxsBlockFactory *);
+		int bitsForBlocksToRead;
+		NxsCloneBlockFactory cloneFactory;
+
+		NxsAssumptionsBlock * assumptionsBlockTemplate;
+		NxsCharactersBlock * charactersBlockTemplate;
+		NxsDataBlock * dataBlockTemplate;
+		NxsDistancesBlock * distancesBlockTemplate;
+		NxsStoreTokensBlockReader * storerBlockTemplate;
+		NxsTaxaBlock * taxaBlockTemplate;
+		NxsTaxaAssociationBlock * taxaAssociationBlockTemplate;
+		NxsTreesBlock * treesBlockTemplate;
+		NxsUnalignedBlock * unalignedBlockTemplate;
+
+		std::vector<NxsAssumptionsBlock *> assumptionsBlockVec;
+		std::vector<NxsCharactersBlock *> charactersBlockVec;
+		std::vector<NxsDataBlock *> dataBlockVec;
+		std::vector<NxsDistancesBlock *> distancesBlockVec;
+		std::vector<NxsStoreTokensBlockReader *> storerBlockVec;
+		std::vector<NxsTaxaBlock *> taxaBlockVec;
+		std::vector<NxsTaxaAssociationBlock *> taxaAssociationBlockVec;
+		std::vector<NxsTreesBlock *> treesBlockVec;
+		std::vector<NxsUnalignedBlock *> unalignedBlockVec;
+
+		std::string errorMsg;
+	private:
+		PublicNexusReader(const PublicNexusReader &); // do not define. Not copyable
+		PublicNexusReader & operator=(const PublicNexusReader &); // do not define. Not copyable
+
+	};
+
+
+#endif
+
+
diff --git a/ncl/nxsreader.cpp b/ncl/nxsreader.cpp
new file mode 100644
index 0000000..b93f90d
--- /dev/null
+++ b/ncl/nxsreader.cpp
@@ -0,0 +1,1396 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <csignal>
+#include <algorithm>
+#include <set>
+#include <fstream>
+#include <climits>
+#include <sstream>
+#include <iterator>
+#include "ncl/nxsreader.h"
+#include "ncl/nxsdefs.h"
+#include "ncl/nxscharactersblock.h"
+#include "ncl/nxstaxablock.h"
+#include "ncl/nxstreesblock.h"
+
+using namespace std;
+
+#if defined(NCL_CONST_FUNCS) && NCL_CONST_FUNCS
+	int onlyDefinedInCouldBeConst()
+	{
+		return 1;
+	}
+
+#endif
+
+
+static void NxsHandleSignalCallback(int);
+
+NxsReader::SignalHandlerFuncPtr NxsReader::prevSignalCatcher = 0L;
+bool NxsReader::nclCatchesSignals = false;
+unsigned NxsReader::numSigIntsCaught = 0;
+bool NxsReader::prevSignalStored = true;
+
+unsigned NxsReader::getNumSignalIntsCaught()
+	{
+	return NxsReader::numSigIntsCaught;
+	}
+
+void NxsReader::setNumSignalsIntsCaught(unsigned n)
+	{
+	NxsReader::numSigIntsCaught = n;
+	}
+
+void NxsReader::setNCLCatchesSignals(bool v)
+	{
+	NxsReader::nclCatchesSignals = v;
+	}
+
+bool NxsReader::getNCLCatchesSignals()
+	{
+	return NxsReader::nclCatchesSignals;
+	}
+
+
+void NxsHandleSignalCallback(int)
+	{
+	unsigned nc = NxsReader::getNumSignalIntsCaught();
+	NxsReader::setNumSignalsIntsCaught(1 + nc);
+	}
+
+void NxsReader::installNCLSignalHandler()
+	{
+	NxsReader::SignalHandlerFuncPtr prev = std::signal(SIGINT, SIG_IGN);
+	if (prev != SIG_IGN)
+		{
+		NxsReader::prevSignalCatcher = prev;
+		NxsReader::prevSignalStored = true;
+		std::signal(SIGINT, NxsHandleSignalCallback);
+		}
+	}
+
+void NxsReader::uninstallNCLSignalHandler()
+	{
+	if (prevSignalStored)
+		{
+		std::signal(SIGINT, NxsReader::prevSignalCatcher);
+		NxsReader::prevSignalCatcher = 0L;
+		NxsReader::prevSignalStored = false;
+		}
+	}
+
+
+
+/*! Reads a filename with NxsToken object. Calls NexusError on failures */
+void NxsReader::ReadFilepath(const char *filename)
+	{
+	std::ifstream inf;
+	try{
+		inf.open(filename, ios::binary);
+		if (!inf.good())
+			{
+			NxsString err;
+			err << "Could not open the file \"" << filename <<"\"";
+			this->NexusError(err, 0, -1, -1);
+			}
+		}
+	catch (...)
+		{
+		NxsString err;
+		err << '\"' << filename <<"\" does not refer to a valid file." ;
+		this->NexusError(err, 0, -1, -1);
+		}
+	this->ReadFilestream(inf);
+	}
+
+
+/*! Reads the content of string `s` as if it were NEXUS. */
+void NxsReader::ReadStringAsNexusContent(const std::string & s)
+	{
+	std::istringstream inf(s);
+	this->ReadFilestream(inf);
+	}
+
+/*! Reads the istream `inf` by creating a NxsToken object and then calling NxsReader::Execute() */
+void NxsReader::ReadFilestream(std::istream & inf)
+	{
+	NxsToken token(inf);
+	this->Execute(token);
+	}
+
+/*! Returns the set of blocks that have been created from factories, and
+	removes reference to from the NxsReader's collections.
+*/
+std::set<NxsBlock *> NxsReader::RemoveBlocksFromFactoriesFromUsedBlockLists()
+	{
+	std::set<NxsBlock *> todel;
+	BlockReaderList saved;
+	for (BlockReaderList::iterator bIt = blocksInOrder.begin(); bIt != blocksInOrder.end(); ++bIt)
+		{
+		NxsBlock * b  = *bIt;
+		if (BlockIsASingeltonReader(b))
+			saved.push_back(b);
+		else
+			{
+			todel.insert(b);
+			}
+		}
+	for (std::set<NxsBlock *>::iterator d = todel.begin(); d != todel.end(); ++d)
+		{
+		RemoveBlockFromUsedBlockList(*d);
+		}
+	return todel;
+	}
+
+/*! Deletes the set of blocks that have been created from factories and
+	removes reference to from the NxsReader's collections.
+*/
+void NxsReader::DeleteBlocksFromFactories()
+	{
+	std::set<NxsBlock *> todel = RemoveBlocksFromFactoriesFromUsedBlockLists();
+	for (std::set<NxsBlock *>::iterator d = todel.begin(); d != todel.end(); ++d)
+		delete *d;
+	}
+
+/*! \returns true if the block `b` is one of the registered block readers (rather
+	than a block from a factory).
+*/
+bool NxsReader::BlockIsASingeltonReader(NxsBlock *b) const
+	{
+	NxsBlock * sb = blockList;
+	while (sb)
+		{
+		if (b == sb)
+			return true;
+		sb = sb->next;
+		}
+	return false;
+	}
+
+/*! \returns a NxsBlock from `chosenBlockList` with a Title that matches `title`.
+	In the event of ties, the most recently read block is returned.
+	If `title` is NULL, then any block is considered a match.
+	On output *nMatches will be the number of matches (if `nMatches` is not NULL).
+	NULL will be returned if there are no matches.
+*/
+NxsBlock *NxsReader::FindBlockByTitle(const BlockReaderList & chosenBlockList, const char *title, unsigned *nMatches)
+	{
+	BlockReaderList  found = FindAllBlocksByTitle(chosenBlockList, title);
+
+	if (found.empty())
+		{
+		if (nMatches)
+			*nMatches = 0;
+		return NULL;
+		}
+	if (nMatches)
+		*nMatches = (unsigned)found.size();
+	return (NxsBlock *) found.back();
+	}
+
+
+
+BlockReaderList NxsReader::FindAllBlocksByTitle(const BlockReaderList & chosenBlockList, const char *title)
+	{
+	BlockReaderList found = FindAllBlocksByTitleNoPrioritization(chosenBlockList, title);
+	if (found.empty())
+		return found;
+	map<int, BlockReaderList> byPriority;
+	for (BlockReaderList::const_iterator fIt = found.begin(); fIt != found.end(); ++fIt)
+		{
+		NxsBlock * b = *fIt;
+		int priority = GetBlockPriority(b);
+		byPriority[priority].push_back(b);
+		}
+	NCL_ASSERT(!byPriority.empty());
+	return byPriority.rbegin()->second;
+	}
+
+BlockReaderList NxsReader::FindAllBlocksByTitleNoPrioritization(const BlockReaderList & chosenBlockList, const char *title)
+	{
+	BlockReaderList found;
+	if (chosenBlockList.empty() || title == NULL)
+		{
+		found = chosenBlockList;
+		}
+	else
+		{
+		bool emptyTitle = strlen(title) == 0;
+		for (BlockReaderList::const_iterator cblIt = chosenBlockList.begin(); cblIt != chosenBlockList.end(); ++cblIt)
+			{
+			NxsBlock * b = *cblIt;
+			std::vector<std::string> v = this->GetAllTitlesForBlock(b);
+			for (std::vector<std::string>::const_iterator vIt = v.begin(); vIt != v.end(); ++vIt)
+				{
+				const std::string & n = *vIt;
+				if ((emptyTitle && n.empty()) || (NxsString::case_insensitive_equals(title, n.c_str())))
+					{
+					found.push_back(b);
+					break;
+					}
+				}
+			}
+		}
+	return found;
+
+	}
+
+/*! 	\returns all of the TITLEs that have been used for the same block.
+
+	Identical blocks with the different titles can be stored once with all of the
+titles stored a list of "alias titles"
+
+	This will only happen for TAXA blocks, currently.
+*/
+std::vector<std::string> NxsReader::GetAllTitlesForBlock(const NxsBlock *b) const
+	{
+	std::vector<std::string> v;
+	v.push_back(b->GetTitle());
+	std::map<const NxsBlock *, std::list<std::string> >::const_iterator a = blockTitleAliases.find(b);
+	if (a != blockTitleAliases.end())
+		std::copy(a->second.begin(), a->second.end(), back_inserter(v));
+	return v;
+	}
+
+/*! 	used internally to register a new "alias title" for a block */
+void NxsReader::RegisterAltTitle(const NxsBlock * b, std::string t)
+	{
+	std::list<std::string> & v = blockTitleAliases[b];
+	v.push_back(t);
+	}
+
+/*! \returns the pointer to the block with type ID (TAXA, CHARACTERS, ...) matching `btype`
+	 and title matching `title` or 0L if there is no such block.
+	 on output `nMatches` (if it is not 0L) will list the number of blocks that match this
+	 criteria.
+*/
+NxsBlock *NxsReader::FindBlockOfTypeByTitle(const std::string &btype, const char *title, unsigned *nMatches)
+	{
+	BlockTypeToBlockList::const_iterator btblIt = blockTypeToBlockList.find(btype);
+	if (btblIt == blockTypeToBlockList.end())
+		{
+		if (nMatches)
+			*nMatches = 0;
+		return NULL;
+		}
+	const BlockReaderList & chosenBlockList = btblIt->second;
+	return FindBlockByTitle(chosenBlockList, title, nMatches);
+	}
+
+/*!
+	NOTE: cast to NxsTaxaBlockAPI *.  This should only called by NCL when factories and the Link API are in effect.
+	When using these APIs, block readers that read "TAXA" blocks in a NEXUS file must inherit from
+	NxsTaxaBlockAPI, or the behavior will be undefined.
+	This requirement also applies to "implied" taxa blocks that are returned from CHARACTERS (or other) blocks.
+*/
+NxsTaxaBlockAPI *NxsReader::GetTaxaBlockByTitle(const char *title, unsigned *nMatches)
+	{
+	const std::string btype("TAXA");
+	return static_cast<NxsTaxaBlockAPI *>(FindBlockOfTypeByTitle(btype, title, nMatches));
+	}
+
+/*!
+	NOTE: cast to NxsCharactersBlockAPI *.	This should only called by NCL when factories and the Link API are in effect.
+	When using these APIs, block readers that read "CHARACTERS" or "DATA" blocks in a NEXUS file must inherit from
+	NxsCharactersBlockAPI, or the behavior will be undefined.
+*/
+NxsCharactersBlockAPI	*NxsReader::GetCharBlockByTitle(const char *title, unsigned *nMatches)
+	{
+	const std::string btype("CHARACTERS");
+	return static_cast<NxsCharactersBlockAPI *>(FindBlockOfTypeByTitle(btype, title, nMatches));
+	}
+/*!
+	NOTE: cast to NxsTreesBlockAPI *.  This should only called by NCL when factories and the Link API are in effect.  In
+	this case block readers that read "TREES" blocks in a NEXUS file must inherit from NxsTaxaBlockAPI, or the
+	behavior will be undefined.
+*/
+NxsTreesBlockAPI *NxsReader::GetTreesBlockByTitle(const char *title, unsigned *nMatches)
+	{
+	const std::string btype("TREES");
+	return static_cast<NxsTreesBlockAPI *>(FindBlockOfTypeByTitle(btype, title, nMatches));
+	}
+
+/*! Initializes both `blockList' and `currBlock' to NULL.
+*/
+NxsReader::NxsReader() : currentWarningLevel(UNCOMMON_SYNTAX_WARNING), alwaysReportStatusMessages(false)
+	{
+	blockList	= NULL;
+	currBlock	= NULL;
+	taxaBlockFactory = NULL;
+	destroyRepeatedTaxaBlocks = false;
+	}
+
+NxsReader::~NxsReader()
+	{
+	NxsBlock *curr;
+	for (curr = blockList; curr;)
+		{
+		if (curr->GetNexus() == this)
+			curr->SetNexus(NULL);
+		curr = curr->next;
+		}
+	for (BlockReaderList::iterator b = blocksInOrder.begin(); b != blocksInOrder.end(); ++b)
+		{
+		if ((*b)->GetNexus() == this)
+			(*b)->SetNexus(NULL);
+		}
+
+	}
+
+/*!
+	Add a factory for NEXUS block readers to the front of the factories list.
+*/
+void NxsReader::AddFactory(NxsBlockFactory *f)
+	{
+	if (f)
+		factories.push_front(f);
+	}
+/*!
+	Remove a factory for NEXUS block readers.
+*/
+void NxsReader::RemoveFactory(NxsBlockFactory *f)
+	{
+	factories.remove(f);
+	}
+
+
+/*!
+	Adds `newBlock' to the end of the list of NxsBlock objects growing from `blockList'. If `blockList' points to NULL,
+	this function sets `blockList' to point to `newBlock'. Calls SetNexus method of `newBlock' to inform `newBlock' of
+	the NxsReader object that now owns it. This is useful when the `newBlock' object needs to communicate with the
+	outside world through the NxsReader object, such as when it issues progress reports as it is reading the contents
+	of its block.
+*/
+void NxsReader::Add(
+  NxsBlock *newBlock)	/* a pointer to an existing block object */
+	{
+	NCL_ASSERT(newBlock != NULL);
+
+	newBlock->SetNexus(this);
+
+	if (!blockList)
+		blockList = newBlock;
+	else
+		{
+		// Add new block to end of list
+		//
+		NxsBlock *curr;
+		for (curr = blockList; curr && curr->next;)
+			curr = curr->next;
+		NCL_ASSERT(curr && !curr->next);
+		curr->next = newBlock;
+		}
+	}
+
+/*!
+	\deprecated
+	Returns position (first block has position 0) of block `b' in `blockList'. Returns UINT_MAX if `b' cannot be found
+	in `blockList'.
+*/
+unsigned NxsReader::PositionInBlockList(
+  NxsBlock *b)	/* a pointer to an existing block object */
+	{
+	unsigned pos = 0;
+	NxsBlock *curr = blockList;
+
+	for (;;)
+		{
+		if (curr == NULL || curr == b)
+			break;
+		pos++;
+		curr = curr->next;
+		}
+
+	if (curr == NULL)
+		pos = UINT_MAX;
+
+	return pos;
+	}
+
+/*!
+	Reassign should be called if a block (`oldb') is about to be deleted (perhaps to make way for new data). Create
+	the new block (`newb') before deleting `oldb', then call Reassign to replace `oldb' in `blockList' with `newb'.
+	Assumes `oldb' exists and is in `blockList'.
+
+	This function is necessary in v2.0, but replacement of blocks is more easily done
+	with block factories in NCL v2.1 and higher.
+*/
+void NxsReader::Reassign(
+  NxsBlock *oldb,	/* a pointer to the block object soon to be deleted */
+  NxsBlock *newb)	/* a pointer to oldb's replacement */
+	{
+	NxsBlock *prev = NULL;
+	NxsBlock *curr = blockList;
+	newb->SetNexus(this);
+
+	for (;;)
+		{
+		if (curr == NULL || curr == oldb)
+			break;
+		prev = curr;
+		curr = curr->next;
+		}
+
+	NCL_ASSERT(curr != NULL);
+
+	newb->next = curr->next;
+	if (prev == NULL)
+		blockList = newb;
+	else
+		prev->next = newb;
+	curr->next = NULL;
+	curr->SetNexus(NULL);
+	}
+
+bool NxsReader::BlockListEmpty()
+	{
+	return (blockList == NULL ? true : false);
+	}
+
+/*!
+	This function was created for purposes of debugging a new NxsBlock. This version does nothing; to create an active
+	DebugReportBlock function, override this version in the derived class and call the Report function of `nexusBlock'.
+	This function is called whenever the main NxsReader Execute function encounters the [&spillall] command comment
+	between blocks in the data file. The Execute function goes through all blocks and passes them, in turn, to this
+	DebugReportBlock function so that their contents are displayed. Placing the [&spillall] command comment between
+	different versions of a block allows multiple blocks of the same type to be tested using one long data file. Say
+	you are interested in testing whether the normal, transpose, and interleave format of a matrix can all be read
+	correctly. If you put three versions of the block in the data file one after the other, the second one will wipe out
+	the first, and the third one will wipe out the second, unless you have a way to report on each one before the next
+	one is read. This function provides that ability.
+*/
+void NxsReader::DebugReportBlock(
+  NxsBlock &)	/* the block that should be reported */
+	{
+	}
+
+/*!
+	Detaches `oldBlock' from the list of NxsBlock objects growing from `blockList'. If `blockList' itself points to
+	`oldBlock', this function sets `blockList' to point to `oldBlock->next'. Note: the object pointed to by `oldBlock'
+	is not deleted, it is simply detached from the linked list. No harm is done in Detaching a block pointer that has
+	already been detached previously; if `oldBlock' is not found in the block list, Detach simply returns quietly. If
+	`oldBlock' is found, its SetNexus object is called to set the NxsReader pointer to NULL, indicating that it is no
+	longer owned by (i.e., attached to) a NxsReader object.
+*/
+void NxsReader::Detach(
+  NxsBlock *oldBlock)	/* a pointer to an existing block object */
+	{
+	NCL_ASSERT(oldBlock != NULL);
+	RemoveBlockFromUsedBlockList(oldBlock);
+	// Return quietly if there are not blocks attached
+	//
+	if (blockList == NULL)
+		return;
+
+	if (blockList == oldBlock)
+		{
+		blockList = oldBlock->next;
+		oldBlock->SetNexus(NULL);
+		}
+	else
+		{
+		// Bug fix MTH 6/17/2002: old version detached intervening blocks as well
+		//
+		NxsBlock *curr = blockList;
+		for (; curr->next != NULL && curr->next != oldBlock;)
+			curr = curr->next;
+
+		// Line below can be uncommented to find cases where Detach function is
+		// called for pointers that are not in the linked list. If line below is
+		// uncommented, the part of the descriptive comment that precedes this
+		// function about "...simply returns quietly" will be incorrect (at least
+		// in the Debugging version of the program where asserts are active).
+		//
+		//NCL_ASSERT(curr->next == oldBlock);
+
+		if (curr->next == oldBlock)
+			{
+			curr->next = oldBlock->next;
+			oldBlock->SetNexus(NULL);
+			}
+		}
+	}
+
+/*!
+	Called by the NxsReader object when a block named `blockName' is entered. Allows derived class overriding this
+	function to notify user of progress in parsing the NEXUS file. Also gives program the opportunity to ask user if it
+	is ok to purge data currently contained in this block. If user is asked whether existing data should be deleted, and
+	the answer comes back no, then then the overrided function should return false, otherwise it should return true.
+	This (base class) version always returns true.
+*/
+bool NxsReader::EnteringBlock(
+  NxsString )	/* the name of the block just entered */
+	{
+	return true;
+	}
+
+/*!
+	Called by the NxsReader object when a block named `blockName' is being exited. Allows derived class overriding this
+	function to notify user of progress in parsing the NEXUS file.
+*/
+void NxsReader::ExitingBlock(
+  NxsString )	/* the name of the block being exited */
+	{
+	}
+
+/*!
+	Called after `block' has returned from NxsBlock::Read()
+*/
+void NxsReader::PostBlockReadingHook(
+  NxsBlock & /*block*/) /// the block that was just read
+	{
+	}
+
+/*! Uses the registered Factories to spawn a reader for blocks with the name "currBlockName."
+	if sourceOfBlock is not NULL, then *sourceOfBlock will alias to the NxsBlockFactory used.
+	Returns NULL (and does not modify *sourceOfBlock), if no Factory is found that returns a block
+*/
+NxsBlock *NxsReader::CreateBlockFromFactories(const std::string & currBlockName, NxsToken &token, NxsBlockFactory **sourceOfBlock)
+	{
+	for (BlockFactoryList::iterator fIt = factories.begin(); currBlock == NULL && fIt != factories.end(); ++fIt)
+		{
+		NxsBlock *b = (*fIt)->GetBlockReaderForID(currBlockName, this, &token);
+		if (b)
+			{
+			if (b->CanReadBlockType(token))
+				{
+				if (sourceOfBlock)
+					*sourceOfBlock = *fIt;
+				b->SetNexus(this);
+				return b;
+				}
+			(*fIt)->BlockError(b);
+			}
+		}
+	return NULL;
+	}
+
+/*!
+	Reads the NxsReader data file from the input stream provided by `token'. This function is responsible for reading
+	through the name of a each block. Once it has read a block name, it searches for a block reader to
+	handle reading the remainder of the block's contents.
+
+	The block object's Read() method is responsible for reading the END or ENDBLOCK command as well as the trailing semicolon.
+
+	Execute() handles reading comments that are outside of blocks, as well as the initial "#NEXUS" keyword.
+
+	As discussed in \ref NexusErrors exceptions raised during parsing result in calls to ::NexusError()
+
+	If `notifyStartStop' is false then ExecuteStart and ExecuteStop functions will not to be called.
+
+	The order of operations is:
+		-# Read until next Begin command.
+		-# Search through the registered block instances to find one that returns
+			true from NxsBlock::CanReadBlockType()
+		-# If none is found then CreateBlockFromFactories is called.
+		-# If no appropriate block reader has been created, then SkippingBlock hook will
+			be called (and the NxsReader will call ReadUntilEndblock to read until
+			the END of the block before returning to step 1.
+		-# If an appropriate block reader was found in steps 2 or 3 then ExecuteBlock() will be called.
+
+*/
+void NxsReader::Execute(
+  NxsToken	&token,				/*!< the token object used to grab NxsReader tokens */
+  bool		notifyStartStop)	/*!< if true, ExecuteStarting and ExecuteStopping will be called */
+	{
+	bool signalHandlerInstalled = false;
+	unsigned numSigInts = 0;
+	if (NxsReader::nclCatchesSignals)
+		{
+		numSigInts = getNumSignalIntsCaught();
+		installNCLSignalHandler();
+		signalHandlerInstalled = true;
+		}
+	try {
+		CoreExecutionTasks(token, notifyStartStop);
+		}
+	catch (...)
+		{
+		if (signalHandlerInstalled)
+			uninstallNCLSignalHandler();
+		throw;
+		}
+	if (signalHandlerInstalled)
+		{
+		uninstallNCLSignalHandler();
+		if (numSigInts != getNumSignalIntsCaught())
+			throw NxsSignalCanceledParseException("Reading NEXUS content");
+		}
+	}
+
+/*! used internally to  do most of the work of Execute() */
+void NxsReader::CoreExecutionTasks(
+  NxsToken	&token,				/* the token object used to grab NxsReader tokens */
+  bool		notifyStartStop)	/* if true, ExecuteStarting and ExecuteStopping will be called */
+	{
+	unsigned numSigInts = NxsReader::getNumSignalIntsCaught();
+	const bool checkingSignals = NxsReader::getNCLCatchesSignals();
+
+	lastExecuteBlocksInOrder.clear();
+	currBlock = NULL;
+
+	NxsString errormsg;
+	token.SetEOFAllowed(true);
+
+	try
+		{
+		token.SetLabileFlagBit(NxsToken::saveCommandComments);
+		token.GetNextToken();
+		}
+	catch (NxsException x)
+		{
+		NexusError(token.errormsg, 0, 0, 0);
+		return;
+		}
+
+	if (token.Equals("#NEXUS"))
+		{
+		token.SetLabileFlagBit(NxsToken::saveCommandComments);
+		token.GetNextToken();
+		}
+	else
+		{
+		errormsg = "Expecting #NEXUS to be the first token in the file, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		/*mth changed this to a warning instead of an error	 because of the large number
+			of files that violate this requirement.
+		*/
+		NexusWarn(errormsg,  NxsReader::AMBIGUOUS_CONTENT_WARNING, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	if (notifyStartStop)
+		ExecuteStarting();
+	bool keepReading = true;
+	for (;keepReading && !token.AtEOF();)
+		{
+		if (checkingSignals && NxsReader::getNumSignalIntsCaught() != numSigInts)
+			{
+			throw NxsSignalCanceledParseException("Reading NEXUS content");
+			}
+		if (token.Equals("BEGIN"))
+			{
+			token.SetEOFAllowed(false); /*must exit the block before and EOF*/
+			token.GetNextToken();
+			token.SetBlockName(token.GetTokenReference().c_str());
+			for (currBlock = blockList; currBlock != NULL; currBlock = currBlock->next)
+				{
+				if (currBlock->CanReadBlockType(token))
+					break;
+				}
+			NxsString currBlockName = token.GetToken();
+			currBlockName.ToUpper();
+			NxsBlockFactory * sourceOfBlock = NULL;
+			if (currBlock == NULL)
+				{
+				try
+					{
+					currBlock = CreateBlockFromFactories(currBlockName, token, &sourceOfBlock);
+					}
+				catch (NxsException x)
+					{
+					NexusError(x.msg, x.pos, x.line, x.col);
+					token.SetBlockName(0L);
+					token.SetEOFAllowed(true);
+					return;
+					}
+			    }
+			if (currBlock == NULL)
+				{
+				SkippingBlock(currBlockName);
+				if (!ReadUntilEndblock(token, currBlockName))
+					{
+					token.SetBlockName(0L);
+					token.SetEOFAllowed(true);
+					return;
+					}
+				}
+			else if (currBlock->IsEnabled())
+				keepReading = ExecuteBlock(token, currBlockName, currBlock, sourceOfBlock);
+			else
+				{
+				SkippingDisabledBlock(token.GetToken());
+				if (sourceOfBlock)
+					sourceOfBlock->BlockSkipped(currBlock);
+				if (!ReadUntilEndblock(token, currBlockName))
+					{
+					token.SetBlockName(0L);
+					token.SetEOFAllowed(true);
+					return;
+					}
+				}
+			currBlock = NULL;
+			token.SetEOFAllowed(true);
+			token.SetBlockName(0L);
+			}	// if (token.Equals("BEGIN"))
+		else if (token.Equals("&SHOWALL"))
+			{
+			for (NxsBlock*	showBlock = blockList; showBlock != NULL; showBlock = showBlock->next)
+				DebugReportBlock(*showBlock);
+			}
+		else if (token.Equals("&LEAVE"))
+			break;
+		if (keepReading)
+			{
+			token.SetLabileFlagBit(NxsToken::saveCommandComments);
+			token.GetNextToken();
+			}
+		}
+	if (notifyStartStop)
+		ExecuteStopping();
+
+	currBlock = NULL;
+	}
+
+void NxsReader::ClearContent()
+	{
+	for (currBlock = blockList; currBlock;)
+		{
+		currBlock->Reset();
+		currBlock = currBlock->next;
+		}
+	currBlock = blockList;
+	blocksInOrder.clear();
+	blockPriorities.clear();
+	lastExecuteBlocksInOrder.clear();
+	blockTypeToBlockList.clear();
+	blockTitleHistoryMap.clear();
+	blockTitleAliases.clear();
+	}
+
+
+/*! \returns a pointer to a previously process  NxsTaxaBlock with the same taxon
+	labels. The comparison of labels is case-insensitive and not affected by the
+	ordering of taxa within the block.
+
+	TAXA blocks are often repeated in sets of NEXUS files (because a bare TREES block
+	constitutes an illegal NEXUS file, and because NCL spawns implied Taxa blocks
+	if it reads just a Trees block).
+
+	If NxsReader::cullIdenticalTaxaBlocks(true) has been called then NxsReader::GetOriginalTaxaBlock
+	will be called as part of determining whether or not a taxa block should be deleted.
+
+	\warning: this is a hole in the const-correctness because the caller could (but shouldn't
+		modify the Taxa block).
+*/
+NxsTaxaBlockAPI * NxsReader::GetOriginalTaxaBlock(const NxsTaxaBlockAPI * testB) const
+	{
+	if (!testB)
+		return 0L;
+	const std::string idstring("TAXA");
+	BlockTypeToBlockList::const_iterator bttblIt = blockTypeToBlockList.find(idstring);
+	if (bttblIt == blockTypeToBlockList.end())
+		return 0L;
+	const BlockReaderList & brl = bttblIt->second;
+	const unsigned ntt = testB->GetNumTaxonLabels();
+	const std::vector<std::string> testL = testB->GetAllLabels();
+	for (BlockReaderList::const_iterator bIt = brl.begin(); bIt != brl.end(); ++bIt)
+		{
+		const NxsBlock * nb = *bIt;
+		const NxsTaxaBlockAPI * prev = (const NxsTaxaBlockAPI *) nb;
+		if (prev->GetNumTaxonLabels() == ntt)
+			{
+			const std::vector<std::string> prevL = prev->GetAllLabels();
+			std::vector<std::string>::const_iterator pIt = prevL.begin();
+			std::vector<std::string>::const_iterator testIt = testL.begin();
+
+			for (; (testIt != testL.end()) && (pIt != prevL.end()) ; ++testIt, ++pIt)
+				{
+				if (!NxsString::case_insensitive_equals(testIt->c_str(), pIt->c_str()))
+					break;
+				}
+			if (testIt == testL.end())
+				return const_cast<NxsTaxaBlockAPI *>(prev);
+			}
+		}
+
+	return 0L;
+	}
+
+
+/*! Called internally when the NxsReader has found the correct NxsBlock to read
+	a block in a file.
+
+	`token` will be at the block ID.
+	`currBlockName` will be the block ID as a string.
+	`currentBlock` will be the block reader to be used
+	`sourceOfBlock` is the factory  that created the block (or 0L). If sourceOfBlock
+		is not NULL then it will be alerted if the block is skipped (BlockSkipped() method)
+		or there was an error in the read (BlockError() method). The factory is expected
+		to delete the block instances in these cases (NxsReader will not refer to those
+		instances again).
+
+
+
+	The following steps occur:
+		- the EnteringBlock hook is called (if it returns false, the block will be skipped by calling
+			NxsReader::SkippingBlock
+		- NxsBlock::Reset() is called on the reader block
+		- NxsBlock::Read() method of the reader block is called
+		- If an exception is generated, the NexusError is called.
+		- If no exception is generated by Read then the block is processed:
+			- if NxsReader::cullIdenticalTaxaBlocks(true) has been called before Execute and this
+				is a repeated TAXA block, the block will be deleted.
+			- the BlockReadHook() will store all of the implied blocks
+				(by calling NxsBlock::GetImpliedBlocks()) and the block itself.
+			- if one of the implied blocks is a repeated TAXA block and
+				NxsReader::cullIdenticalTaxaBlocks(true) has been called, then
+				the blocks NxsBlock::SwapEquivalentTaxaBlock() method will determine
+				whether or not the duplicate taxa block can be deleted.
+			- each stored block will generate a call to NxsReader::AddBlockToUsedBlockList()
+		- ExitingBlock() is called
+		- PostBlockReadingHook() is called
+*/
+bool NxsReader::ExecuteBlock(NxsToken &token, const NxsString &currBlockName, NxsBlock *currentBlock, NxsBlockFactory * sourceOfBlock)
+	{
+	if (!EnteringBlock(currBlockName))
+		{
+		SkippingBlock(currBlockName);
+		if (sourceOfBlock)
+			sourceOfBlock->BlockSkipped(currentBlock);
+		if (!ReadUntilEndblock(token, currBlockName))
+			{
+			token.SetBlockName(0L);
+			token.SetEOFAllowed(true);
+			return false;
+			}
+		return true;
+		}
+	this->RemoveBlockFromUsedBlockList(currentBlock);
+	currentBlock->Reset();
+	// We need to back up currentBlock, because the Read statement might trigger
+	// a recursive call to Execute (if the block contains instructions to execute
+	// another file, then the same NxsReader object may be used and any member fields (e.g. currentBlock)
+	//	could be trashed.
+	//
+	bool eofFound = false;
+	try
+		{
+		try
+			{
+			currentBlock->Read(token);
+			}
+		catch (NxsX_UnexpectedEOF &eofx)
+			{
+			if (!currentBlock->TolerateEOFInBlock())
+				throw eofx;
+			NxsString m;
+			m << "Unexpected End of file in " << currBlockName << "block";
+			currentBlock->WarnDangerousContent(m, token);
+			eofFound = true;
+			}
+		if (destroyRepeatedTaxaBlocks && currBlockName.EqualsCaseInsensitive("TAXA"))
+			{
+			NxsTaxaBlockAPI * oldTB = this->GetOriginalTaxaBlock((NxsTaxaBlockAPI *) currentBlock);
+			if (oldTB)
+				{
+				const std::string altTitle = currentBlock->GetTitle();
+				this->RegisterAltTitle(oldTB, altTitle);
+				if (sourceOfBlock)
+					sourceOfBlock->BlockError(currentBlock);
+				return true;
+				}
+			}
+		BlockReadHook(currBlockName, currentBlock, &token);
+		}
+	catch (NxsException &x)
+		{
+		NxsString m;
+		if (currentBlock->errormsg.length() > 0)
+			m = currentBlock->errormsg;
+		else
+			m = x.msg;
+		currentBlock->Reset();
+		if (sourceOfBlock != 0)
+			{
+
+			sourceOfBlock->BlockError(currentBlock);
+			}
+		else
+
+		token.SetBlockName(0L);
+		token.SetEOFAllowed(true);
+		currentBlock = NULL;
+		NexusError(m, x.pos, x.line, x.col);
+		return false;
+		}	// catch (NxsException x)
+	ExitingBlock(currBlockName);
+	PostBlockReadingHook(*currentBlock);
+	return !eofFound;
+	}
+
+/*! Called by NxsReader::ExecuteBlock() to store the block and its implied blocks \ref NxsReader::ExecuteBlock()*/
+void NxsReader::BlockReadHook(const NxsString &currBlockName, NxsBlock *currentBlock, NxsToken * token)
+	{
+	VecBlockPtr implied = currentBlock->GetImpliedBlocks();
+	for (VecBlockPtr::iterator impIt = implied.begin(); impIt != implied.end(); ++impIt)
+		{
+		NxsBlock * nb = *impIt;
+		NCL_ASSERT(nb);
+		NxsString impID = nb->GetID();
+		bool storeBlock = true;
+		if (destroyRepeatedTaxaBlocks && impID.EqualsCaseInsensitive("TAXA"))
+			{
+			NxsTaxaBlockAPI * oldTB = this->GetOriginalTaxaBlock((NxsTaxaBlockAPI *) nb);
+			if (oldTB)
+				{
+				storeBlock = ! currentBlock->SwapEquivalentTaxaBlock(oldTB);
+				const std::string altTitle = nb->GetTitle();
+				this->RegisterAltTitle(oldTB, altTitle);
+				if (!storeBlock)
+					{
+					delete nb;
+					}
+
+				}
+			}
+		if (storeBlock)
+			{
+			NxsString m;
+			m << "storing implied block: " << impID;
+			this->statusMessage(m);
+			this->AddBlockToUsedBlockList(impID, nb, token);
+			}
+		}
+	NxsString s;
+	s << "storing read block: " << currentBlock->GetID();
+	this->statusMessage(s);
+	this->AddBlockToUsedBlockList(currBlockName, currentBlock, token);
+	}
+
+/*!
+	Returns a string containing the copyright notice for the NxsReader Class Library, useful for reporting the use of
+	this library by programs that interact with the user.
+*/
+const char * NxsReader::NCLCopyrightNotice()
+	{
+	return NCL_COPYRIGHT;
+	}
+
+/*!
+	Returns a string containing the URL for the NxsReader Class Library internet home page.
+*/
+const char * NxsReader::NCLHomePageURL()
+	{
+	return NCL_HOMEPAGEURL;
+	}
+
+/*!
+	Returns a string containing the name and current version of the NxsReader Class Library, useful for reporting the
+	use of this library by programs that interact with the user.
+*/
+const char * NxsReader::NCLNameAndVersion()
+	{
+	return NCL_NAME_AND_VERSION;
+	}
+
+/*!
+	Called just after Execute member function reads the opening "#NEXUS" token in a NEXUS data file. Override this
+	virtual base class function if your application needs to do anything at this point in the execution of a NEXUS data
+	file (e.g. good opportunity to pop up a dialog box showing progress). Be sure to call the Execute function with the
+	`notifyStartStop' argument set to true, otherwise ExecuteStarting will not be called.
+
+*/
+void NxsReader::ExecuteStarting()
+	{
+	}
+
+/*!
+	Called when Execute member function encounters the end of the NEXUS data file, or the special comment [&LEAVE] is
+	found between NEXUS blocks. Override this virtual base class function if your application needs to do anything at
+	this point in the execution of a NEXUS data file (e.g. good opportunity to hide or destroy a dialog box showing
+	progress). Be sure to call the Execute function with the `notifyStartStop' argument set to true, otherwise
+	ExecuteStopping will not be called.
+*/
+void NxsReader::ExecuteStopping()
+	{
+	}
+
+/*!
+	Called when an error is encountered in a NEXUS file. Allows program to give user details of the error as well as
+	the precise location of the error.
+*/
+void NxsReader::NexusError(
+  NxsString ,	/* the error message to be displayed */
+  file_pos	,	/* the current file position */
+  long	,	/* the current file line */
+  long	)	/* the current column within the current file line */
+	{
+	}
+
+/*!
+	This function may be used to report progess while reading through a file. For example, the NxsAllelesBlock class
+	uses this function to report the name of the population it is currently reading so the user doesn't think the
+	program has hung on large data sets.
+*/
+void NxsReader::OutputComment(
+  const NxsString &)	/* a comment to be shown on the output */
+	{
+	}
+
+/*!
+	This function is called when an unknown block named `blockName' is about to be skipped. Override this pure virtual
+	function to provide an indication of progress as the NEXUS file is being read.
+*/
+void NxsReader::SkippingBlock(
+  NxsString )	/* the name of the block being skipped */
+	{
+	}
+
+/*!
+	This function is called when a disabled block named `blockName' is encountered in a NEXUS data file being executed.
+	Override this pure virtual function to handle this event in an appropriate manner. For example, the program may
+	wish to inform the user that a data block was encountered in what is supposed to be a tree file.
+*/
+void NxsReader::SkippingDisabledBlock(
+  NxsString )	/* the name of the disabled block being skipped */
+	{
+	}
+
+
+/*! Used internally to skip until teh END; or ENDBLOCK; command. */
+bool NxsReader::ReadUntilEndblock(NxsToken &token, const std::string & )
+	{
+	for (;;)
+		{
+		token.GetNextToken();
+		if (token.Equals("END") || token.Equals("ENDBLOCK"))
+			{
+			token.GetNextToken();
+			if (!token.Equals(";"))
+				{
+				std::string errormsg = "Expecting ';' after END or ENDBLOCK command, but found ";
+				errormsg += token.GetToken();
+				errormsg += " instead";
+				NexusError(NxsString(errormsg.c_str()), token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				return false;
+				}
+			return true;
+			}
+		else
+			token.ProcessAsCommand(NULL);
+		}
+	}
+
+/*! Convenience function for setting the NxsTaxaBlockFactory */
+void NxsReader::SetTaxaBlockFactory(NxsTaxaBlockFactory *f)
+	{
+	if (this->taxaBlockFactory)
+		this->RemoveFactory(this->taxaBlockFactory);
+	this->taxaBlockFactory = f;
+	if (taxaBlockFactory)
+		this->AddFactory(this->taxaBlockFactory);
+	}
+/*! \returns the last TAXA block.
+	\warning: This should only called when the client knows that the TAXA block
+	inherits from NxsTaxaBlockAPI (static_cast is used). This will be true if the
+	client code has not derived its own NxsBlock for reading TAXA blocks
+*/
+NxsTaxaBlockAPI *NxsReader::GetLastStoredTaxaBlock()
+	{
+	const std::string idstring("TAXA");
+	NxsBlock * nb = GetLastStoredBlockByID(idstring);
+	return static_cast<NxsTaxaBlockAPI *>(nb); //dynamic_cast<NxsTaxaBlockAPI *>(nb);
+	}
+
+/*! \returns the last CHARACTERS/DATA block.
+	\warning: This should only called when the client knows that the TAXA block
+	inherits from NxsTaxaBlockAPI (static_cast is used). This will be true if the
+	client code has not derived its own NxsBlock for reading TAXA blocks
+*/
+NxsCharactersBlockAPI *NxsReader::GetLastStoredCharactersBlock()
+	{
+	const std::string idstring("CHARACTERS");
+	NxsBlock * nb = GetLastStoredBlockByID(idstring);
+	return static_cast<NxsCharactersBlockAPI *>(nb); //dynamic_cast<NxsCharactersBlockAPI *>(nb);
+	}
+
+/*! \returns the last TREES block.
+	\warning: This should only called when the client knows that the TAXA block
+	inherits from NxsTaxaBlockAPI (static_cast is used). This will be true if the
+	client code has not derived its own NxsBlock for reading TAXA blocks
+*/
+NxsTreesBlockAPI *NxsReader::GetLastStoredTreesBlock()
+	{
+	const std::string idstring("TREES");
+	NxsBlock * nb = GetLastStoredBlockByID(idstring);
+	return static_cast<NxsTreesBlockAPI *>(nb); //dynamic_cast<NxsTreesBlockAPI *>(nb);
+	}
+
+/*! \returns the last block with block ID ("TAXA", "DATA"...) indicated by key
+*/
+
+NxsBlock *NxsReader::GetLastStoredBlockByID(const std::string &key)
+	{
+	BlockTypeToBlockList::iterator bttblIt = blockTypeToBlockList.find(key);
+	if (bttblIt == blockTypeToBlockList.end())
+		return NULL;
+	return bttblIt->second.back();
+	}
+
+/*! Used internally. Called by AddBlockToUsedBlockList() this function will generate
+	a NxsException if the block's title is found in another block of the same block ID type (TAXA, CHARACTERS, ...)
+
+	If the block has no title, an automatically generated title will be supplied with the form
+		Untitled <block type ID> Block #
+*/
+void NxsReader::NewBlockTitleCheckHook(const std::string &blockname, NxsBlock *p, NxsToken *token)
+	{
+	NxsBlockTitleHistoryMap::iterator mIt = blockTitleHistoryMap.find(blockname);
+	if (mIt == blockTitleHistoryMap.end())
+		{
+		std::list<std::string> mt;
+		blockTitleHistoryMap[blockname] = NxsBlockTitleHistory(1, mt);
+		mIt = blockTitleHistoryMap.find(blockname);
+		NCL_ASSERT(mIt != blockTitleHistoryMap.end());
+		}
+	NxsBlockTitleHistory & titleHist = mIt->second;
+	unsigned n = titleHist.first;
+	std::list<std::string> & previousTitles = titleHist.second;
+	std::list<std::string>::iterator lsIt;
+	std::string pTitle = p->GetTitle();
+	std::string origTitle = pTitle;
+	NxsString::to_upper(pTitle);
+	if (pTitle.empty())
+		{
+		while (pTitle.empty())
+			{
+			NxsString autoName = "Untitled ";
+			autoName += p->GetID().c_str();
+			autoName += " Block ";
+			autoName += n++;
+			pTitle.assign(autoName.c_str());
+			NxsString::to_upper(pTitle);
+            lsIt = find(previousTitles.begin(), previousTitles.end(), pTitle);
+			if (lsIt == previousTitles.end())
+				{
+				p->SetTitle(autoName, true);
+				titleHist.first = n;
+				}
+			else
+				pTitle.clear();
+			}
+		}
+	else
+		{
+        lsIt = find(previousTitles.begin(), previousTitles.end(), pTitle);
+		if (lsIt != previousTitles.end())
+			{
+			NxsString msg = "Block titles cannot be repeated. The TITLE ";
+			msg += origTitle;
+			msg += " has already been used for a ";
+			msg += blockname;
+			msg += " block.";
+			if (token)
+				throw NxsException(msg, *token);
+			else
+				throw NxsException(msg, 0, -1, -1);
+			}
+		}
+	previousTitles.push_back(pTitle);
+	}
+
+/*! Used internally to store the correctly read block `p`
+	`token` is the token that is being parsed (or 0L).
+
+	\warning This can generate NxsExceptions if there are clashes in the block title
+*/
+void NxsReader::AddBlockToUsedBlockList(const std::string &blockTypeID, NxsBlock *p, NxsToken *token)
+	{
+	NCL_ASSERT(p);
+	std::string n;
+	if (blockTypeID == "DATA")
+		n = std::string("CHARACTERS");
+	else
+		n = blockTypeID;
+	NewBlockTitleCheckHook(n, p, token);
+	BlockTypeToBlockList::iterator bttblIt = blockTypeToBlockList.find(n);
+	if (bttblIt == blockTypeToBlockList.end())
+		blockTypeToBlockList[n] = BlockReaderList(1, p);
+	else
+		bttblIt->second.push_back(p);
+	blocksInOrder.remove(p);
+	blocksInOrder.push_back(p);
+	if (this->GetBlockPriority(p) < 0)
+		AssignBlockPriority(p, 0);
+
+	lastExecuteBlocksInOrder.remove(p);
+	lastExecuteBlocksInOrder.push_back(p);
+	}
+
+/*! Removes a block from the NxsReader's records. Does NOT delete the block!
+	\returns the number of times the block was in the reader's block lists (usually
+		either 0 or 1).
+*/
+unsigned NxsReader::RemoveBlockFromUsedBlockList(NxsBlock *p)
+	{
+	unsigned totalDel = 0;
+	unsigned before, after;
+	std::vector<std::string> keysToDel;
+	for (BlockTypeToBlockList::iterator bttblIt = blockTypeToBlockList.begin(); bttblIt != blockTypeToBlockList.end(); ++bttblIt)
+		{
+		BlockReaderList & brl = bttblIt->second;
+		before = (unsigned)brl.size();
+		brl.remove(p);
+		after = (unsigned)brl.size();
+		if (after == 0)
+			keysToDel.push_back(bttblIt->first);
+		totalDel += before - after;
+		}
+	for (std::vector<std::string>::const_iterator keyIt = keysToDel.begin(); keyIt != keysToDel.end(); ++keyIt)
+		blockTypeToBlockList.erase(*keyIt);
+	blocksInOrder.remove(p);
+	blockPriorities.erase(p);
+	lastExecuteBlocksInOrder.remove(p);
+	std::string blockID =  p->GetID();
+	NxsBlockTitleHistoryMap::iterator mIt = blockTitleHistoryMap.find(blockID);
+	if (mIt != blockTitleHistoryMap.end())
+		{
+		std::string blockName = p->GetTitle();
+		NxsBlockTitleHistory & titleHist = mIt->second;
+		std::list<std::string> & previousTitles = titleHist.second;
+		std::list<std::string>::iterator ptIt = previousTitles.begin();
+		while (ptIt != previousTitles.end())
+			{
+			if (NxsString::case_insensitive_equals(ptIt->c_str(), blockName.c_str()))
+				ptIt = previousTitles.erase(ptIt);
+			else
+				 ++ptIt;
+			}
+		}
+	return totalDel;
+	}
+
+/*! Returns a set of all of the blocks that have been successfully read.
+*/
+std::set<NxsBlock*> NxsReader::GetSetOfAllUsedBlocks()
+	{
+	std::set<NxsBlock*> s;
+	for (BlockTypeToBlockList::iterator bttblIt = blockTypeToBlockList.begin(); bttblIt != blockTypeToBlockList.end(); ++bttblIt)
+		{
+		BlockReaderList & brl = bttblIt->second;
+		s.insert(brl.begin(), brl.end());
+		}
+	return s;
+	}
+
+void ExceptionRaisingNxsReader::NexusWarn(const std::string &msg, NxsWarnLevel warnLevel, file_pos pos, long line, long col)
+	{
+	if (warnLevel < currentWarningLevel)
+		return;
+	if (warnLevel >= this->warningToErrorThreshold)
+		{
+		NxsString e(msg.c_str());
+		throw NxsException(e, pos, line, col);
+		}
+
+	if (warnMode == NxsReader::IGNORE_WARNINGS)
+		return;
+	if (warnMode == NxsReader::WARNINGS_TO_STDERR)
+		{
+		std::cerr << "\nWarning:  ";
+		std::cerr << "\n " << msg << std::endl;
+		if (line > 0 || pos > 0)
+			std::cerr << "at line " << line << ", column (approximately) " << col << " (file position " << pos << ")\n";
+		}
+	else if (warnMode != NxsReader::WARNINGS_TO_STDOUT)
+		{
+		std::cout << "\nWarning:  ";
+		if (line > 0 || pos > 0)
+			std::cout << "at line " << line << ", column " << col << " (file position " << pos << "):\n";
+		std::cout << "\n " << msg << '\n';
+		if (line > 0 || pos > 0)
+			std::cout << "at line " << line << ", column (approximately) " << col << " (file position " << pos << ')' << std::endl;
+		}
+	else
+		{
+		NxsString m("WARNING:\n ");
+		m += msg.c_str();
+		NexusError(m, pos, line, col);
+		}
+	}
+
+void ExceptionRaisingNxsReader::SkippingBlock(NxsString blockName)
+	{
+	if (warnMode == NxsReader::IGNORE_WARNINGS)
+		return;
+	if (warnMode == NxsReader::WARNINGS_TO_STDERR)
+		std::cerr << "[!Skipping unknown block (" << blockName << ")...]" << std::endl;
+	else if (warnMode != NxsReader::WARNINGS_TO_STDOUT)
+		std::cout << "[!Skipping unknown block (" << blockName << ")...]" << std::endl;
+	}
+
+void ExceptionRaisingNxsReader::SkippingDisabledBlock(NxsString blockName)
+	{
+	if (warnMode == NxsReader::IGNORE_WARNINGS)
+		return;
+	if (warnMode == NxsReader::WARNINGS_TO_STDERR)
+		std::cerr << "[!Skipping disabled block (" << blockName << ")...]" << std::endl;
+	else if (warnMode != NxsReader::WARNINGS_TO_STDOUT)
+		std::cout << "[!Skipping disabled block (" << blockName << ")...]" << std::endl;
+	}
+
+void NxsReader::statusMessage(const std::string & m) const
+{
+	if (alwaysReportStatusMessages || currentWarningLevel == UNCOMMON_SYNTAX_WARNING) {
+		std::cerr << m << std::endl;
+	}
+}
+
+/*! Clears the lists of all of the blocks that have been read.
+	NOTE: does NOT free any memory or call Reset() on any blocks"!!
+
+	This call can be used to "tell" a reader instance that you have taken
+	over the memory management for all of the blocks that it has read (or created).
+*/
+void NxsReader::ClearUsedBlockList()
+	{
+	RemoveBlocksFromFactoriesFromUsedBlockLists();
+	blocksInOrder.clear();
+	blockPriorities.clear();
+	lastExecuteBlocksInOrder.clear();
+	blockTypeToBlockList.clear();
+	}
+
+void NxsReader::AssignBlockPriority(NxsBlock *b, int priorityLevel)
+	{
+	blockPriorities[b] = priorityLevel;
+	}
+
+int	NxsReader::GetBlockPriority(NxsBlock *b) const
+	{
+	std::map<NxsBlock *, int>::const_iterator bIt = blockPriorities.find(b);
+	if (bIt == blockPriorities.end())
+		return 0;
+	return bIt->second;
+	}
+
+void NxsReader::DemoteBlocks(int priorityLevel)
+	{
+	BlockReaderList brl = GetUsedBlocksInOrder();
+	BlockReaderList::iterator brlIt = brl.begin();
+	for (; brlIt != brl.end(); ++brlIt)
+		{
+		NxsBlock * b = *brlIt;
+		AssignBlockPriority(b, priorityLevel);
+		}
+	}
+
+
+
diff --git a/ncl/nxsreader.h b/ncl/nxsreader.h
new file mode 100644
index 0000000..1f60eb1
--- /dev/null
+++ b/ncl/nxsreader.h
@@ -0,0 +1,612 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSREADER_H
+#define NCL_NXSREADER_H
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsstring.h"
+#include "ncl/nxsexception.h"
+#include "ncl/nxstoken.h"
+
+class NxsBlock;
+class NxsBlockFactory;
+class NxsTaxaBlockFactory;
+class NxsAssumptionsBlockAPI;
+class NxsCharactersBlockAPI;
+class NxsTaxaBlockAPI;
+class NxsTreesBlockAPI;
+
+typedef std::list<NxsBlock *> BlockReaderList;
+typedef std::map<std::string, BlockReaderList> BlockTypeToBlockList;
+
+
+/*!
+	This is the class that orchestrates the reading of a NEXUS data file, and so is the central class to NCL.
+
+	NxsReader does not call delete on any of the blocks that are added to it via the Add method.
+
+
+	In the "classic" (v2.0) NCL API:
+		-# An NxsReader is created.
+		-# pointers to instances of NxsBlocks that are expected to be needed should be added to `blockList' using the
+			NxsReader::Add() member function.
+		-# NxsReader::Execute() is then called, which reads the data file until encountering a block name, at which
+			point the correct block is looked up in `blockList' and that object's NxsBlock::Read() method is called.
+		-# NxsReader::PostBlockReadingHook(NxsBlock) is called after a block is successfully read.  This allows one to gather
+			the parsed data from the NxsBlock.  If another block of the same type is encountered, then NxsBlock::Reset()
+			will be called and the same NxsBlock instance will be used to read the next block.
+		.
+	Versions of NCL after 2.0.04 also support a "factory API" augments the former behavior:
+		-# An NxsReader is created.
+		-# In addition to NxsBlocks added using the Add method, you can register instances of a NxsBlockFactory using
+			the NxsReader::AddFactory() method.
+		-# In the NxsReader::Execute() method, if an appropriate block is not found in the `blockList` then the
+			the factories are asked to create a block for the current block name.  The first non-NULL block pointer
+			returned is used.
+		-#  PostBlockReadingHook is still called, but blocks created by a factory will not be "recycled" later in the
+			NxsReader::Execute(), so it is not necessary to pull all of the data out of them.
+		-#If a block created by a factory is skipped or has an error, then the factory will be notified using
+			NxsBlockFactory::BlockError(NxsBlock *) or NxsBlockFactory::BlockSkipped(NxsBlock *).  In the event of
+			skipping or an error, NxsReader will never refer to that instance of the factory-created block again.
+			Hence the base class behavior of BlockError() and BlockSkipped() is to delete the instance.
+		-#	Every time a NxsBlock successfully reads a NEXUS block, the NxsBlock is added to container of "used" blocks.
+			When a block is Reset() it is removed from this container.  NxsReader::GetUsedBlocks() can be called at any
+			point to get a copy of this container (which maps a block type name to a list of NxsBlock*). This container
+			thus stores the state of the parsed NEXUS file.  If no blocks were recycled (if all of the blocks came from
+			factories rather than blocks added using NxsReader::Add() method), then the GetUsedBlocks will contain binary
+			representation of every block parsed.
+		.
+
+	Important: The use of the factories that are supplied with NCL can trigger casts of pointers. This can be unsafe if
+		you create NxsBlocks that do not have the expected inheritance.  For example, if you create a class to
+		read Taxa blocks, but do NOT derive this class from NxsTaxaBlockAPI then the casts will be unsafe.  If you
+		do this, and you wish to use the factory API then you must write your own factories.
+
+	See NCL_TOP/examples/normalizer examples for an example of the factory API (using the MultiFormatReader).  In those
+		examples the PublicNexusReader::PublicNexusReader() constructor is the function that installs the templates for
+		a clone factory.
+
+	\section NexusErrors Errors in NEXUS files
+	When an illegal construct is found, a NxsException is raised. This exception is caught within NxsReader::Execute
+		and NxsReader::NexusError is called. This allows subclasses of NxsReader to handle exceptional circumstances by
+		overriding one function. Whenever you are using a NxsReader instance that is NOT a subclass of ExceptionRaisingNxsReader
+		this is still the behavior (thus any code that was written to the v2.0 API will still have this behavior).
+
+	ExceptionRaisingNxsReader implements NexusError by raising another NxsException.  This results in the exception
+		being propagated to the caller.  The newer NxsReader classes (including PublicNexusReader and MultiFormatReader)
+		are derived from ExceptionRaisingNxsReader. So their Execute methods will also raise NxsExceptions. Deriving a subclass
+		of these classes and overriding NexusError would prevent this behavior.
+
+	The advantage of ExceptionRaisingNxsReader is that one is no longer required to subclass NxsReader to handle errors.
+
+	\section signalsection Signal Handling in NCL:
+		Traditionally, the user of an application can send an SIGINT to cause it to stop. NCL has very limited support
+	for handling signals, and this support is turned off by default.
+
+		If you want NCL to raise an NxsSignalCanceledParseException if a signal is encountered during a parse then call:
+			NxsReader::setNCLCatchesSignals(true);
+	before calling Execute on your NxsReader instance. Note that only the slowly-parsed blocks (TREES and CHARACTERS) and
+	the NxsReader currently check to see if a signal has been caught.  So the NxsSignalCanceledParseException will often
+	have a generic message indicating that the signal was caught during the parse.
+
+		The NCL signal handler is only installed during NxsReader::Execute calls!
+
+		Note: that if you want your program to exit on SIGINT, you can leave the signal handling turned off. If you do turn
+			NCL's signal handling on, then after you do your apps clean up you'll have to exit by something like this:
+				signal(SIGINT, SIG_DFL);
+				kill(getpid(), SIGINT);
+			\see http://www.cons.org/cracauer/sigint.html
+
+*/
+class NxsReader
+	{
+		static void installNCLSignalHandler();
+		static void uninstallNCLSignalHandler();
+	public:
+		/** Enum of arguments for ExceptionRaisingNxsReader ctor */
+		enum WarningHandlingMode
+			{
+			IGNORE_WARNINGS,  /**< warnings that are not error-generating are ignored silently */
+			WARNINGS_TO_STDERR, /**< warnings that are not error-generating are written to standard error stream */
+			WARNINGS_TO_STDOUT, /**< warnings that are not error-generating are written to standard output stream */
+			WARNINGS_ARE_ERRORS /**< warnings that are not error-generating by some other mechanism are still converted to NxsException objects */
+			};
+		/** Enum different levels of warnings.  See NxsReader::SetWarningOutputLevel*/
+		enum NxsWarnLevel
+			{ //TODO: we need another warning level for status messages.
+			UNCOMMON_SYNTAX_WARNING = 0,  /**< Legal but uncommon syntax that could indicate a typo */
+			SKIPPING_CONTENT_WARNING = 1, /**< Content is being skipped by NCL */
+			OVERWRITING_CONTENT_WARNING = 2, /**< New content is replacing old information (eg. CharSets with the same name as a previously defined CharSet)*/
+			DEPRECATED_WARNING = 3, /**< Use of a deprecated feature */
+			AMBIGUOUS_CONTENT_WARNING = 4, /**< commands that could have multiple plausible interpretations */
+			ILLEGAL_CONTENT_WARNING = 5, /**< content that violates NEXUS rules, but is still parseable (eg. CharPartitions that only have some of the characters)*/
+			PROBABLY_INCORRECT_CONTENT_WARNING = 6, /**< Severe Warning that is generated when the file contains characters that should almost certainly be removed */
+			FATAL_WARNING = 7, /**< a higher warning level then any of the warning generated by NCL.  Primarily used in constructs such as (FATAL_WARNING - 1) to mean only the most severe warnings.*/
+			SUPPRESS_WARNINGS_LEVEL = 8 /**<  if the NxsReader's warning level is set to this, then warnings will be suppressed */
+			};
+
+		/*! If true then NCL will call a handler function if signals are encountered during NxsReader::Execute
+			(signal handling is off by default).
+			\sa The section on signal handling \ref signalsection
+		*/
+		static void setNCLCatchesSignals(bool);
+		/*! \returns true if NCL will call a handler function if signals are encountered during NxsReader::Execute
+					(signal handling is off by default).
+			\sa The section on signal handling \ref signalsection
+		*/
+		static bool getNCLCatchesSignals();
+		/*! Usually used internally when signal catching is enabled. If the number of sigints has changed, since the last
+			call, then NCL has detected a signal.
+			\sa The section on signal handling \ref signalsection
+		*/
+		static unsigned getNumSignalIntsCaught();
+		/*! Used internally.  If NCL is handling SIGINTs then this will be incremented with every SIGINT.
+			\sa The section on signal handling \ref signalsection
+		*/
+		static void setNumSignalsIntsCaught(unsigned);
+
+
+						NxsReader();
+		virtual			~NxsReader();
+
+
+		// functions to add and remove Block reader objects or factories for block readers.
+		virtual void    Add(NxsBlock *newBlock);
+		void			Detach(NxsBlock *newBlock);
+		virtual void    AddFactory(NxsBlockFactory *);
+		void			RemoveFactory(NxsBlockFactory *);
+
+		// trigger for NEXUS parsing.
+		virtual void	Execute(NxsToken& token, bool notifyStartStop = true);
+
+		// shortcuts for calling execute...
+		void			ReadFilepath(const char *filename);
+		void			ReadFilestream(std::istream & inf);
+		void			ReadStringAsNexusContent(const std::string & s);
+
+		virtual void	DebugReportBlock(NxsBlock &nexusBlock);
+
+		const char		*NCLNameAndVersion();
+		const char		*NCLCopyrightNotice();
+		const char		*NCLHomePageURL();
+
+		// hooks for subclasses to specialize the behavior
+		virtual void	ExecuteStarting();
+		virtual void	ExecuteStopping();
+		virtual bool	EnteringBlock(NxsString blockName);
+		virtual void	ExitingBlock(NxsString blockName);
+		virtual void	OutputComment(const NxsString &comment);
+		virtual void	SkippingDisabledBlock(NxsString blockName);
+		virtual void	SkippingBlock(NxsString blockName);
+
+		/*! This hook is called by the block readers when they encounter content
+			that is interpretable but is questionable (or even illegal according
+			to the NEXUS standard).
+
+			The default NexusWarn behavior is to generate a NexusException for any
+			warnLevel >= PROBABLY_INCORRECT_CONTENT_WARNING
+		 	and to ignore all other warnings.
+		*/
+		virtual void	NexusWarn(const std::string &s, NxsWarnLevel warnLevel, file_pos pos, long line, long col)
+			{
+			if (warnLevel >= PROBABLY_INCORRECT_CONTENT_WARNING)
+				{
+				NxsString e(s.c_str());
+				throw NxsException(e, pos, line, col);
+				}
+			}
+		/*! Used internally as a more convenient way of calling NexusWarn */
+		void	NexusWarnToken(const std::string &m, NxsWarnLevel warnLevel, const ProcessedNxsToken &token)
+			{
+			NexusWarn(m , warnLevel, token.GetFilePosition(), token.GetLineNumber(), token.GetColumnNumber());
+			}
+		/*! Used internally as a more convenient way of calling NexusWarn */
+		void	NexusWarnToken(const std::string &m, NxsWarnLevel warnLevel, const NxsToken &token)
+			{
+			NexusWarn(m , warnLevel, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+
+		/*! Called when a erron is detected */
+		virtual void	NexusError(NxsString msg, file_pos pos, long line, long col);
+
+
+
+		virtual void			ClearUsedBlockList();
+		NxsBlock 			   *CreateBlockFromFactories(const std::string & currBlockName, NxsToken &token, NxsBlockFactory **sourceOfBlock = NULL);
+		BlockReaderList 		GetUsedBlocksInOrder();
+		BlockReaderList 		GetBlocksFromLastExecuteInOrder();
+		BlockTypeToBlockList 	GetUsedBlocks();
+		std::set<NxsBlock*> 	GetSetOfAllUsedBlocks();
+
+		NxsTaxaBlockAPI 		*GetLastStoredTaxaBlock();
+		NxsCharactersBlockAPI 	*GetLastStoredCharactersBlock();
+		NxsTreesBlockAPI 		*GetLastStoredTreesBlock();
+
+
+		NxsTaxaBlockAPI 		*GetTaxaBlockByTitle(const char *title, unsigned *nMatches);
+		NxsCharactersBlockAPI 	*GetCharBlockByTitle(const char *title, unsigned *nMatches);
+		NxsTreesBlockAPI 		*GetTreesBlockByTitle(const char *title, unsigned *nMatches);
+
+		NxsTaxaBlockFactory 	*GetTaxaBlockFactory();
+		//NxsCharactersBlockFactory 	*GetCharBlockFactory();
+		//NxsTreesBlockFactory 	*GetTreesBlockFactory();
+
+		void			SetTaxaBlockFactory(NxsTaxaBlockFactory *);
+		//void			SetCharBlockFactory(NxsCharactersBlockFactory *);
+		//void			SetTreesBlockFactory(NxsTreesBlockFactory *);
+
+		virtual void    DeleteBlocksFromFactories();
+		unsigned		RemoveBlockFromUsedBlockList(NxsBlock *);
+
+		/*! throws away references to all blocks that that have been read. If the block
+			 was registered with the reader, then "Reset" is called on the block.
+				If the block came from a factory then the reference to the block is
+					removed from the reader (resulting in a memory leak if the client
+					code does not delete the block).
+			 This can be called if the client would like to store the information
+				from the NEXUS file, and get rid of the blocks to save memory (but
+				still maintain things like factories that were registered with the
+				NxsReader and tweaks to the default settings).
+		*/
+		virtual void	ClearContent();
+
+		/*!
+			 This function is useful after ClearContext() has been called.
+			 Instances of blocks that have been read can be registered with reader
+				so that future NEXUS files can be parsed with the context of those blocks.
+			 For example one might want to reregister a NxsTaxaBlock before reading
+				 a trees file, then you could call:
+				reader->AddReadBlock("TAXA", taxaB);
+			 NOTE: if you are using a PublicNexusReader, or MultiFormatReader
+				you should almost certainly call the type-specific forms such as
+				reader->AddReadTaxaBlock(taxaB);
+		*/
+		virtual void AddReadBlock(const NxsString &blockID, NxsBlock *block)
+			{
+			this->BlockReadHook(blockID, block);
+			}
+
+		/*! Call cullIdenticalTaxaBlocks(true) before reading a file if you want
+				the reader to discard a TaxaBlock that is identical to a previous
+				taxa block.  Use of this assumes that the reader of taxa blocks is
+				a NxsTaxaBlockAPI instance.
+			\warning: this function should only be called if you have registered
+				a NxsTaxaBlockFactory.  The culling of blocks WILL CALL DELETE
+				on them.
+		*/
+		void cullIdenticalTaxaBlocks(bool v=true)
+			{
+			this->destroyRepeatedTaxaBlocks = v;
+			}
+		std::vector<std::string> GetAllTitlesForBlock(const NxsBlock *b) const;
+
+
+		/*! Passing true to this method is a hacky way to enable all status messages while still filtering
+			NexusWarn messages.
+		*/
+		void SetAlwaysReportStatusMessages(bool v) {
+			this->alwaysReportStatusMessages = v;
+		}
+		/*! The reader's currentWarningLevel is set here.
+			By default this field is set to UNCOMMON_SYNTAX_WARNING.
+			By setting it to any other facet of NxsWarnLevel you can reduce the
+				number of warnings sent to std::cerr.
+			The warning level is checked in ExceptionRaisingNxsReader::NexusWarn
+				and NxsReader::statusMessage.
+			If the level of the message is greater or equal to the readers level
+				then the message will be sent to std::cerr
+			By calling SetWarningOutputLevel(SUPPRESS_WARNINGS_LEVEL) you can
+				make the reader ignore warnings.
+			\note if alwaysReportStatusMessages then NxsReader::statusMessage
+				will report all messages
+		*/
+		void SetWarningOutputLevel(NxsWarnLevel lev) {
+			currentWarningLevel = lev;
+		}
+		NxsWarnLevel GetWarningOutputLevel() const {
+			return currentWarningLevel;
+		}
+
+		/*! Messages about the status processing a file (such as "Executing...")
+			are sent here. If the reader's currentWarningLevel is set to the lowest
+			level (UNCOMMON_SYNTAX_WARNING) then these messages will show up in stderr.
+		*/
+		virtual void statusMessage(const std::string & m) const;
+
+		/*! \deprecated This function is almost never needed.
+			\returns if true no blocks have registered as readers (does not indicate
+				whether content has been read, nor does it indicate if any
+				factories have been added).
+		*/
+		bool			BlockListEmpty();
+		unsigned		PositionInBlockList(NxsBlock *b);
+
+		void			Reassign(NxsBlock *oldb, NxsBlock *newb);
+
+		/*! The block `b` will be given a priority level of `priorityLevel`
+
+			By default all blocks have priority level of 0. Lowering a blocks
+				priority level below 0, means that a Get....ByTitle() function
+				will not return the block if it finds a matching block that has
+				a higher priority
+
+			If you are re-using blocks (if you are not using the v2.1 API) be
+				aware that if a block has a low (negative) priority, but is then
+				used to read content then its priority will be bumped back up to 0.
+
+			The block priority affects calls Get...ByTitle() functions and
+				Find...ByTitle() functions.
+
+			This function is mainly used to "demote" NxsTaxaBlock instances so that they
+				will not clash with a TAXA block found in the file. \ref TaxaBlockClashes
+		*/
+		void AssignBlockPriority(NxsBlock *b, int priorityLevel);
+		/*! Returns the block priority for a block (or 0 if the block instance is unknown) */
+		int	GetBlockPriority(NxsBlock *b) const;
+		/*! Lowers the priority of all read blocks to `priorityLevel` */
+		void DemoteBlocks(int priorityLevel=-1);
+	protected:
+		/*! A convenience function to allow one to quickly get a list of block reader
+			that were generated (or used) in reading a filepath */
+		static 			BlockReaderList parseFileWithReader(NxsReader & reader, const char *filepath, bool parsePrivateBlocks=true, bool storeTokenInfo=true);
+		static bool nclCatchesSignals; // default False;
+		typedef void (*SignalHandlerFuncPtr) (int);
+		static SignalHandlerFuncPtr prevSignalCatcher; // the signal handler that was installed before NCL's signal handler
+		static unsigned numSigIntsCaught;
+		static bool prevSignalStored ;
+
+		void			CoreExecutionTasks(NxsToken& token, bool notifyStartStop = true);
+
+
+		void			AddBlockToUsedBlockList(const std::string &, NxsBlock *, NxsToken *);
+		bool 			BlockIsASingeltonReader(NxsBlock *) const ;
+		void 			BlockReadHook(const NxsString &currBlockName, NxsBlock *currBlock, NxsToken *token = NULL );
+		bool 			ExecuteBlock(NxsToken &token, const NxsString &currBlockName, NxsBlock *currBlock, NxsBlockFactory * sourceOfBlock);
+		NxsBlock	   *FindBlockOfTypeByTitle(const std::string &btype, const char *title, unsigned *nMatches);
+		NxsBlock	   *FindBlockByTitle(const BlockReaderList & chosenBlockList, const char *title, unsigned *nMatches);
+		BlockReaderList FindAllBlocksByTitle(const BlockReaderList & chosenBlockList, const char *title);
+		NxsBlock	   *GetLastStoredBlockByID(const std::string &key);
+		NxsTaxaBlockAPI *GetOriginalTaxaBlock(const NxsTaxaBlockAPI *) const;
+		bool			IsRepeatedTaxaBlock(const NxsTaxaBlockAPI *) const;
+		void 			NewBlockTitleCheckHook(const std::string &blockname, NxsBlock *p, NxsToken *token);
+		bool 			ReadUntilEndblock(NxsToken &token, const std::string & currBlockName);
+		void			RegisterAltTitle(const NxsBlock * b, std::string t);
+		std::set<NxsBlock *> RemoveBlocksFromFactoriesFromUsedBlockLists();
+		virtual void 	PostBlockReadingHook(NxsBlock &);
+
+
+		NxsBlock		*blockList;	/* pointer to first block in list of blocks */
+		NxsBlock		*currBlock;	/* pointer to current block in list of blocks */
+		typedef std::list<NxsBlockFactory *> BlockFactoryList;
+		NxsTaxaBlockFactory *taxaBlockFactory;
+		BlockFactoryList factories; /* list of pointers to factories capable of creating NxsBlock objects*/
+		bool destroyRepeatedTaxaBlocks;
+		NxsWarnLevel currentWarningLevel;
+		bool alwaysReportStatusMessages;
+
+	private:
+
+		BlockReaderList FindAllBlocksByTitleNoPrioritization(const BlockReaderList & chosenBlockList, const char *title);
+
+		BlockReaderList blocksInOrder;
+		std::map<NxsBlock *, int> blockPriorities;
+
+		BlockReaderList lastExecuteBlocksInOrder;
+		BlockTypeToBlockList blockTypeToBlockList;
+		typedef std::pair<unsigned, std::list<std::string> > NxsBlockTitleHistory;
+		typedef std::map<std::string, NxsBlockTitleHistory > NxsBlockTitleHistoryMap;
+		NxsBlockTitleHistoryMap blockTitleHistoryMap;
+		std::map<const NxsBlock *, std::list<std::string> > blockTitleAliases; // to deal with culling blocks and then using the titles of culled copies
+
+
+	};
+
+typedef NxsBlock NexusBlock;
+typedef NxsReader Nexus;
+
+/*! A subclass of NxsReader that is used in much of NCL v2.1.
+
+	The NexusError function raises a NxsException so that all errors are treated
+		as parse-ending conditions that the caller of Execute must handle.
+	See \ref NexusErrors
+*/
+class ExceptionRaisingNxsReader : public NxsReader
+	{
+	public:
+		/*! The `warnMode` argument should be a facet of NxsReader::WarningHandlingMode
+			this arguments determines what happens to warnings which are NOT converted
+			to exceptions -- by default only content that is probably incorrect will
+			be converted to a NxsException -- see ::SetWarningToErrorThreshold().
+
+
+		*/
+		ExceptionRaisingNxsReader(NxsReader::WarningHandlingMode mode=NxsReader::WARNINGS_TO_STDERR)
+			:warnMode(mode),
+			warningToErrorThreshold(PROBABLY_INCORRECT_CONTENT_WARNING)
+			{}
+		/*! Raise a NxsException. */
+		void NexusError(NxsString msg, file_pos pos, long line, long col)
+			{
+			throw NxsException(msg, pos, line, col);
+			}
+		virtual void NexusWarn(const std::string & msg, NxsWarnLevel level, file_pos pos, long line, long col);
+
+		void SkippingBlock(NxsString blockName);
+		void SkippingDisabledBlock(NxsString blockName);
+		/*! Sets the threshold for converting a warning into an error.   This
+			is useful for making the parser stricter.
+
+			Argument should be a facet of NxsReader::NxsWarnLevel.
+			Overrides the default setting of PROBABLY_INCORRECT_CONTENT_WARNING
+		*/
+		void SetWarningToErrorThreshold(int t)
+			{
+			warningToErrorThreshold = t;
+			}
+		virtual void ClearContent()
+			{
+			NxsReader::ClearContent();
+			}
+	private:
+		NxsReader::WarningHandlingMode warnMode;
+		int warningToErrorThreshold;
+	};
+
+/*! A subclass of NxsReader that is used preserves the same output style as version 2.0, but
+		allows for more flexibility in the streams that are used for output.
+
+	Messages from SkippingBlock, SkippingDisabledBlock, and Warnings are sent to the outstream
+	Warnings and Errors are written to the errstream
+
+*/
+class DefaultErrorReportNxsReader : public NxsReader
+	{
+	public:
+		static BlockReaderList parseFile(const char *filepath, std::ostream * stdOutstream, std::ostream * errOutstream, bool parsePrivateBlocks=true, bool storeTokenInfo=true);
+		/*! creates an instance that will write messages to the specified streams */
+		DefaultErrorReportNxsReader(std::ostream * stdOutstream, /*!< outputstream */
+									std::ostream * errOutstream) /*!< error stream */
+			:NxsReader(),
+			stdOut(stdOutstream),
+			errOut(errOutstream)
+			{
+			}
+
+		virtual ~DefaultErrorReportNxsReader() {}
+
+		/*! \returns true. silent */
+		virtual bool EnteringBlock(NxsString )
+			{
+			return true;
+			}
+
+		/*! writes a message to output  */
+		void SkippingBlock(NxsString blockName)
+			{
+			if (stdOut != 0L)
+				{
+				*stdOut << "[!Skipping unknown block (" << blockName << ")...]\n";
+				stdOut->flush();
+				}
+			}
+
+		/*! writes a message to output  */
+		void SkippingDisabledBlock(NxsString blockName)
+			{
+			if (stdOut != 0L)
+				{
+				*stdOut << "[!Skipping disabled block (" << blockName << ")...]\n";
+				stdOut->flush();
+				}
+			}
+
+		/*! writes a message to output and the error stream if the warnLevel >=  currentWarningLevel
+			If the message is = PROBABLY_INCORRECT_CONTENT_WARNING (and the reader is not
+			ignoring warnings, a NxsException will be raised.
+		*/
+		void NexusWarn(const std::string & msg, /*!< description of the warning */
+						NxsWarnLevel warnLevel, /*!< severity of the warning*/
+						file_pos pos, long line, long col)
+			{
+			if (warnLevel < currentWarningLevel)
+				return;
+			if (warnLevel >= PROBABLY_INCORRECT_CONTENT_WARNING)
+				{
+				NxsString e(msg.c_str());
+				throw NxsException(e, pos, line, col);
+				}
+			if (errOut != 0)
+				{
+				*errOut << "\nWarning:  ";
+				if (line > 0 || pos > 0)
+					*errOut << "at line " << line << ", column " << col << " (file position " << pos << "):\n";
+				*errOut  << msg << std::endl;
+				}
+			else if (stdOut != 0L)
+				{
+				*stdOut << "\nWarning:  ";
+				if (line > 0 || pos > 0)
+					*stdOut << "at line " << line << ", column " << col << " (file position " << pos << "):\n";
+				*stdOut  << msg << std::endl;
+				}
+			}
+
+		/*! Raises a NxsException.
+		*/
+		void NexusError(NxsString msg, file_pos pos, long line, long col)
+			{
+			NexusWarn(msg, NxsReader::FATAL_WARNING, pos, line, col);
+			throw NxsException(msg, pos, line, col);
+			}
+
+		std::ostream * stdOut;
+		std::ostream * errOut;
+	};
+
+/*!
+	Returns a map from all block ids that have been read to all instances that the NxsReader knows have been read and
+		have NOT been cleared.
+	NOTE:  If the factory interface to NCL is not being used this may not be a complete list of all of the blocks that
+		have been read!!!
+*/
+inline BlockTypeToBlockList NxsReader::GetUsedBlocks()
+	{
+	return blockTypeToBlockList;
+	}
+
+/*! Convenience function to get the factory for NxsTaxaBlocks */
+inline bool NxsReader::IsRepeatedTaxaBlock(const NxsTaxaBlockAPI * testB) const
+	{
+	return (GetOriginalTaxaBlock(testB) != NULL);
+	}
+
+
+/*! Returns a list of  all blocks that the NxsReader knows have been read and have NOT been cleared.
+
+	If a block has been "implied" by another block then the implied block will appear before the
+	explicit block.
+*/
+inline BlockReaderList NxsReader::GetUsedBlocksInOrder()
+	{
+	return blocksInOrder;
+	}
+
+/*! Similar to NxsReader::GetUsedBlocksInOrder, except this list of blocks is cleared at the beginning
+	of each  NxsReader::Execute  or (NxsReader::Read...) call. So the list returned list will
+	only reflect blocks from the last execution operation.
+
+	If a block has been "implied" by another block then the implied block will appear before the
+	explicit block.
+*/
+inline BlockReaderList NxsReader::GetBlocksFromLastExecuteInOrder()
+	{
+	return lastExecuteBlocksInOrder;
+	}
+
+/*! Convenience function to get the factory for NxsTaxaBlocks */
+inline NxsTaxaBlockFactory * NxsReader::GetTaxaBlockFactory()
+	{
+	return this->taxaBlockFactory;
+	}
+
+
+
+#endif
+
diff --git a/ncl/nxssetreader.cpp b/ncl/nxssetreader.cpp
new file mode 100644
index 0000000..f4fe41d
--- /dev/null
+++ b/ncl/nxssetreader.cpp
@@ -0,0 +1,536 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <climits>
+#include "ncl/nxssetreader.h"
+#include "ncl/nxstoken.h"
+#include <algorithm>
+#include <iterator>
+using namespace std;
+
+void NxsSetReader::AddRangeToSet(unsigned first, unsigned last, unsigned stride, NxsUnsignedSet * destination, const NxsUnsignedSet * taboo, NxsToken &token)
+	{
+	NCL_ASSERT (last >= first);
+	NCL_ASSERT (last !=UINT_MAX);
+	NCL_ASSERT (stride !=UINT_MAX);
+	if (destination == NULL)
+		return;
+	NxsUnsignedSet::iterator dIt = destination->insert(first).first;
+	for (unsigned curr = first + stride; curr <= last; curr += stride)
+		{
+		if (taboo != NULL && taboo->count(curr) > 0)
+			{
+			NxsString errormsg;
+			errormsg << "Illegal repitition of an index (" << curr + 1 << ") in multiple subsets.";
+			throw NxsException(errormsg, token);
+			}
+		dIt = destination->insert(dIt, curr);
+		}
+	}
+
+/**
+	returns the number of indices added.
+*/
+unsigned NxsSetReader::InterpretTokenAsIndices(NxsToken &token,
+  const NxsLabelToIndicesMapper & mapper,
+  const char * setType,
+  const char * cmdName,
+  NxsUnsignedSet * destination)
+	{
+	try {
+		const std::string t = token.GetToken();
+		if (NxsString::case_insensitive_equals(t.c_str(), "ALL"))
+			{
+			unsigned m = mapper.GetMaxIndex();
+			NxsUnsignedSet s;
+			for (unsigned i = 0; i <= m; ++i)
+				s.insert(i);
+			destination->insert(s.begin(), s.end());
+			return (unsigned)s.size();
+			}
+		return mapper.GetIndicesForLabel(t, destination);
+		}
+	catch (const NxsException & x)
+		{
+		NxsString errormsg = "Error in the ";
+		errormsg << setType << " descriptor of a " << cmdName << " command.\n";
+		errormsg += x.msg;
+		throw NxsException(errormsg, token);
+		}
+	catch (...)
+		{
+		NxsString errormsg = "Expecting a ";
+		errormsg << setType << " descriptor (number or label) in the " << cmdName << ".  Encountered ";
+		errormsg <<  token.GetToken();
+		throw NxsException(errormsg, token);
+		}
+	}
+
+void NxsSetReader::ReadSetDefinition(
+  NxsToken &token,
+  const NxsLabelToIndicesMapper & mapper,
+  const char * setType, /* "TAXON" or "CHARACTER" -- for error messages only */
+  const char * cmdName, /* command name -- "TAXSET" or "EXSET"-- for error messages only */
+  NxsUnsignedSet * destination, /** to be filled */
+  const NxsUnsignedSet * taboo)
+	{
+	NxsString errormsg;
+	NxsUnsignedSet tmpset;
+	NxsUnsignedSet dummy;
+	if (destination == NULL)
+		destination = & dummy;
+	unsigned previousInd = UINT_MAX;
+	std::vector<unsigned> intersectVec;
+	while (!token.Equals(";"))
+		{
+		if (taboo && token.Equals(","))
+			return;
+		if (token.Equals("-"))
+			{
+			if (previousInd == UINT_MAX)
+				{
+				errormsg = "The '-' must be preceded by number or a ";
+				errormsg << setType << " label in the " << cmdName << " command.";
+				throw NxsException(errormsg, token);
+				}
+			token.GetNextToken();
+			if (token.Equals(";") || token.Equals("\\"))
+				{
+				errormsg = "Range in the ";
+				errormsg << setType << " set definition in the " << cmdName << " command must be closed with a number or label.";
+				throw NxsException(errormsg, token);
+				}
+			unsigned endpoint;
+			if (token.Equals("."))
+				endpoint = mapper.GetMaxIndex();
+			else
+				{
+				tmpset.clear();
+				unsigned nAdded = NxsSetReader::InterpretTokenAsIndices(token, mapper, setType, cmdName, &tmpset);
+				if (nAdded != 1)
+					{
+					errormsg = "End of a range in a ";
+					errormsg << setType << " set definition in the " << cmdName << " command must be closed with a single number or label (not a set).";
+					throw NxsException(errormsg, token);
+					}
+				endpoint = *(tmpset.begin());
+				if (endpoint < previousInd)
+					{
+					errormsg = "End of a range in a ";
+					errormsg << setType << " set definition in the " << cmdName << " command must be a larger index than the start of the range (found ";
+					errormsg << previousInd + 1 << " - " << token.GetToken();
+					throw NxsException(errormsg, token);
+					}
+				}
+			token.GetNextToken();
+			if (token.Equals("\\"))
+				{
+				token.GetNextToken();
+				NxsString t = token.GetToken();
+				unsigned stride = 0;
+				try
+					{
+					stride = t.ConvertToUnsigned();
+					}
+				catch (const NxsString::NxsX_NotANumber &)
+					{}
+				if (stride == 0)
+					{
+					errormsg = "Expecting a positive number indicating the 'stride' after the \\ in the ";
+					errormsg << setType << " set definition in the " << cmdName << " command. Encountered ";
+					errormsg << t;
+					throw NxsException(errormsg, token);
+					}
+				AddRangeToSet(previousInd, endpoint, stride, destination, taboo, token);
+				token.GetNextToken();
+				}
+			else
+				AddRangeToSet(previousInd, endpoint, 1, destination, taboo, token);
+			previousInd = UINT_MAX;
+			}
+		else
+			{
+			tmpset.clear();
+			const unsigned nAdded = NxsSetReader::InterpretTokenAsIndices(token, mapper, setType, cmdName, &tmpset);
+			if (taboo != NULL)
+				{
+				set_intersection(taboo->begin(), taboo->end(), tmpset.begin(), tmpset.end(), back_inserter(intersectVec));
+				if (!intersectVec.empty())
+					{
+					errormsg << "Illegal repitition of an index (" << 1 + *(intersectVec.begin()) << ") in multiple subsets.";
+					throw NxsException(errormsg, token);
+					}
+				}
+			if (nAdded == 1 )
+				{
+				previousInd = *(tmpset.begin());
+				destination->insert(previousInd);
+				}
+			else
+				{
+				previousInd = UINT_MAX;
+				destination->insert(tmpset.begin(), tmpset.end());
+				}
+			token.GetNextToken();
+			}
+		}
+	}
+
+/*!
+	Initializes `max' to maxValue, `settype' to `type', `token' to `t', `block' to `nxsblk' and `nxsset' to `iset',
+	then clears `nxsset'.
+*/
+NxsSetReader::NxsSetReader(
+  NxsToken			&t,			/* reference to the NxsToken being used to read in the NEXUS data file */
+  unsigned			maxValue,	/* maximum possible value allowed in this set (e.g. nchar or ntax) */
+  NxsUnsignedSet	&iset,		/* reference to the set object to store the set defined in the NEXUS data file */
+  NxsBlock			&nxsblk,	/* reference to the NxsBlock object (used for looking up taxon or character labels when encountered in the set definition) */
+  unsigned			type)		/* one of the elements in the NxsSetReaderEnum enumeration */
+  : block(nxsblk), token(t), nxsset(iset)
+	{
+	max		= maxValue;
+	settype	= type;
+	nxsset.clear();
+	}
+
+/*!
+	Adds the range specified by `first', `last', and `modulus' to the set. If `modulus' is zero it is ignored. The
+	parameters `first' and `last' refer to numbers found in the data file itself, and thus have range [1..`max']. They
+	are stored in `nxsset', however, with offset 0. For example, if the data file says "4-10\2" this function would be
+	called with `first' = 4, `last' = 10 and `modulus' = 2, and the values stored in `nxsset' would be 3, 5, 7, 9. The
+	return value is true unless `last' is greater than `max', `first' is less than 1, or `first' is greater than `last':
+	in any of these cases, the return value is false to indicate failure to store this range.
+*/
+bool NxsSetReader::AddRange(
+  unsigned first,		/* the first member of the range (inclusive, offset 1) */
+  unsigned last,		/* the last member of the range (inclusive, offset 1) */
+  unsigned modulus)		/* the modulus to use (if non-zero) */
+	{
+	if (last > max || first < 1 || first > last)
+		return false;
+
+	for (unsigned i = first - 1; i < last; i++)
+		{
+		unsigned diff = i - first + 1;
+		if (modulus > 0 && diff % modulus != 0)
+			continue;
+		nxsset.insert(i);
+		}
+
+	return true;
+	}
+
+/*!
+	Tries to interpret `token' as a number. Failing that, tries to interpret `token' as a character or taxon label,
+	which it then converts to a number. Failing that, it throws a NxsException exception.
+*/
+unsigned NxsSetReader::GetTokenValue()
+	{
+	int i = -1;
+	try {
+	    i = token.GetToken().ConvertToInt();
+	    }
+	catch (NxsString::NxsX_NotANumber &x)
+	    {
+	    }
+
+	unsigned v = 0;
+	if (i > 0)
+		v = (unsigned) i;
+
+	if (v == 0 && settype != NxsSetReader::generic)
+		{
+		if (settype == NxsSetReader::charset)
+			v = block.CharLabelToNumber(token.GetToken());
+		else if (settype == NxsSetReader::taxset)
+			v = block.TaxonLabelToNumber(token.GetToken());
+		}
+
+	if (v == 0)
+		{
+		block.errormsg = "Set element (";
+		block.errormsg += token.GetToken();
+		block.errormsg += ") not a number ";
+		if (settype == NxsSetReader::charset)
+			block.errormsg += "and not a valid character label";
+		else if (settype == NxsSetReader::taxset)
+			block.errormsg += "and not a valid taxon label";
+
+		throw NxsException(block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+
+	return v;
+	}
+
+std::vector<unsigned> NxsSetReader::GetSetAsVector(const NxsUnsignedSet &s)
+	{
+	std::vector<unsigned> u;
+	u.reserve(s.size());
+	for (NxsUnsignedSet::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt)
+		u.push_back(*sIt);
+	return u;
+	}
+
+void NxsSetReader::WriteSetAsNexusValue(const NxsUnsignedSet & nxsset, std::ostream & out)
+	{
+	NxsUnsignedSet::const_iterator currIt = nxsset.begin();
+	const NxsUnsignedSet::const_iterator endIt = nxsset.end();
+	if (currIt == endIt)
+		return;
+	unsigned rangeBegin = 1 + *currIt++;
+	if (currIt == endIt)
+		{
+		out << ' ' << rangeBegin;
+		return;
+		}
+	unsigned prev = 1 + *currIt++;
+	if (currIt == endIt)
+		{
+		out << ' ' << rangeBegin << ' ' << prev;
+		return;
+		}
+	unsigned stride = prev - rangeBegin;
+	unsigned curr = 1 + *currIt++;
+	bool inRange = true;
+	while (currIt != endIt)
+		{
+		if (inRange)
+			{
+			if (curr - prev != stride)
+				{
+				if (prev - rangeBegin == stride)
+					{
+					out << ' ' << rangeBegin;
+					rangeBegin = prev;
+					stride = curr - prev;
+					}
+				else
+					{
+					if (stride > 1)
+						out << ' ' << rangeBegin << '-' << prev << " \\ " << stride;
+					else
+						out << ' ' << rangeBegin << '-' << prev ;
+					inRange = false;
+					}
+				}
+			}
+		else
+			{
+			inRange = true;
+			rangeBegin = prev;
+			stride = curr - prev;
+			}
+		prev = curr;
+		curr = 1 + *currIt;
+		currIt++;
+		}
+	if (inRange)
+		{
+		if (curr - prev != stride)
+			{
+			if (prev - rangeBegin == stride)
+				out << ' ' << rangeBegin << ' ' << prev;
+			else
+				{
+				if (stride > 1)
+					out << ' ' << rangeBegin << '-' << prev << " \\ " << stride;
+				else
+					out << ' ' << rangeBegin << '-' << prev ;
+				}
+			out << ' ' << curr;
+			}
+		else
+			{
+			if (stride > 1)
+				out << ' ' << rangeBegin << '-' << curr << " \\ " << stride;
+			else
+				out << ' ' << rangeBegin << '-' << curr ;
+			}
+		}
+	else
+		out << ' ' << prev << ' ' << curr;
+	}
+/*!
+	Reads in a set from a NEXUS data file. Returns true if the set was terminated by a semicolon, false otherwise.
+*/
+bool NxsSetReader::Run()
+	{
+	bool ok;
+	bool retval = false;
+
+	unsigned rangeBegin = UINT_MAX;
+	unsigned rangeEnd = rangeBegin;
+	bool insideRange = false;
+	unsigned modValue = 1;
+
+	for (;;)
+		{
+		// Next token should be one of the following:
+		//   ';'        --> set definition finished
+		//   '-'        --> range being defined
+		//   <integer>  --> member of set (or beginning or end of a range)
+		//   '.'        --> signifies the number max
+		//   '\'        --> signifies modulus value coming next
+		//
+		token.GetNextToken();
+
+		if (token.Equals("-"))
+			{
+			// We should not be inside a range when we encounter a hyphenation symbol.
+			// The hyphen is what _puts_ us inside a range!
+			//
+			if (insideRange)
+				{
+				block.errormsg = "The symbol '-' is out of place here";
+				throw NxsException(block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			insideRange = true;
+			}
+
+		else if (token.Equals("."))
+			{
+			// We _should_ be inside a range if we encounter a period, as this
+			// is a range termination character
+			//
+			if (!insideRange)
+				{
+				block.errormsg = "The symbol '.' can only be used to specify the end of a range";
+				throw NxsException(block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			rangeEnd = max;
+			}
+
+		else if (token.Equals("\\"))
+			{
+			// The backslash character is used to specify a modulus to a range, and
+			// thus should only be encountered if currently inside a range
+			//
+			if (!insideRange)
+				{
+				block.errormsg = "The symbol '\\' can only be used after the end of a range has been specified";
+				throw NxsException(block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+
+			// This should be the modulus value
+			//
+			modValue = NxsToken::DemandPositiveInt(token, block.errormsg, "The modulus value");
+			}
+
+		else if (insideRange && rangeEnd == UINT_MAX)
+			{
+			// The beginning of the range and the hyphen symbol have been read
+			// already, just need to store the end of the range at this point
+			//
+			rangeEnd = GetTokenValue();
+			}
+
+		else if (insideRange)
+			{
+			// If insideRange is true, we must have already stored the beginning
+			// of the range and read in the hyphen character. We would not have
+			// made it this far if we had also not already stored the range end.
+			// Thus, we can go ahead and add the range.
+			//
+			ok = AddRange(rangeBegin, rangeEnd, modValue);
+			modValue = 1;
+
+			if (!ok)
+				{
+				block.errormsg = "Character number out of range (or range incorrectly specified) in set specification";
+				throw NxsException(block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+
+			// We have actually already read in the next token, so deal with it
+			// now so that we don't end up skipping a token
+			//
+			if (token.Equals(";"))
+				{
+				retval = true;
+				break;
+				}
+			else if (token.Equals(","))
+				{
+				break;
+				}
+
+			rangeBegin = GetTokenValue();
+			rangeEnd = UINT_MAX;
+			insideRange = false;
+			}
+
+		else if (rangeBegin != UINT_MAX)
+			{
+			// If we were inside a range, we would have not gotten this far.
+			// If not in a range, we are either getting ready to begin a new
+			// range or have previously read in a single value. Handle the
+			// latter possibility here.
+			//
+			ok = AddRange(rangeBegin, rangeBegin, modValue);
+			modValue = 1;
+
+			if (!ok)
+				{
+				block.errormsg = "Number out of range (or range incorrectly specified) in set specification";
+				throw NxsException(block.errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+
+			if (token.Equals(";"))
+				{
+				retval = true;
+				break;
+				}
+			else if (token.Equals(","))
+				{
+				break;
+				}
+
+			rangeBegin = GetTokenValue();
+			rangeEnd = UINT_MAX;
+			}
+
+		else if (token.Equals(";"))
+			{
+			retval = true;
+			break;
+			}
+
+		else if (token.Equals(","))
+			{
+			break;
+			}
+
+		else if (token.Equals("ALL"))
+			{
+			rangeBegin = 1;
+			rangeEnd = max;
+			ok = AddRange(rangeBegin, rangeEnd);
+			}
+
+		else
+			{
+			// Can only get here if rangeBegin still equals UINT_MAX and thus we
+			// are reading in the very first token and that token is neither
+			// the word "all" nor is it a semicolon
+			//
+			rangeBegin = GetTokenValue();
+			rangeEnd = UINT_MAX;
+			}
+		}
+
+	return retval;
+	}
diff --git a/ncl/nxssetreader.h b/ncl/nxssetreader.h
new file mode 100644
index 0000000..14d20cb
--- /dev/null
+++ b/ncl/nxssetreader.h
@@ -0,0 +1,104 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSSETREADER_H
+#define NCL_NXSSETREADER_H
+#include <sstream>
+#include "ncl/nxstoken.h"
+#include "ncl/nxsblock.h"
+/*!
+	A class for reading NEXUS set objects and storing them in a set of int values. The NxsUnsignedSet `nxsset' will be
+	cleared, and `nxsset' will be built up as the set is read, with each element in the list storing a
+	member of the set (ranges are stored as individual elements). This class handles set descriptions of the following
+	form:
+>
+	4-7 15 20-.\3;
+>
+	The above set includes every number from 4 to 7 (inclusive), 15 and every third number from 20 to max, where `max'
+	would ordinarily be set to either the last character (if `settype' is `NxsSetReaderEnum::charset') or the last
+	taxon (if `settype' is `NxsSetReaderEnum::taxset'). If `max' equaled 30, the example above would be stored as
+	follows (remember that internally the numbers are stored with offset 0, even though in the NEXUS data file the
+	numbers always start at 1.
+>
+	3, 4, 5, 6, 14, 19, 22, 25, 28
+>
+	The following example of how NxsSetReader is used comes from the NxsCharactersBlock::HandleEliminate function:
+>
+	NxsSetReader(token, ncharTotal, eliminated, *this, NxsSetReader::charset).Run();
+>
+	This reads in a set of eliminated characters from a NEXUS data file, storing the resulting set in the data member
+	`eliminated'. In this case `max' is set to `ncharTotal' (the total number of characters), and the block reference
+	is set to the NxsCharactersBlock object, which provides a
+*/
+class NxsSetReader
+	{
+		static unsigned InterpretTokenAsIndices(NxsToken &t,
+								 const NxsLabelToIndicesMapper &,
+								 const char * setType,
+								 const char * cmd,
+								 NxsUnsignedSet * destination);
+		static void AddRangeToSet(unsigned first, unsigned last, unsigned stride, NxsUnsignedSet * destination, const NxsUnsignedSet * taboo, NxsToken &t);
+	public:
+		static void ReadSetDefinition(NxsToken &t,
+								 const NxsLabelToIndicesMapper &,
+								 const char * setType,
+								 const char * cmd,
+								 NxsUnsignedSet * destination,
+								 const NxsUnsignedSet * taboo = NULL);
+		static void	WriteSetAsNexusValue(const NxsUnsignedSet	&, std::ostream & out);
+		static std::string	GetSetAsNexusString(const NxsUnsignedSet &s)
+			{
+			std::stringstream os;
+			NxsSetReader::WriteSetAsNexusValue(s, os);
+			//os << ' ';
+			return os.str();
+			}
+		static std::vector<unsigned> GetSetAsVector(const NxsUnsignedSet &s);
+		enum NxsSetReaderEnum	/* For use with the variable `settype' */
+			{
+			generic = 1,		/* means expect a generic set (say, characters weights) */
+			charset,			/* means expect a character set */
+			taxset				/* means expect a taxon set */
+			};
+
+						NxsSetReader(NxsToken &t, unsigned maxValue, NxsUnsignedSet &iset, NxsBlock &nxsblk, unsigned type);
+
+		bool			Run();
+		void			WriteAsNexusValue(std::ostream & out) const
+			{
+			WriteSetAsNexusValue(nxsset, out);
+			}
+	protected:
+
+		bool			AddRange(unsigned first, unsigned last, unsigned modulus = 0);
+
+	private:
+
+		unsigned		GetTokenValue();
+
+		NxsBlock		█		/* reference to the block object used for looking up labels */
+		NxsToken		&token;		/* reference to the token being used to parse the NEXUS data file */
+		NxsUnsignedSet	&nxsset;	/* reference to the NxsUnsignedSet set being read */
+		unsigned		max;		/* maximum number of elements in the set */
+		unsigned		settype;	/* the type of set being read (see the NxsSetReaderEnum enumeration) */
+	};
+
+typedef NxsSetReader SetReader;
+
+#endif
diff --git a/ncl/nxsstring.cpp b/ncl/nxsstring.cpp
new file mode 100644
index 0000000..84c8023
--- /dev/null
+++ b/ncl/nxsstring.cpp
@@ -0,0 +1,1041 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis and Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <climits>
+#include <cstdarg>
+#include <cmath>
+#include <cfloat>
+#include <cstdlib>
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsstring.h"
+
+using namespace std;
+
+// splits a string by whitespace and push the graphical strings to the back of r.
+//	Leading and trailing whitespace is lost ( there will be no empty strings added
+//		to the list.
+void NxsString::split(const std::string &s, std::list<std::string> * r)
+	{
+	NCL_ASSERT(r);
+	if (r == NULL)
+		return;
+	std::string current;
+	for (std::string::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt)
+		{
+		const char c = *sIt;
+		if (isgraph(c))
+			current.append(1, c);
+		else if (!current.empty())
+			{
+			r->push_back(current);
+			current.clear();
+			}
+		}
+	if (!current.empty())
+		r->push_back(current);
+	}
+
+int NxsString::index_in_vector(const std::string &t, const std::vector<std::string> &v)
+	{
+	std::vector<std::string>::const_iterator vIt = v.begin();
+	int i = 0;
+	for (; vIt != v.end(); ++vIt, ++i)
+		{
+		if (t == *vIt)
+			return i;
+		}
+	return -1;
+	}
+
+int NxsString::index_in_array(const std::string &t, const char * * v, const unsigned n)
+	{
+	if (n > 0 && v)
+		{
+		for (int i = 0; i < (int) n; ++i)
+			{
+			if (v[i] && t == v[i])
+				return i;
+			}
+		}
+	return -1;
+	}
+
+
+/// Strips  whitespace from the front and end of a string
+std::string NxsString::strip_surrounding_whitespace(const std::string & s)
+	{
+	std::string l = strip_leading_whitespace(s);
+	return strip_trailing_whitespace(l);
+	}
+
+std::string NxsString::strip_leading_whitespace(const std::string & s)
+	{
+	std::string	t;
+	t.reserve(s.length());
+	bool graphFound = false;
+	for (std::string::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt)
+		{
+		if (graphFound || isgraph(*sIt))
+			{
+			t.push_back(*sIt);
+			graphFound = true;
+			}
+		}
+	return t;
+	}
+
+
+std::string NxsString::strip_trailing_whitespace(const std::string & s)
+	{
+	std::string	t;
+	t.reserve(s.length());
+	bool graphFound = false;
+	for (std::string::const_reverse_iterator sIt = s.rbegin(); sIt != s.rend(); ++sIt)
+		{
+		if (graphFound || isgraph(*sIt))
+			{
+			t.push_back(*sIt);
+			graphFound = true;
+			}
+		}
+	return std::string(t.rbegin(), t.rend());
+	}
+
+/// Strips all whitespace
+std::string NxsString::strip_whitespace(const std::string & s)
+	{
+	std::string	t;
+	t.reserve(s.length());
+	for (std::string::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt)
+		{
+		if (isgraph(*sIt))
+			t.push_back(*sIt);
+		}
+	return t;
+	}
+
+/*!
+	Returns true if `o` points to a string that represents a long (and `o` has no other characters than the long).
+	if n is not NULL, then when the function returns true, *n will be the long.
+*/
+bool NxsString::to_long(const char *o, long *n)
+	{
+	if (o == NULL)
+		return false;
+	if (strchr("0123456789-+",*o) != NULL) // strtol skips leading whitespace, but we don't  do that in
+		{
+		char * pEnd;
+		const long i = strtol (o, &pEnd, 10);
+		if (*pEnd != '\0')
+			return false;
+		if (n != NULL)
+			*n = i;
+		return true;
+		}
+	return false;
+	}
+
+/*!
+	Returns true if `o` points to a string that represents a double (and `o` has no other characters than the long).
+	if n is not NULL, then when the function returns true, *n will be the long.
+*/
+bool NxsString::to_double(const char *o, double *n)
+	{
+	if (o == NULL)
+		return false;
+	if (strchr("0123456789-.+",*o) != NULL ) // strtol skips leading whitespace, but we don't  do that in
+		{
+		char * pEnd;
+		const double i = strtod (o, &pEnd);
+		if (*pEnd != '\0')
+			return false;
+		if (n != NULL)
+			*n = i;
+		return true;
+		}
+	return false;
+	}
+
+bool NxsString::case_insensitive_equals(const char *o, const char * t)
+	{
+	if (o == 0L || t == 0L)
+		return false;
+    for (; toupper(*o) == toupper(*t); ++o, ++t)
+        {
+        if (*o == '\0')
+            return true;
+        }
+    return false;
+	}
+
+/*!
+	Capitalizes every character in s.
+*/
+std::string & NxsString::to_upper(std::string &s)
+	{
+	for (std::string::iterator sIt = s.begin(); sIt != s.end(); sIt++)
+		*sIt = (char) toupper(*sIt);
+	return s;
+	}
+/*!
+	Capitalizes every character in s.
+*/
+std::string & NxsString::to_lower(std::string &s)
+	{
+	for (std::string::iterator sIt = s.begin(); sIt != s.end(); sIt++)
+		*sIt = (char) tolower(*sIt);
+	return s;
+	}
+
+/*!
+	Appends a string representation of the supplied double to the stored string and returns a reference to itself.
+*/
+NxsString &NxsString::operator+=(
+  const double d)	/* the double value to append */
+	{
+	char tmp[81];
+
+	// Create a C-string representing the supplied double value.
+	// The # causes a decimal point to always be output.
+	//
+	std::sprintf(tmp, "%#3.6f", d);
+	unsigned tmplen = (unsigned)strlen(tmp);
+
+	// If the C-string has a lot of trailing zeros, lop them off
+	//
+	for (;;)
+		{
+		if (tmplen < 3 || tmp[tmplen-1] != '0' || tmp[tmplen-2] == '.')
+			break;
+		tmp[tmplen-1] = '\0';
+		tmplen--;
+		}
+
+	append(tmp);
+	return *this;
+	}
+
+/*!
+	Adds `n' copies of the character `c' to the end of the stored string and returns a reference to itself.
+*/
+NxsString &NxsString::AddTail(
+  char c,		/* the character to use in the appended tail */
+  unsigned n)	/* the number of times `c' is to be appended */
+	{
+	char s[2];
+	s[0] = c;
+	s[1] = '\0';
+
+	for (unsigned i = 0; i < n; i++)
+		append(s);
+
+	return *this;
+	}
+
+#if defined(_MSC_VER)
+#	pragma warning(disable:4786)
+#	pragma warning(disable:4291)
+#	if _MSC_VER >= 1500
+#		include <cstdio>
+#		if !defined(vsnprintf)
+#			define vsnprintf _vsnprintf_s
+#		endif
+#		define std::sprintf std::sprintf_s
+#   else
+#       define vsnprintf _vsnprintf
+#   endif
+#endif
+
+
+/*!
+	Appends a printf-style formatted string onto the end of this NxsString and returns the number of characters added to the
+	string. For example, the following code would result in the string s being set to "ts-tv rate ratio = 4.56789":
+>
+	double kappa = 4.56789;
+	NxsString s;
+	s.PrintF("ts-tv rate ratio = %.5f", kappa);
+>
+*/
+int NxsString::PrintF(
+  const char *formatStr,	/* the printf-style format string */
+  ...)						/* other arguments referred to by the format string */
+  	{
+  	const int kInitialBufferSize = 256;
+  	char buf[kInitialBufferSize];
+
+	// Create a pointer to the list of optional arguments
+	//
+  	va_list argList;
+
+	// Set arg_ptr to the first optional argument in argList. The
+	// second argument (formatStr) is the last non-optional argument.
+	//
+  	va_start(argList, formatStr);
+
+	// If vsnprintf returns -1, means kInitialBufferSize was not large enough.
+	// In this case, only kInitialBufferSize bytes are written.
+	//
+  	int nAdded = vsnprintf(buf, kInitialBufferSize, formatStr, argList);
+
+	// Reset the argument list pointer
+	//
+  	va_end(argList);
+
+	// Currently, if formatted string is too long to fit into the supplied buf,
+	// just adding a terminating '\0' and returning the truncated string
+	// Need to think of a better solution
+	//
+	if (nAdded  < 0 || nAdded >= kInitialBufferSize)
+		buf[kInitialBufferSize - 1] = '\0';
+
+	*this << buf;
+
+  	return nAdded;
+  	}
+
+/*!
+	Returns true if the string is a abbreviation (or complete copy) of the argument `s'.
+*/
+bool NxsString::IsStdAbbreviation(
+  const NxsString &s,	/* the string for which the stored string is potentially an abbreviation */
+  bool respectCase)		/* if true, comparison will be case-sensitive */
+  const
+	{
+	if (empty())
+		return false;
+
+	// s is the unabbreviated comparison string
+	//
+	const unsigned slen = static_cast<unsigned const>(s.size());
+
+	// t is the stored string
+	//
+	const unsigned tlen = static_cast<unsigned const>(size());
+
+	// t cannot be an abbreviation of s if it is longer than s
+	//
+	if (tlen > slen)
+		return false;
+
+	// Examine each character in t and return false (meaning "not an abbreviation")
+	// if at any point the corresponding character in s is different
+	//
+	for (unsigned k = 0; k < tlen; k++)
+		{
+		if (respectCase)
+			{
+			if ((*this)[k] != s[k])
+				return false;
+			}
+		else if (toupper((*this)[k]) != toupper(s[k]))
+			return false;
+		}
+
+	return true;
+	}
+
+/*!
+	Returns true if the stored string is a case-insensitive abbreviation (or complete copy) of `s' and the stored string
+ 	has all of the characters that are in the initial capitalized portion of `s'. For example if `s' is "KAPpa" then
+	"kappa", "kapp", or "kap" (with any capitalization pattern) will return true and all other strings will return false.
+	Always returns false if the stored string has length of zero.
+*/
+bool NxsString::IsCapAbbreviation(
+  const NxsString &s)	/* the string for which the stored string is potentially an abbreviation */
+  const
+	{
+	if (empty())
+		return false;
+
+	// s is the unabbreviated comparison string
+	//
+	const unsigned slen = static_cast<unsigned>(s.size());
+
+	// t is the stored string
+	//
+	const unsigned tlen = static_cast<unsigned>(size());
+
+	// If the stored string is longer than s then it cannot be an abbreviation of s
+	//
+	if (tlen > slen)
+		return false;
+
+	unsigned k = 0;
+	for (; k < slen; k++)
+		{
+		if (isupper(s[k]))
+			{
+			// If still in the uppercase portion of s and we've run out of characters
+			// in t, then t is not a valid abbrevation of s
+			//
+			if (k >= tlen)
+				return false;
+
+			// If kth character in t is not equal to kth character in s, then
+			// t is not an abbrevation of s
+			//
+			char tokenChar = (char)toupper((*this)[k]);
+			if (tokenChar != s[k])
+				return false;
+			}
+		else if (!isalpha(s[k]))
+			{
+			// Get here if we are no longer in the upper case portion of s and
+			// s[k] is not an alphabetic character. This section is necessary because
+			// we are dealing with a section of s that is not alphabetical and thus
+			// we cannot tell whether this should be part of the abbrevation or not
+			// (i.e. we cannot tell if it is capitalized or not). In this case, we
+			// pretend that we are still in the upper case portion of s and return
+			// false if we have run out of characters in t (meaning that the abbreviation
+			// was too short) or we find a mismatch.
+			//
+			if (k >= tlen)
+				return false;
+
+			if ((*this)[k] != s[k])
+				return false;
+			}
+		else
+			{
+			// Get here if we are no longer in the upper case portion of s and
+			// s[k] is an alphabetic character. Just break because we have determined
+			// that t is in fact a valid abbreviation of s.
+			//
+			break;
+			}
+		}
+
+	// Check the lower case portion of s and any corresponding characters in t for mismatches
+	// Even though the abbreviation is valid up to this point, it will become invalid if
+	// any mismatches are found beyond the upper case portion of s
+	//
+	for (; k < tlen; k++)
+		{
+  		const char tokenChar = (char)toupper((*this)[k]);
+  		const char otherChar = (char)toupper(s[k]);
+		if (tokenChar != otherChar)
+			return false;
+		}
+
+	return true;
+	}
+
+/*!
+	Right-justifies `x' in a field `w' characters wide, using blank spaces to fill in unused portions on the left-hand
+	side of the field. Specify true for `clear_first' to first empty the string. Assumes `w' is large enough to
+	accommodate the string representation of `x'.
+*/
+NxsString &NxsString::RightJustifyLong(
+  long x,			/* long value to right justify */
+  unsigned int w,	/* width of field */
+  bool clear_first)	/* if true, initialize string first to empty string */
+	{
+	bool x_negative = (x < 0L ? true : false);
+	unsigned long xabs = (x_negative ? (-x) : x);
+	unsigned num_spaces = w;
+
+	// If w = 10 and x = 123, we need 7 blank spaces before x
+	// log10(123) is 2.09, indicating that x is at least 10^2 = 100 but not
+	// 10^3 = 1000, thus x requires at least 3 characters to display
+	//
+	unsigned x_width = (x == 0 ? 1 :1 + (int)log10((double)xabs));
+	if (x_negative)
+		x_width++;	// for the minus sign
+
+	NCL_ASSERT(x_width <= num_spaces);
+	num_spaces -= x_width;
+
+	if (clear_first)
+		erase();
+
+	for (unsigned k = 0; k < num_spaces; k++)
+		*this += ' ';
+
+	if (x_negative)
+		*this += '-';
+
+	*this += xabs;
+	return *this;
+	}
+
+/*!
+	Right-justifies `x' in a field `w' characters wide with precision `p', using blank spaces to fill in unused
+	portions on the left-hand side of the field. Specify true for `clear_first' to first empty the string. Assumes that
+	the specified width is enough to accommodate the string representation of `x'.
+*/
+NxsString &NxsString::RightJustifyDbl(
+  double x,				/* double value to right justify */
+  unsigned w,			/* width of field */
+  unsigned p,			/* precision to use when displaying `x' */
+  bool clear_first)		/* if true, initialize stored string first to the empty string */
+	{
+	if (clear_first)
+		erase();
+
+	char fmtstr[81];
+	std::sprintf(fmtstr, "%%.%df", p);
+	NxsString tmp;
+	tmp.PrintF(fmtstr, x);
+
+	NCL_ASSERT(w >= tmp.length());
+	unsigned num_spaces = w - (unsigned)tmp.length();
+
+	for (unsigned k = 0; k < num_spaces; k++)
+		*this += ' ';
+
+	*this += tmp;
+	return *this;
+	}
+
+/*!
+	Right-justifies `s' in a field `w' characters wide, using blank spaces to fill in unused portions on the left-hand
+	side of the field. Specify true for `clear_first' to first empty the string. Assumes that the specified width is
+	enough to accommodate `s'.
+*/
+NxsString &NxsString::RightJustifyString(
+  const NxsString &s,	/* string to right justify */
+  unsigned w,			/* width of field */
+  bool clear_first)		/* if true, initialize string first to the empty string */
+	{
+	if (clear_first)
+		erase();
+
+	NCL_ASSERT(w >= s.length());
+	unsigned num_spaces = w - (unsigned)s.length();
+
+	for (unsigned k = 0; k < num_spaces; k++)
+		*this += ' ';
+
+	*this += s;
+	return *this;
+	}
+void NxsString::blanks_to_underscores(std::string &s)
+	{
+	for (std::string::iterator sIt = s.begin(); sIt != s.end(); sIt++)
+		{
+		if (*sIt == ' ')
+			*sIt =  '_';
+		}
+	}
+
+void NxsString::add_nxs_quotes(std::string &s)
+	{
+	std::string withQuotes;
+	unsigned len = (unsigned)s.length();
+	withQuotes.reserve(len + 4);
+	withQuotes.append(1,'\'');
+	for (std::string::const_iterator sIt = s.begin(); sIt != s.end(); sIt++)
+		{
+		withQuotes.append(1, *sIt);
+		if (*sIt == '\'')
+			withQuotes.append(1,'\'');
+		}
+	withQuotes.append(1,'\'');
+	s.swap(withQuotes);
+	}
+
+NxsString::NxsQuotingRequirements NxsString::determine_quoting_requirements(const std::string & s)
+	{
+	NxsQuotingRequirements nrq = kNoQuotesNeededForNexus;
+	for (std::string::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt)
+		{
+		if (!isgraph(*sIt))
+			{
+			if (*sIt != ' ')
+				return kSingleQuotesNeededForNexus;
+			nrq  = kUnderscoresSufficeForNexus;
+			}
+		else if (strchr("(){}\"-]/\\,;:=*`+<>", *sIt) != NULL)
+			{
+			// Get here if c is any NEXUS punctuation mark except left square bracket ([) or apostrophe (').
+			// [ and ' never get returned as punctuation by NxsToken,
+			// so we should never encounter them here.
+			//
+			return (s.length() > 1 ? kSingleQuotesNeededForNexus : kNoQuotesNeededForNexus);
+			}
+		else if (strchr("\'[_", *sIt) != NULL)
+			{
+			// Get here if c is either an apostrophe or left square bracket. Quotes are needed if one of these
+			// characters is all there is to this string
+			//
+			return kSingleQuotesNeededForNexus;
+			}
+		}
+	return nrq;
+	}
+
+/*!
+	Returns true if the string needs to be surrounded by single-quotes to make it a single nexus token.
+*/
+bool NxsString::QuotesNeeded() const
+	{
+	for (NxsString::const_iterator sIt = begin(); sIt != end(); sIt++)
+		{
+		char c = (*sIt);
+		if (!isgraph(c))
+			return true;
+		else if (strchr("(){}\"-]/\\,;:=*`+<>", c) != NULL && length() > 1)
+			return true;
+		else if (c == '\'' || c == '_' || c == '[')
+			return true;
+		}
+	return false;
+	}
+
+/*!
+	Converts any blank spaces found in the stored string to the underscore character.
+*/
+NxsString &NxsString::BlanksToUnderscores()
+	{
+	unsigned len = (unsigned)length();
+	for (unsigned k = 0; k < len; k++)
+		{
+		char &ch = at(k);
+		if (ch == ' ')
+			ch = '_';
+		}
+	return *this;
+	}
+
+/*!
+	Converts any underscore characters found in the stored string to blank spaces.
+*/
+NxsString &NxsString::UnderscoresToBlanks()
+	{
+	unsigned len = (unsigned)length();
+	for (unsigned k = 0; k < len; k++)
+		{
+		char &ch = at(k);
+		if (ch == '_')
+			ch = ' ';
+		}
+	return *this;
+	}
+
+/*!
+	Shortens stored string to `n' - 3 characters, making the last three characters "...". If string is already less than
+	`n' characters in length, this function has no effect. This is useful when it is desirable to show some of the
+	contents of a string, even when the string will not fit in its entirety into the space available for displaying it.
+	Assumes that `n' is at least 4.
+*/
+NxsString &NxsString::ShortenTo(
+  unsigned n)	/* maximum number of characters available for displaying the string */
+	{
+	NCL_ASSERT(n > 3);
+	if (length() <= static_cast<unsigned>(n))
+		return *this;
+
+	NxsString s;
+	for (NxsString::iterator sIt = begin(); sIt != end(); sIt++)
+		{
+		s += (*sIt);
+		if (s.length() >= n - 3)
+			break;
+		}
+	s += "...";
+
+	*this = s;
+	return *this;
+	}
+
+
+/*!
+	Returns true if the stored string can be interpreted as a double value, and returns false otherwise.
+*/
+bool NxsString::IsADouble() const
+	{
+	const char	*str			= c_str();
+	unsigned	i				= 0;
+	bool		hadDecimalPt	= false;
+	bool		hadExp			= false;
+	bool		hadDigit		= false;
+	bool		hadDigitInExp	= false;
+
+	//	First char can be -
+	//
+	if (str[i]=='-' || str[i] == '+')
+		i++;
+
+	while (str[i])
+		{
+		if (isdigit(str[i]))
+			{
+			//	Digits are always OK
+			//
+			if (hadExp)
+				hadDigitInExp = true;
+			else
+				hadDigit = true;
+			}
+		else if (str[i] == '.')
+			{
+			//	One decimal point is allowed and it must be before the exponent
+			//
+			if (hadExp || hadDecimalPt)
+				return false;
+			hadDecimalPt = true;
+			}
+		else if (str[i] == 'e' || str[i] == 'E')
+			{
+			//	One e is allowed, but it must be after at least one digit
+			//
+			if (hadExp || !hadDigit)
+				return false;
+			hadExp = true;
+			}
+		else if (str[i] == '-')
+			{
+			//	Another - is allowed if it is preceded by e
+			//
+			if (!hadExp || (str[i-1] != 'e' && str[i-1] != 'E')	)
+				return false;
+			}
+		else
+			return false;
+		i++;
+		}
+
+	if (hadExp)
+		{
+		if (hadDigitInExp)
+			return true;
+		return false;
+		}
+
+	if (hadDigit)
+		return true;
+	return false;
+	}
+
+/*!
+	Returns true if stored string can be interpreted as a long integer.
+*/
+bool NxsString::IsALong() const
+	{
+	const char *str	= c_str();
+	unsigned i		= 0;
+
+	//	First char can be -
+	//
+	if (str[i]=='-')
+		i++;
+
+	if (!isdigit(str[i]))
+		return false;
+
+	while (str[i])
+		{
+		if (!isdigit(str[i]))
+			return false;
+		i++;
+		}
+
+	return true;
+	}
+
+/*!
+	Returns true if the stored string is a non-case-sensitive copy of the argument `s'. Note: will return true if both the
+	stored string and `s' are empty strings.
+*/
+bool NxsString::EqualsCaseInsensitive(
+  const NxsString &s)	/* the comparison string */
+  const
+	{
+	unsigned k;
+	unsigned slen = (unsigned)s.size();
+	unsigned tlen = (unsigned)size();
+	if (slen != tlen)
+		return false;
+
+	for (k = 0; k < tlen; k++)
+		{
+  		if ((char)toupper((*this)[k]) != (char)toupper(s[k]))
+			return false;
+		}
+
+	return true;
+	}
+
+/*!
+	Creates a string representation of the hexadecimal version of the long integer `p'. For example, if `p' equals 123,
+	and if 2 was specified for `nFours', the resulting string would be "7B". If 4 was specified for `nFours', then the
+	resulting string would be "007B".
+*/
+NxsString NxsString::ToHex(
+  long p,			/* the value to display in hexadecimal */
+  unsigned nFours)	/* the number of hexadecimal digits to display */
+	{
+	NxsString s;
+	char decod[] = "0123456789ABCDEF";
+	for (int i = nFours - 1; i >= 0 ; i--)
+		{
+		unsigned long k = (p >> (4*i));
+		unsigned long masked = (k & 0x000f);
+		s += decod[masked];
+		}
+	return s;
+	}
+
+/*!
+	Checks to see if the stored string begins with upper case letters and, if so, returns all of the contiguous capitalized
+	prefix. If the stored string begins with lower case letters, an empty string is returned.
+*/
+NxsString NxsString::UpperCasePrefix() const
+	{
+	NxsString x;
+	unsigned i = 0;
+	while (i < size() && isupper((*this)[i]))
+		x += (*this)[i++];
+	return x;
+	}
+
+/*!
+	Converts the stored string to an unsigned int using the standard C function strtol, throwing NxsX_NotANumber if the
+	conversion fails. Returns UINT_MAX if the number is too large to fit in an unsigned (or was a negative number).
+*/
+unsigned NxsString::ConvertToUnsigned() const
+	{
+	long l = ConvertToLong();
+	if (l < 0 || l >= (long) INT_MAX)
+		return UINT_MAX;
+	return static_cast<unsigned> (l);
+	}
+
+/*!
+	Converts the stored string to an int using the standard C function strtol, throwing NxsX_NotANumber if the conversion
+	fails. Returns INT_MAX if the number is too large to fit in an int or -INT_MAX if it is too small.
+*/
+int NxsString::ConvertToInt() const
+	{
+	long l = ConvertToLong();
+	if (l == LONG_MAX || l > INT_MAX)
+		return INT_MAX;
+	if (l == -LONG_MAX || l <-INT_MAX)
+		return -INT_MAX;
+	return static_cast<int> (l);
+	}
+
+/*!
+	Converts the stored string to a long using the standard C function strtol, throwing NxsX_NotANumber if the conversion
+	fails.
+*/
+long NxsString::ConvertToLong() const
+	{
+	if (length() == 0 || !(isdigit(at(0)) || at(0) == '-'))
+		throw NxsX_NotANumber();
+	const char *b = c_str();
+	char *endP;
+	long l = strtol(b, &endP, 10);
+#if defined(_MSC_VER)
+	if ((l == 0 && (endP - b) == 0))
+		throw NxsX_NotANumber();
+#else
+	if (l == 0 && endP == b)
+		throw NxsX_NotANumber();
+#endif
+	return l;
+	}
+
+/*!
+	Converts the stored string to a double using the standard C function strtod, throwing NxsX_NotANumber if the conversion
+	fails. Returns DBL_MAX or -DBL_MAX if the number is out of bounds.
+*/
+double NxsString::ConvertToDouble() const
+	{
+	if (length() == 0)
+		throw NxsX_NotANumber();
+
+	char ch = at(0);
+	if (isdigit(ch) || ch == '-' || ch == '.'|| toupper(ch) == 'E')
+		{
+		const char *b = c_str();
+		char *endP;
+		double d = strtod(b, &endP);
+#if defined(_MSC_VER)
+		if ((d == 0.0 && (endP - b) == 0))
+			throw NxsX_NotANumber();
+#else
+		if (d == 0.0 && endP == b)
+			throw NxsX_NotANumber();
+#endif
+		if (d == HUGE_VAL)
+			return DBL_MAX;
+		if (d == -HUGE_VAL)
+			return -DBL_MAX;
+		return d;
+		}
+	throw NxsX_NotANumber();
+#if defined (DEMANDS_UNREACHABLE_RETURN)
+	return DBL_MAX;
+#endif
+	}
+
+/*!
+	Transforms the vector of NxsString objects by making them all lower case and then capitalizing the first portion of
+	them so that the capitalized portion is enough to uniquely specify each. Returns true if the strings are long enough
+	to uniquely specify each. Horrendously bad algorithm, but shouldn't be called often.
+*/
+bool SetToShortestAbbreviation(
+  NxsStringVector	&strVec,		/* vector of NxsString objects */
+  bool 				allowTooShort)	/* */
+	{
+	NxsStringVector upperCasePortion;
+	unsigned i;
+	for (i = 0; i < strVec.size(); i++)
+		{
+		// Change the next string to lower case
+		//
+		strVec[i].ToLower();
+
+		unsigned prefLen = 0;
+		NxsString pref;
+
+		if (prefLen >= strVec[i].size())
+			return false;
+		pref += (char) toupper(strVec[i][prefLen++]);
+		bool moreChars = true;
+
+		// Keep adding letters from the current string until pref is unique.
+		// Then add this pref to upperCasePortion (vector of previous prefs)
+		//
+		for (;moreChars;)
+			{
+			unsigned prevInd = 0;
+			for (; prevInd < upperCasePortion.size(); prevInd++)
+				{
+				if (pref == upperCasePortion[prevInd])
+					{
+					// 	Conflict  - both abbreviations need to grow
+					//
+					if (prefLen >= strVec[i].size())
+						{
+						if (allowTooShort)
+							{
+							if (prefLen < strVec[prevInd].size())
+								upperCasePortion[prevInd] += (char) toupper(strVec[prevInd][prefLen]);
+							moreChars = false;
+							break;
+							}
+						else
+							return false;
+						}
+					pref += (char) toupper(strVec[i][prefLen]);
+					if (prefLen >= strVec[prevInd].size())
+						{
+						if (allowTooShort)
+							{
+							prevInd = 0;
+							prefLen++;
+							break;
+							}
+						else
+							return false;
+						}
+					upperCasePortion[prevInd] += (char) toupper(strVec[prevInd][prefLen++]);
+					prevInd = 0;
+					break;
+					}
+				else
+					{
+					unsigned j;
+					for (j = 0; j < prefLen; j++)
+						{
+						if (pref[j] != upperCasePortion[prevInd][j])
+							break;
+						}
+					if (j == prefLen)
+						{
+						//	pref agrees with the first part of another abbreviation, lengthen it.
+						//
+						if (prefLen >= strVec[i].size())
+							{
+							if (allowTooShort)
+								{
+								moreChars = false;
+								break;
+								}
+							else
+								return false;
+							}
+						pref += (char) toupper(strVec[i][prefLen++]);
+						break;
+						}
+					}
+				}
+			if (prevInd == upperCasePortion.size() || !moreChars)
+				{
+				// Made it all the way through with no problems, add this
+				// prefix as command i's upper case portion
+				//
+				upperCasePortion.push_back(pref);
+				break;
+				}
+			}
+		}
+
+	for (i = 0; i < strVec.size(); i++)
+		{
+		for (unsigned j = 0; j < upperCasePortion[i].size(); j++)
+			strVec[i][j] = upperCasePortion[i][j];
+		}
+
+	return true;
+	}
+
+/*!
+	Returns a vector of NxsString objects that match the entire `testStr'.
+*/
+NxsStringVector GetVecOfPossibleAbbrevMatches(
+  const NxsString		&testStr,		/* string to match */
+  const NxsStringVector	&possMatches)	/* vector of possible matches */
+	{
+	NxsStringVector matches;
+	for (unsigned i = 0; i < possMatches.size(); i++)
+		{
+		if (testStr.Abbreviates(possMatches[i]))
+			matches.push_back(possMatches[i]);
+		}
+	return matches;
+	}
+
+/*!
+	Written to make it easy to initialize a vector of strings. Similar to the perl split function. Converts a string like
+	this -- "A|bro|ken strin|g" -- to a vector of strings with four elements:  "A", "bro", "ken string", and "g".
+*/
+NxsStringVector BreakPipeSeparatedList(
+  const NxsString &strList)	/* the string submitted for splitting */
+  	{
+	NxsString::const_iterator p = strList.begin();
+	NxsString ss;
+	NxsStringVector retVec;
+	for (;;)
+		{
+		bool done = (p == strList.end());
+		if (done || (*p == '|'))
+			{
+			retVec.push_back(ss);
+			ss.clear();
+			if (done)
+				break;
+			p++;
+			}
+		ss += *p;
+		p++;
+		}
+	return retVec;
+	}
diff --git a/ncl/nxsstring.h b/ncl/nxsstring.h
new file mode 100644
index 0000000..7509ac0
--- /dev/null
+++ b/ncl/nxsstring.h
@@ -0,0 +1,742 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis and Mark T. Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSSTRING_H
+#define NCL_NXSSTRING_H
+
+
+#include <cstring>
+#include <cstdio>
+#include <functional>
+#include <ostream>
+#include <string>
+#include "ncl/nxsdefs.h"
+
+
+
+
+
+// Define HAVE_NCL_NXSSTRING_ENDL if your code needs it
+#if ! defined (HAVE_NCL_NXSSTRING_ENDL)
+#   define HIDE_NCL_NXSSTRING_ENDL
+#else
+#   warning "use of endl with NxsString instances has been deprecated"
+#endif
+class IndexSet;
+
+/*!
+	A string class for use with the Nexus Class Library. NxsString inherits most of its functionality from the standard
+	template library class string, adding certain abilities needed for use in NCL, such as the ability to discern
+	whether a short string represents an abbreviation for the string currently stored. Another important addition is
+	the member function PrintF, which accepts a format string and an arbitrary number of arguments, allowing a string
+	to be built in a manner similar to the standard C function printf. Many operators are also provided for appending
+	numbers to the ends of strings, an ability which is very useful for producing default labels (e.g. taxon1, taxon2,
+	etc.).
+*/
+class NxsString
+  : public std::string
+	{
+	public:
+		enum NxsQuotingRequirements
+			{
+			kNoQuotesNeededForNexus = 0, /// this enum value is kept equivalent to false
+			kSingleQuotesNeededForNexus, /// punctuation or non-space whitespace characters present
+			kUnderscoresSufficeForNexus  /// No nexus token-breakers
+			};
+
+		class NxsX_NotANumber {};	/* exception thrown if attempt to convert string to a number fails */
+		static bool case_insensitive_equals(const char *o, const char * t);
+		static bool to_long(const char *c, long *n);
+		static bool to_double(const char *c, double *n);
+		static std::string strip_leading_whitespace(const std::string & s);
+		static std::string strip_trailing_whitespace(const std::string & s);
+		static std::string strip_surrounding_whitespace(const std::string & s);
+		static std::string strip_whitespace(const std::string & s);
+		static void split(const std::string &s, std::list<std::string> *);
+		static std::string get_upper(const std::string &s)
+			{
+			std::string t(s);
+			to_upper(t);
+			return t;
+			}
+		static std::string & to_lower(std::string & s);
+		static std::string & to_upper(std::string & s);
+		static NxsQuotingRequirements determine_quoting_requirements(const std::string &);
+		static void blanks_to_underscores(std::string &s);
+		static void add_nxs_quotes(std::string &s);
+		static int index_in_vector(const std::string &t, const std::vector<std::string> &v);
+		static int index_in_array(const std::string &t, const char * * v, const unsigned n);
+
+		enum CmpEnum				/* enum that is used to specify string comparison modes */
+			{
+			respect_case,
+			no_respect_case,
+			abbrev
+			};
+
+							NxsString();
+							NxsString(const char *s);
+							NxsString(const NxsString &s);
+
+		static std::string	GetEscaped(const std::string &s);
+		static std::string	GetEscapedInt(const int &v);
+		static std::string	GetEscapedDouble(const double &v);
+		//	Accessors
+		//
+		bool				Abbreviates(const NxsString &s, NxsString::CmpEnum mode = NxsString::no_respect_case) const;
+		unsigned			ConvertToUnsigned() const;
+		int					ConvertToInt() const;
+		long				ConvertToLong() const;
+		double				ConvertToDouble() const;
+		bool				Equals(const NxsString &s, NxsString::CmpEnum mode = respect_case) const;
+		bool				EqualsCaseInsensitive(const NxsString &s) const;
+		NxsString			GetQuoted() const;
+		bool				IsADouble() const;
+		bool				IsALong() const;
+		bool				IsCapAbbreviation(const NxsString &s) const;
+		bool				IsInVector(const NxsStringVector &s, NxsString::CmpEnum mode = respect_case) const;
+		bool				IsStdAbbreviation(const NxsString &s, bool respectCase) const;
+		static bool			IsNexusPunctuation(const char c);
+		static bool         IsNewickPunctuation(const char c);
+		bool				QuotesNeeded() const;
+		NxsString 			UpperCasePrefix() const;
+		friend std::ostream &operator<<(std::ostream &out, const NxsString &s);
+
+		//	Modifiers
+		//
+		//NxsString		   &operator=(const NxsString &s);
+		NxsString			&operator=(char);
+		NxsString			&operator=(const char *s);
+		NxsString			&operator+=(const char *s);
+		NxsString			&operator+=(const std::string &s);
+		NxsString			&operator+=(const char c);
+		NxsString			&operator+=(const int i);
+		NxsString			&operator+=(unsigned i);
+		NxsString			&operator+=(unsigned long i);
+		NxsString			&operator+=(const long l);
+		NxsString			&operator+=(const double d);
+		NxsString			&operator+=(const IndexSet &d);
+		NxsString			&operator<<(int i);
+		NxsString			&operator<<(unsigned i);
+		NxsString			&operator<<(long l);
+		NxsString			&operator<<(unsigned long l);
+		NxsString			&operator<<(double d);
+		NxsString			&operator<<(const char *c);
+		NxsString			&operator<<(char c);
+		NxsString			&operator<<(const std::string &s);
+		NxsString			&operator<<(const IndexSet &s);
+#       if ! defined(HIDE_NCL_NXSSTRING_ENDL)
+            NxsString			&operator<<(NxsString &(*funcPtr)(NxsString	&));
+#       endif
+
+		// Functions that should be in base class string but aren't
+		void				clear();
+
+		int					PrintF(const char *formatStr, ...);
+
+		unsigned char		*p_str(unsigned char *) const;
+
+		NxsString			&AddQuotes();
+		NxsString 			&AddTail(char c, unsigned n);
+		NxsString			&NumberThenWord(unsigned i, NxsString s);
+		NxsString 			&ShortenTo(unsigned n);
+		NxsString			&AppendDouble(unsigned minFieldFormat, unsigned precFormat, double x);
+		NxsString 			&Capitalize();
+
+		NxsString 			&RightJustifyString(const NxsString &s, unsigned w, bool clear_first = false);
+		NxsString 			&RightJustifyLong(long x, unsigned w, bool clear_first = false);
+		NxsString 			&RightJustifyDbl(double x, unsigned w, unsigned p, bool clear_first = false);
+
+		NxsString 			&ToLower()
+			{
+			to_lower(*this);
+			return *this;
+			}
+		NxsString 			&ToUpper()
+			{
+			to_upper(*this);
+			return *this;
+			}
+
+
+		NxsString 			&BlanksToUnderscores();
+		NxsString 			&UnderscoresToBlanks();
+
+		//	Debugging
+		//
+		static NxsString 	ToHex(long p, unsigned nFours);
+	};
+
+#if defined (NXS_SUPPORT_OLD_NAMES)
+	typedef NxsString nxsstring;
+#endif
+
+
+/*!
+	Replaces the stored string with a copy of itself surrounded by single quotes (single quotes inside the string are
+	converted to the '' pair of characters that signify a single quote). Returns a reference to itself.
+*/
+inline NxsString &NxsString::AddQuotes()
+	{
+	add_nxs_quotes(*this);
+	return *this;
+	}
+
+inline std::string	NxsString::GetEscapedDouble(const double &v)
+	{
+	NxsString s;
+	s << v;
+	return NxsString::GetEscaped(s);
+	}
+
+inline std::string	NxsString::GetEscapedInt(const int &v)
+	{
+	NxsString s;
+	s << v;
+	return NxsString::GetEscaped(s);
+	}
+
+inline std::string	NxsString::GetEscaped(const std::string &s)
+	{
+	NxsQuotingRequirements r = determine_quoting_requirements(s);
+	if (r == kNoQuotesNeededForNexus)
+		return s;
+	std::string x(s.c_str());
+	if (r == kUnderscoresSufficeForNexus)
+		blanks_to_underscores(x);
+	else
+		add_nxs_quotes(x);
+	return x;
+	}
+
+
+/*!
+	Function object (Unary Predicate functor) that stores one string. The ()(const NxsString &) operator then returns the
+	result of a case-insensitive compare. Useful for STL find algorithms. Could be made faster than sequential case
+	insenstive comparisons, because the string stored in the object is just capitalized once.
+*/
+class NStrCaseInsensitiveEquals
+	{
+	public :
+
+					NStrCaseInsensitiveEquals(const NxsString &s);
+		bool		operator()(const NxsString &s);
+
+	protected :
+
+		NxsString	compStr;
+	};
+
+/*!
+	Function object (Unary Predicate functor) that stores one string. The ()(const NxsString &) operator then returns the
+	result of a case-sensitive compare. Useful for STL find algorithms.
+*/
+class NStrCaseSensitiveEquals
+	{
+	public :
+
+					NStrCaseSensitiveEquals(const NxsString &s);
+		bool		operator()(const NxsString &s) const;
+
+	protected :
+
+		NxsString	compStr;
+	};
+
+/*!
+	Binary function class that performs case-Insensitive string compares.
+*/
+struct NxsStringEqual
+  : public std::binary_function<NxsString, NxsString, bool>
+	{
+	bool operator()(const NxsString &x, const NxsString &y) const;
+	};
+
+// ############################# start NStrCaseInsensitiveEquals functions ##########################
+
+/*!
+	Creates a function object for case-insensitive comparisons of `s' to a container of strings.
+*/
+inline NStrCaseInsensitiveEquals::NStrCaseInsensitiveEquals(
+  const NxsString &s)	/* the string to be compared */
+	{
+	compStr = s;
+	compStr.Capitalize();
+	}
+
+/*!
+	Returns the result of a case-sensitive compare of `s' and the string stored when the NStrCaseInsensitiveEquals object
+	was created. Could be made more efficient (currently capitalizes the entire argument even though the first character may
+	be wrong).
+*/
+inline bool NStrCaseInsensitiveEquals::operator()(
+  const NxsString &s)	/* the string to be compared */
+	{
+	if (s.length() == compStr.length())
+		{
+		NxsString capS(s);
+		capS.Capitalize();
+		return capS == compStr;
+		}
+	return false;
+	}
+
+// ############################# start NStrCaseSensitiveEquals functions ##########################
+
+/*!
+	Creates a function object for case-sensitive comparisons of `s' to a container of strings.
+*/
+inline NStrCaseSensitiveEquals::NStrCaseSensitiveEquals(
+  const NxsString &s)	/* the string that all other strings will be compared to when the (const NxsString &) operator is called */
+	{
+	compStr = s;
+	}
+
+/*!
+	Returns the result of a case-sensitive compare of `s' and the string stored when the NStrCaseSensitiveEquals was
+	created.
+*/
+inline bool NStrCaseSensitiveEquals::operator()(
+  const NxsString &s)	/* the string to be compared */
+  const
+	{
+	return (compStr == s);
+	}
+
+// ############################# start NxsStringEqual functions ##########################
+
+/*!
+	Returns true if the strings `x' and `y' are identical (NOT case sensitive)
+*/
+inline bool NxsStringEqual::operator()(
+  const NxsString &x,	/* first string */
+  const NxsString &y)	/* second string to be compared with `x' */
+  const
+	{
+	return x.EqualsCaseInsensitive(y);
+	}
+
+// ############################# start NxsString functions ##########################
+
+/*!
+	The default constructor.
+*/
+inline NxsString::NxsString()
+	{
+	}
+
+/*!
+	Returns a single-quoted version of the NxsString. The calling object is not altered. Written for ease of use. Simply
+	copies the stored string, then returns the copy after calling its AddQuotes function.
+*/
+inline NxsString NxsString::GetQuoted()
+  const
+	{
+	NxsString s(*this);
+	s.AddQuotes();
+	return s;
+	}
+
+/*!
+	Most containers in the standard template library can be completely erased using the clear function, but none is
+	provided for the class string and hence is provided here.
+*/
+inline void NxsString::clear()
+	{
+	erase();
+	}
+
+/*!
+	Returns true if the Equals comparison function is true for this or any element in the vector `s'.
+*/
+inline bool NxsString::IsInVector(
+  const NxsStringVector &s, /* the vector of NxsString objects to be searched */
+  NxsString::CmpEnum mode)	/* the argument passed to the Equals function, which is called for every element in the vector `s' */
+  const
+	{
+	for (NxsStringVector::const_iterator sIt = s.begin(); sIt != s.end(); sIt++)
+		{
+		if (Equals(*sIt, mode))
+			return true;
+		}
+	return false;
+	}
+
+/*!
+	A copy constructor taking a C-string argument.
+*/
+inline NxsString::NxsString(
+  const char *s)	/* the C-string that forms the basis for the new NxsString object */
+	{
+	assign(s);
+	}
+
+/*!
+	A copy constructor taking a NxsString reference argument.
+*/
+inline NxsString::NxsString(
+  const NxsString &s)	/* reference to a NxsString to be used to create this copy */
+  :std::string()
+	{
+	assign(s);
+	}
+
+/*!
+	Sets the stored string equal to the supplied C-string `s'.
+*/
+inline NxsString &NxsString::operator=(
+  const char *s)	/* the string for comparison */
+	{
+	assign(s);
+	return *this;
+	}
+
+//inline NxsString& NxsString::operator=(
+//  const NxsString &s)
+//	{
+//	assign(s);
+//	return *this;
+//	}
+
+/*!
+	Appends the supplied C-string `s' to the stored string.
+*/
+inline NxsString &NxsString::operator+=(
+  const char *s)	/* the C-string to be appended */
+	{
+	append(std::string(s));
+	return *this;
+	}
+
+/*!
+	Appends the characters in the supplied NxsString reference `s' to the stored string.
+*/
+inline NxsString &NxsString::operator+=(
+  const std::string &s)	/* the string to append */
+	{
+	append(s);
+	return *this;
+	}
+
+/*!
+	Appends the character `c' to the stored string.
+*/
+inline NxsString &NxsString::operator+=(
+  const char c)	/* the character to append */
+	{
+	char s[2];
+	s[0] = c;
+	s[1] = '\0';
+	append(std::string(s));
+	return *this;
+	}
+
+/*!
+	Sets the stored std::string to the supplied character 'c'.
+*/
+inline NxsString &NxsString::operator=(
+  char c)	/* the character to which the stored std::string should be set */
+	{
+	clear();
+	return (*this += c);
+	}
+
+/*!
+	Uses the standard C sprintf function to append the character representation of the supplied integer i' to the stored
+	string (format code %d). For example, if the stored string is "taxon" and `i' is 9, the result is "taxon9".
+*/
+inline NxsString &NxsString::operator+=(
+  const int i)	/* the int to append */
+	{
+	char tmp[81];
+	std::sprintf(tmp, "%d", i);
+	append(tmp);
+	return *this;
+	}
+
+/*!
+	Capitalizes all lower case letters in the stored string by calling ToUpper.
+*/
+inline NxsString &NxsString::Capitalize()
+	{
+	ToUpper();
+	return *this;
+	}
+
+/*!
+	Returns true if the stored string is an abbreviation (or complete copy) of the supplied string `s'.
+*/
+inline bool NxsString::Abbreviates(
+  const NxsString	&s,		/* the full comparison string */
+  NxsString::CmpEnum	mode)	/* if equal to abbrev, a non-case-sensitive comparison will be made, otherwise comparison will respect case */
+  const
+	{
+	if (mode == NxsString::abbrev)
+		return IsCapAbbreviation(s);
+	else
+		return IsStdAbbreviation(s, mode == respect_case);
+	}
+
+/*!
+	Uses standard C function std::sprintf to append the unsigned integer `i' to the stored string (format code %u).
+*/
+inline NxsString& NxsString::operator+=(
+  unsigned i)	/* the integer to be appended */
+	{
+	char tmp[81];
+	std::sprintf(tmp, "%u", i);
+	append(tmp);
+	return *this;
+	}
+
+/*!
+	Uses standard C function std::sprintf to append the long integer `l' to the stored string (format code %ld).
+*/
+inline NxsString& NxsString::operator+=(
+  const long l)	/* the long integer to be appended */
+	{
+	char tmp[81];
+	std::sprintf(tmp, "%ld", l);
+	append(tmp);
+	return *this;
+	}
+
+/*!
+	Uses standard C function std::sprintf to append the unsigned long integer `l' to the stored string (format code %lu).
+*/
+inline NxsString& NxsString::operator+=(
+  const unsigned long l)	/* the unsigned long integer to be appended */
+	{
+	char tmp[81];
+	std::sprintf(tmp, "%lu", l);
+	append(tmp);
+	return *this;
+	}
+
+/*!
+	Uses the mode argument to call (and return the result of) the correct string comparison function.
+*/
+inline bool NxsString::Equals(
+  const NxsString &s,		/* the string to which *this is compared */
+  NxsString::CmpEnum mode)	/* should be one of these three: respect_case, no_respect_case or abbrev */
+  const
+	{
+	switch (mode) {
+		case NxsString::respect_case :
+			return (strcmp(this->c_str(), s.c_str()) == 0);
+		case NxsString::no_respect_case :
+			return this->EqualsCaseInsensitive(s);
+		case NxsString::abbrev :
+			return this->IsCapAbbreviation(s);
+		default :
+			NCL_ASSERT(0);// incorrect setting for mode
+		}
+	return false;
+	}
+
+# if ! defined(HIDE_NCL_NXSSTRING_ENDL)
+
+	Allows functions that take and return references to NxsString strings to be placed in a series of << operators.
+	See the NxsString endl function.
+inline NxsString &NxsString::operator<<(
+  NxsString &(*funcPtr)(NxsString &))	/* pointer to a function returning a reference to a NxsString */
+	{
+	return funcPtr(*this);
+	}
+#endif
+
+/*!
+	Returns true if `c' is any Nexus punctuation character:
+>
+	()[]{}/\,;:=*'"`-+<>
+>
+*/
+inline bool NxsString::IsNexusPunctuation(
+  const char c)	/* the character in question */
+	{
+	return (strchr("()[]{}/\\,;:=*\'\"`-+<>", c) != NULL);
+	}
+
+
+/*! Returns true if `c' is any Newick punctuation character:
+>
+	()[]':;,
+>
+List of punctuation taken from the "unquoted labels may not contain" section 
+of http://evolution.genetics.washington.edu/phylip/newick_doc.html
+
+Thanks to Andrew Lenards for pointing out the need for this when dealing with
+non-NEXUS trees.
+ parentheses, square brackets,
+        single_quotes, colons, semicolons, or commas
+*/
+inline bool NxsString::IsNewickPunctuation(
+  const char c)	/* the character in question */
+	{
+	const bool v = (strchr("()[]':;,", c) != NULL);
+	return v;
+	}
+
+
+/*!
+	Creates a new string (and returns a reference to the new string) composed of the integer `i' followed by a space and
+	then the string `s'. If `i' is not 1, then an 's' character is appended to make `s' plural. For example, if `i' were 0,
+	1, or 2, and `s' is "character", then the returned string would be "0 characters", "1 character" or "2 characters",
+	respectively. Obviously this only works if adding an 's' to the supplied string makes it plural.
+*/
+inline NxsString &NxsString::NumberThenWord(
+  unsigned i,			/* the number */
+  const NxsString s)	/* the string needing to be pluralized */
+  	{
+	(*this).erase();
+  	*this << i << ' ' << s;
+  	if (i != 1)
+  		*this << 's';
+  	return *this;
+  	}
+
+/*!
+	Another way to call the += operator (written to make it possible to use a NxsString like an std::ostream)
+*/
+inline NxsString &NxsString::operator<<(
+  int i)	/* the integer to append */
+  	{
+  	return (*this += i);
+  	}
+
+/*!
+	Another way to call the += operator (written to make it possible to use a NxsString like an std::ostream)
+*/
+inline NxsString &NxsString::operator<<(
+  unsigned i)	/* the unsigned integer to append */
+	{
+	return (*this += (int) i);
+	}
+
+/*!
+	Another way to call the += operator (written to make it possible to use a NxsString like an std::ostream)
+*/
+inline NxsString &NxsString::operator<<(
+  long l)	/* the long integer to append */
+	{
+	return (*this += l);
+	}
+
+/*!
+	Another way to call the += operator (written to make it possible to use a NxsString like an std::ostream)
+*/
+inline NxsString &NxsString::operator<<(
+  unsigned long l)	/* the unsigned long integer to append */
+	{
+	return (*this += l);
+	}
+
+/*!
+	Another way to call the += operator (written to make it possible to use a NxsString like an std::ostream)
+*/
+inline NxsString &NxsString::operator<<(
+  double d)	/* the double floating point value to append */
+	{
+	return (*this += d);
+	}
+
+/*!
+	Another way to call the += operator (written to make it possible to use a NxsString like an std::ostream)
+*/
+inline NxsString &NxsString::operator<<(
+  const char *c)	/* the C-string to append */
+	{
+	return (*this += c);
+	}
+
+/*!
+	Another way to call the += operator (written to make it possible to use a NxsString like an std::ostream)
+*/
+inline NxsString &NxsString::operator<<(
+  char c)	/* the char to append */
+	{
+	return (*this += c);
+	}
+
+/*!
+	Another way to call the += operator (written to make it possible to use a NxsString like an std::ostream)
+*/
+inline NxsString &NxsString::operator<<(
+  const std::string &s)	/* the NxsString to append */
+	{
+	return (*this += s);
+	}
+
+
+
+/*!
+	Returns string as a Pascal string (array of unsigned characters with the length in the first byte).
+*/
+inline unsigned char *NxsString::p_str(
+  unsigned char *buffer)	/* buffer to receive current string in Pascal form (i.e. length in first byte) */
+  const
+	{
+	memmove(buffer + 1, c_str(), length());
+	buffer[0] = (unsigned char)length();
+	return buffer;
+	}
+
+
+
+// ############################# start of standalone functions ##########################
+
+# if ! defined(HIDE_NCL_NXSSTRING_ENDL)
+/* "Define HIDE_NCL_NXSSTRING_ENDL to hide the dangerous definition of endl from NCLs nxsstring.h" */
+/*!
+	Appends a newline character to the string `s' and the returns a reference to `s'. Used with << operator to allow
+	strings to be written to like std::ostreams.
+*/
+inline NxsString &endl(
+  NxsString &s)	/* the string to which the newline character is to be appended */
+	{
+	return (s += '\n');
+	}
+#endif
+
+/*!
+	Appends a newline character to the string `s' and the returns a reference to `s'. Used with << operator to allow
+	strings to be written to like std::ostreams.
+*/
+inline NxsString &nxsendl(
+  NxsString &s)	/* the string to which the newline character is to be appended */
+	{
+	return (s += '\n');
+	}
+
+/*!
+	Writes the string `s' to the std::ostream `out'.
+*/
+inline std::ostream &operator<<(
+  std::ostream &out,			/* the stream to which the string `s' is to be written */
+  const NxsString &s)	/* the string to write */
+	{
+	out << s.c_str();
+	return out;
+	}
+
+NxsStringVector 	BreakPipeSeparatedList(const NxsString &strList);
+NxsStringVector 	GetVecOfPossibleAbbrevMatches(const NxsString &testStr,const NxsStringVector &possMatches);
+bool 				SetToShortestAbbreviation(NxsStringVector &strVec, bool allowTooShort = false);
+
+#endif
diff --git a/ncl/nxstaxaassociationblock.cpp b/ncl/nxstaxaassociationblock.cpp
new file mode 100644
index 0000000..898dfa3
--- /dev/null
+++ b/ncl/nxstaxaassociationblock.cpp
@@ -0,0 +1,237 @@
+ 
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <iomanip>
+#include <cassert>
+#include <climits>
+#include <cstdlib>
+
+#include "ncl/nxstaxaassociationblock.h"
+#include "ncl/nxsreader.h"
+
+using namespace std;
+
+
+NxsTaxaAssociationBlock::NxsTaxaAssociationBlock()
+    :firstTaxaBlock(0L),
+    secondTaxaBlock(0L)
+    {
+    NCL_BLOCKTYPE_ATTR_NAME = "TAXAASSOCIATION";
+	Reset();
+	}
+
+NxsTaxaBlockAPI * NxsTaxaAssociationBlock::ProcessTaxaBlockName(const NxsString & value,  NxsToken &token) const {
+    assert(this->nexusReader);
+    NxsTaxaBlockAPI * cb = this->nexusReader->GetTaxaBlockByTitle(value.c_str(), NULL);
+    if (cb == NULL)
+        {
+        errormsg = "Unknown TAXA block (";
+        errormsg += value;
+        errormsg +=") referred to in the TAXA command";
+        throw NxsException(errormsg, token);
+        }
+    return cb;
+}
+
+void NxsTaxaAssociationBlock::HandleTaxaCommand(
+  NxsToken &token)
+{
+	if (!this->nexusReader)
+		NxsNCLAPIException("No NxsReader when reading TaxaAssociation block.");
+
+	token.GetNextToken();
+	this->firstTaxaBlock = this->ProcessTaxaBlockName(token.GetTokenReference(), token);
+	token.GetNextToken();
+	if (!token.Equals(","))
+	    {
+	    errormsg << "Expecting comma in the TAXA command, found \"" << token.GetTokenReference() << "\".";
+	    throw NxsException(errormsg, token);
+	    }
+	token.GetNextToken();
+	this->secondTaxaBlock = this->ProcessTaxaBlockName(token.GetTokenReference(), token);
+    NxsToken::DemandEndSemicolon(token, this->errormsg, "TAXA");
+}
+void NxsTaxaAssociationBlock::HandleAssociatesCommand(
+  NxsToken &token)
+{
+    if (this->firstTaxaBlock == 0L || this->secondTaxaBlock == 0L)
+        {
+        errormsg << "Expecting TAXA command to precede an ASSOCIATES command.";
+	    throw NxsException(errormsg, token);
+        }
+    token.GetNextToken();
+    for (;;)
+        {
+		std::set<unsigned> fSet;
+		while (!token.IsPunctuationToken() || !(token.Equals(";") || token.Equals(",") || token.Equals("/")))
+		    {
+		    try {
+		        this->firstTaxaBlock->GetIndicesForLabel(token.GetTokenReference(), &fSet);
+                }
+            catch(...)
+                {
+                errormsg << "Unrecognized taxon \"" << token.GetTokenReference() << "\" in ASSOCIATES command";
+                throw NxsException(errormsg, token);
+                }
+            token.GetNextToken();
+		    }
+		if (!token.Equals("/"))
+		    {
+            errormsg << "Expecting / in ASSOCIATES command, found \"" << token.GetTokenReference() << "\"";
+            throw NxsException(errormsg, token);
+		    }
+
+		if (fSet.empty())
+		    {
+            errormsg << "Expecting taxon labels from the first TAXA block before the / in ASSOCIATES command.";
+            throw NxsException(errormsg, token);
+		    }
+        token.GetNextToken();
+
+		std::set<unsigned> sSet;
+		
+		while (!token.IsPunctuationToken() || !(token.Equals(";") || token.Equals(",") || token.Equals("/")))
+		    {
+		    try {
+		        this->secondTaxaBlock->GetIndicesForLabel(token.GetTokenReference(), &sSet);
+                }
+            catch(...)
+                {
+                errormsg << "Unrecognized taxon \"" << token.GetTokenReference() << "\" in ASSOCIATES command";
+                throw NxsException(errormsg, token);
+                }
+            token.GetNextToken();
+		    }
+
+		if (!(token.Equals(";") || token.Equals(",")))
+		    {
+            errormsg << "Expecting , or ; in ASSOCIATES command, found \"" << token.GetTokenReference() << "\"";
+            throw NxsException(errormsg, token);
+		    }
+
+		if (sSet.empty())
+		    {
+            errormsg << "Expecting taxon labels from the second TAXA block after the / in ASSOCIATES command.";
+            throw NxsException(errormsg, token);
+		    }
+		
+		for (std::set<unsigned>::const_iterator fIt = fSet.begin(); fIt != fSet.end(); ++fIt)
+		    {
+		    this->AddAssociation(*fIt, sSet);
+		    }
+		if (token.Equals(";"))
+		    break;
+		token.GetNextToken();
+	    }
+}
+
+void NxsTaxaAssociationBlock::Read(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	isEmpty = false;
+
+	DemandEndSemicolon(token, "BEGIN TAXAASSOCIATION");
+
+	for (;;)
+		{
+		token.GetNextToken();
+		NxsBlock::NxsCommandResult res = HandleBasicBlockCommands(token);
+		if (res == NxsBlock::NxsCommandResult(STOP_PARSING_BLOCK))
+			return;
+		if (res != NxsBlock::NxsCommandResult(HANDLED_COMMAND))
+			{
+			if (token.Equals("TAXA"))
+				HandleTaxaCommand(token);
+			else if (token.Equals("ASSOCIATES"))
+				HandleAssociatesCommand(token);
+			else
+				SkipCommand(token);
+			}
+		}
+	}
+
+void NxsTaxaAssociationBlock::Report(std::ostream &out) NCL_COULD_BE_CONST  /*v2.1to2.2 1 */
+{
+	out << '\n';
+	if (this->firstTaxaBlock && this->secondTaxaBlock)
+	    {
+        out << NCL_BLOCKTYPE_ATTR_NAME << " block contains the following:\n";
+        out << firstToSecond.size() << " associations between taxa in " << this->firstTaxaBlock->GetTitle() << " and " << this->secondTaxaBlock->GetTitle() << '\n';
+        out << secondToFirst.size() << " associations between taxa in " << this->secondTaxaBlock->GetTitle() << " and " << this->firstTaxaBlock->GetTitle() << '\n';
+	    }
+}
+
+void NxsTaxaAssociationBlock::Reset() 
+{
+	NxsBlock::Reset();
+    this->firstToSecond.clear();
+    this->secondToFirst.clear();
+    this->firstTaxaBlock = 0L;
+    this->secondTaxaBlock = 0L;
+}
+
+void NxsTaxaAssociationBlock::WriteAsNexus(std::ostream &out) const
+	{
+	if (this->firstTaxaBlock && this->secondTaxaBlock)
+	    {
+	    out << "BEGIN TAXAASSOCIATION;\n";
+        WriteBasicBlockCommands(out);
+
+        out << "    TAXA ";
+        std::string taxaBlockName = this->firstTaxaBlock->GetTitle();
+        out << NxsString::GetEscaped(taxaBlockName);
+        out << " , ";
+        taxaBlockName = this->secondTaxaBlock->GetTitle();
+        out << NxsString::GetEscaped(taxaBlockName);
+        out << ";\n";
+        
+        
+        out << "    ASSOCIATES\n        ";
+        bool firstAssoc = true;
+        for (AssociationMap::const_iterator ftsIt = this->firstToSecond.begin(); ftsIt != this->firstToSecond.end(); ++ftsIt)
+            {
+            if (!firstAssoc)
+                out << ",\n        ";
+            unsigned fTaxonInd = ftsIt->first;
+            std::string f = this->firstTaxaBlock->GetTaxonLabel(fTaxonInd);
+            out << NxsString::GetEscaped(f);
+            out << " / ";
+            const std::set<unsigned> & secSet = ftsIt->second;
+            for (std::set<unsigned>::const_iterator sIt = secSet.begin(); sIt != secSet.end(); ++sIt)
+                {
+                unsigned sTaxonInd = *sIt;
+                std::string s = this->secondTaxaBlock->GetTaxonLabel(sTaxonInd);
+                out << NxsString::GetEscaped(s) << ' ';
+                }
+            firstAssoc = false;
+            }
+        out << ";\n";
+        
+        out << "END;\n";
+        }
+	}
+
+NxsTaxaAssociationBlock *NxsTaxaAssociationBlockFactory::GetBlockReaderForID(const std::string & idneeded, NxsReader *reader, NxsToken *)
+	{
+	if (reader == NULL || idneeded != "TAXAASSOCIATION")
+		return NULL;
+	NxsTaxaAssociationBlock * nb  = new NxsTaxaAssociationBlock();
+	nb->SetImplementsLinkAPI(false);
+	return nb;
+	}
diff --git a/ncl/nxstaxaassociationblock.h b/ncl/nxstaxaassociationblock.h
new file mode 100644
index 0000000..e7bd99e
--- /dev/null
+++ b/ncl/nxstaxaassociationblock.h
@@ -0,0 +1,139 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#ifndef NCL_NXSTAXAASSOCIATIONBLOCK_H
+#define NCL_NXSTAXAASSOCIATIONBLOCK_H
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxstaxablock.h"
+
+/*! 
+*/
+class NxsTaxaAssociationBlockAPI
+  : public NxsBlock
+  {
+  public:
+		virtual NxsTaxaBlockAPI * GetFirstTaxaBlock() const = 0;
+		virtual NxsTaxaBlockAPI * GetSecondTaxaBlock() const = 0;
+		virtual std::set<unsigned> GetAssociatesForTaxonInFirstBlock(unsigned) const = 0;
+		virtual std::set<unsigned> GetAssociatesForTaxonInSecondBlock(unsigned) const = 0;
+  };
+
+/*! The default implementation of the NxsTaxaBlockAPI that is used to parse TAXA blocks into a list of
+	unique (case-insensitive) labels.
+
+*/
+class NxsTaxaAssociationBlock
+  : public NxsTaxaAssociationBlockAPI
+	{
+        typedef std::map<unsigned, std::set<unsigned> > AssociationMap;
+	public:
+							NxsTaxaAssociationBlock();
+		virtual				~NxsTaxaAssociationBlock() {}
+
+		virtual void AddAssociation(unsigned firstIndex, const std::set<unsigned> & secIndices) {
+		    std::set<unsigned> & former = this->firstToSecond[firstIndex];
+		    for (std::set<unsigned>::const_iterator sIt = secIndices.begin(); sIt != secIndices.end(); ++sIt) {
+		        const unsigned & secIndex = *sIt;
+		        former.insert(secIndex);
+		        this->secondToFirst[secIndex].insert(firstIndex);
+		    }
+		}
+		
+		
+		virtual void SetFirstTaxaBlock(NxsTaxaBlockAPI *f) {
+		    NxsTaxaBlockAPI * s = this->secondTaxaBlock;
+		    this->Reset();
+		    this->secondTaxaBlock = s;
+		    this->firstTaxaBlock = f;
+		}
+		virtual NxsTaxaBlockAPI * GetFirstTaxaBlock() const {
+		    return this->firstTaxaBlock;
+		}
+		virtual void SetSecondTaxaBlock(NxsTaxaBlockAPI *s) {
+		    NxsTaxaBlockAPI * f = this->firstTaxaBlock;
+		    this->Reset();
+		    this->secondTaxaBlock = s;
+		    this->firstTaxaBlock = f;
+		}
+		virtual NxsTaxaBlockAPI * GetSecondTaxaBlock() const {
+		    return this->secondTaxaBlock;
+		}
+		virtual std::set<unsigned> GetAssociatesForTaxonInFirstBlock(unsigned i) const {
+		    AssociationMap::const_iterator m = this->firstToSecond.find(i);
+		    if (m == this->firstToSecond.end()) {
+		        return std::set<unsigned>();
+		    }
+		    return m->second;
+		}
+		virtual std::set<unsigned> GetAssociatesForTaxonInSecondBlock(unsigned i) const  {
+		    AssociationMap::const_iterator m = this->secondToFirst.find(i);
+		    if (m == this->secondToFirst.end()) {
+		        return std::set<unsigned>();
+		    }
+		    return m->second;
+		}
+
+		virtual void		Report(std::ostream &out) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void 		Reset();
+		void				WriteAsNexus(std::ostream &out) const;
+
+
+		NxsTaxaAssociationBlock &operator=(const NxsTaxaAssociationBlock &other)
+			{
+			Reset();
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			CopyTaxaAssociationContents(other);
+			return *this;
+			}
+
+		void CopyTaxaAssociationContents(const NxsTaxaAssociationBlock &other)
+			{
+			firstToSecond = other.firstToSecond;
+			secondToFirst = other.secondToFirst;
+			firstTaxaBlock = other.firstTaxaBlock;
+			secondTaxaBlock = other.secondTaxaBlock;
+			}
+		NxsTaxaAssociationBlock * Clone() const
+			{
+			NxsTaxaAssociationBlock *taxa = new NxsTaxaAssociationBlock();
+			*taxa = *this;
+			return taxa;
+			}
+	protected:
+        AssociationMap firstToSecond;
+        AssociationMap secondToFirst;
+        NxsTaxaBlockAPI * firstTaxaBlock;
+        NxsTaxaBlockAPI * secondTaxaBlock;
+
+		virtual void 	Read(NxsToken &token);
+        void HandleTaxaCommand(NxsToken &token);
+        void HandleAssociatesCommand(NxsToken &token);
+        NxsTaxaBlockAPI * ProcessTaxaBlockName(const NxsString & value,  NxsToken &token) const;
+
+};
+
+class NxsTaxaAssociationBlockFactory
+	:public NxsBlockFactory
+	{
+	public:
+		virtual NxsTaxaAssociationBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
+	};
+
+#endif
+
diff --git a/ncl/nxstaxablock.cpp b/ncl/nxstaxablock.cpp
new file mode 100644
index 0000000..10f2c8f
--- /dev/null
+++ b/ncl/nxstaxablock.cpp
@@ -0,0 +1,634 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <climits>
+#include "ncl/nxstaxablock.h"
+#include "ncl/nxsreader.h"
+
+using namespace std;
+
+/*! \return (NTax - 1) or  UINT_MAX if NTax is 0
+*/
+unsigned NxsTaxaBlock::GetMaxIndex() const
+	{
+	unsigned nct = dimNTax;
+	if (nct == 0)
+		return UINT_MAX;
+	return nct - 1;
+	}
+unsigned NxsTaxaBlock::GetNumLabelsCurrentlyStored() const
+	{
+	return (unsigned)taxLabels.size();
+	}
+
+
+std::vector<std::string> NxsTaxaBlockAPI::GetAllLabels() const
+	{
+	const unsigned n = GetNTaxTotal();
+	std::vector<std::string> v(n);
+	for (unsigned i = 0; i < n; ++i)
+		{
+		NxsString nextLabel = GetTaxonLabel(i);  /*v2.1to2.2 4 */
+		v[i] = std::string(nextLabel.c_str());
+		}
+	return v;
+	}
+
+/* \returns a 1-based number of the taxon with label of `label` (not case-sensitive).
+	This is a low-level function not intended for widespread use (it is faster way to
+	query the label list because it does not throw exceptions or do the numeric interpretation
+	of labels).
+
+	\warning{does NOT apply the numeric interpretation of the label.}
+
+	\warning{ 1-based numbering}
+*/
+unsigned NxsTaxaBlock::TaxLabelToNumber(const std::string &label) const
+	{
+	std::string r(label.c_str());
+	NxsString::to_upper(r);
+	return CapitalizedTaxLabelToNumber(r);
+	}
+
+/* Used internally in reading of sets
+
+ \returns the number of indices that correspond to the label (and the number
+ of items that would be added to *inds if inds points to an empty set).
+*/
+unsigned NxsTaxaBlock::GetIndicesForLabel(const std::string &label, /*!< label, set name or string with the 1-based numeric representation of the object */
+	NxsUnsignedSet *inds) const /* The set of indices to add the taxa indices to (can be 0L). */
+	{
+	NxsString emsg;
+	const unsigned numb = TaxLabelToNumber(label);
+	if (numb != 0)
+		{
+		if (inds)
+			inds->insert(numb - 1);
+		return 1;
+		}
+	return GetIndicesFromSetOrAsNumber(label, inds, taxSets, GetMaxIndex(), "taxon");
+	}
+
+bool NxsTaxaBlock::AddNewIndexSet(const std::string &label, const NxsUnsignedSet & inds)
+	{
+	NxsString nlab(label.c_str());
+	const bool replaced = taxSets.count(nlab) > 0;
+	taxSets[nlab] = inds;
+	return replaced;
+	}
+/* Returns true if this set replaces an older definition.
+*/
+bool NxsTaxaBlock::AddNewPartition(const std::string &label, const NxsPartition & inds)
+	{
+	NxsString ls(label.c_str());
+	bool replaced = taxPartitions.count(ls) > 0;
+	taxPartitions[ls] = inds;
+	return replaced;
+	}
+
+/* Initializes NCL_BLOCKTYPE_ATTR_NAME to "TAXA" and dimNTax to 0.
+*/
+NxsTaxaBlock::NxsTaxaBlock()
+  	{
+	dimNTax	= 0;
+	NCL_BLOCKTYPE_ATTR_NAME		= "TAXA";
+	}
+
+NxsTaxaBlock::~NxsTaxaBlock()
+	{}
+
+/*! Other than the commands handled by NxsBlock::HandleBasicBlockCommands(), this
+	function will deal with Dimensions and call NxsTaxaBlock::HandleTaxLabels()
+	to parse the TaxLabels commands.
+
+	All other commands will be skipped
+*/
+void NxsTaxaBlock::Read(
+  NxsToken &token)	/* the token used to read from in */
+	{
+	Reset();
+	isEmpty				= false;
+	isUserSupplied		= true;
+
+	DemandEndSemicolon(token, "BEGIN TAXA");
+
+	for (;;)
+		{
+		token.GetNextToken();
+		NxsBlock::NxsCommandResult res = HandleBasicBlockCommands(token);
+		if (res == NxsBlock::NxsCommandResult(STOP_PARSING_BLOCK))
+			return;
+		if (res != NxsBlock::NxsCommandResult(HANDLED_COMMAND))
+			{
+			if (token.Equals("DIMENSIONS"))
+				{
+				token.GetNextToken();
+				if (!token.Equals("NTAX"))
+					{
+					errormsg = "Expecting NTAX keyword, but found ";
+					errormsg += token.GetToken();
+					errormsg += " instead";
+					throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+					}
+				DemandEquals(token, "after NTAX");
+				dimNTax = DemandPositiveInt(token, "NTAX");
+				taxLabels.reserve(dimNTax);
+				DemandEndSemicolon(token, "DIMENSIONS");
+				}	// if (token.Equals("DIMENSIONS"))
+			else if (token.Equals("TAXLABELS"))
+				HandleTaxLabels(token);
+			else
+				SkipCommand(token);
+			}
+		}	// GetNextToken loop
+	}
+
+/*! Resets the taxLabels. \throws NxsException for illegal or duplicated labels.
+
+	All other commands will be skipped.
+*/
+void NxsTaxaBlock::HandleTaxLabels(NxsToken &token)
+	{
+	if (dimNTax == 0)
+		{
+		errormsg = "NTAX must be specified before TAXLABELS command";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	taxLabels.clear();
+	labelToIndex.clear();
+	for (unsigned i = 0; i < dimNTax; i++)
+		{
+		token.GetNextToken();
+		try
+			{
+			NxsString t = token.GetToken();
+			AddTaxonLabel(t);
+			}
+		catch (const NxsException & x)
+			{
+			throw NxsException(x.msg, token);
+			}
+		}
+	DemandEndSemicolon(token, "TAXLABELS");
+	}
+
+/* This function outputs a brief report of the contents of this taxa block. Overrides the abstract virtual function in
+	the base class.
+*/
+void NxsTaxaBlock::Report(
+  std::ostream &out) NCL_COULD_BE_CONST /* the output stream to which to write the report */ /*v2.1to2.2 1 */
+	{
+	out << endl;
+	out << NCL_BLOCKTYPE_ATTR_NAME << " block contains ";
+	if (dimNTax == 0)
+		{
+		out << "no taxa" << endl;
+		return;
+		}
+	if (dimNTax == 1)
+		out << "1 taxon" << endl;
+	else
+		out << dimNTax << " taxa" << endl;
+	for (unsigned k = 0; k < dimNTax; k++)
+		out << "    " << (k+1) << "    " << GetTaxonLabel(k) << endl;
+	}
+
+/* Writes contents of this block in NEXUS format to `out'.
+*/
+void NxsTaxaBlock::WriteAsNexus(std::ostream &out) const
+	{
+	out << "BEGIN TAXA;\n";
+	WriteBasicBlockCommands(out);
+	out << "    DIMENSIONS NTax = " << dimNTax << ";\n";
+	this->WriteTaxLabelsCommand(out);
+	WriteSkippedCommands(out);
+	out << "END;\n";
+	}
+
+/* Writes the NEXUS TaxLabels commands
+*/
+void NxsTaxaBlock::WriteTaxLabelsCommand(std::ostream &out) const
+	{
+	const unsigned nLabels = this->GetNumTaxonLabels();
+	if (nLabels > 0)
+		{
+		out << "    TAXLABELS";
+		for (NxsStringVector::const_iterator kIt = taxLabels.begin(); kIt != taxLabels.end(); ++kIt)
+			out << ' ' << NxsString::GetEscaped(*kIt);
+		out << ";\n";
+		}
+	}
+
+/* Flushes taxonLabels and sets dimNTax to 0 in preparation for reading a new TAXA block.
+*/
+void NxsTaxaBlock::Reset()
+	{
+	NxsBlock::Reset();
+	taxLabels.clear();
+	labelToIndex.clear();
+	dimNTax = 0;
+	inactiveTaxa.clear();
+	taxSets.clear();
+	taxPartitions.clear();
+	}
+
+/* Adds taxon label 's' to end of list of taxon labels and increments dimNTax by 1.
+
+	\returns the (0-based) index of taxon label just added.
+*/
+unsigned NxsTaxaBlock::AddTaxonLabel(
+  const std::string & rs)	/* the taxon label to add */
+	{
+	unsigned ind = (unsigned)taxLabels.size();
+	NxsString s(rs.c_str());
+	std::string x(rs.c_str());
+	NxsString::to_upper(x);
+	CheckCapitalizedTaxonLabel(x);
+	taxLabels.push_back(s);
+	labelToIndex[x] = ind;
+	return ind;
+	}
+
+/*  No action if the label `s` could be added to list of taxon labels
+
+	\throws a NxsException if the label `s` is illegal, and
+	\throws a DuplicatedLabelNxsException if the label is already in the block
+*/
+void NxsTaxaBlock::CheckCapitalizedTaxonLabel(
+  const std::string &s) const /*!< potential taxon label to check */
+  {
+	unsigned ind = (unsigned)taxLabels.size();
+	if (dimNTax < ind)
+		{
+		NxsString e;
+		e << "Number of stored labels (" << taxLabels.size() << ") exceeds the NTax specified (" << dimNTax<<").";
+		throw NxsException(e);
+		}
+	if (CapitalizedTaxLabelToNumber(s) != 0)
+		{
+		NxsString e = "TaxLabels cannot be repeated. The label ";
+		e << s << " has already been stored.";
+		throw DuplicatedLabelNxsException(e);
+		}
+	if (s.length() == 1 && NxsString::IsNexusPunctuation(s[0]))
+		{
+		NxsString e = "Illegal TaxLabel found:\n";
+		e << s << "\n TaxLabels cannot be punctuation.";
+		throw NxsException(e);
+		}
+	}
+
+
+void NxsTaxaBlock::ChangeTaxonLabel(
+  unsigned i,	/* the taxon label number to change */
+  NxsString s)	/* the string used to replace label i */ /*v2.1to2.2 4 */
+	{
+	if (i >= (unsigned)taxLabels.size())
+		{
+		NxsString e = "The label for taxon ";
+		e << (i+1) << " cannot be changed, because the only " << (unsigned)taxLabels.size() << " taxlabel(s) have been assigned.";
+		throw NxsNCLAPIException(e);
+		}
+	RemoveTaxonLabel(i);
+	std::string x(s.c_str());
+	NxsString::to_upper(x);
+	CheckCapitalizedTaxonLabel(x);
+	taxLabels[i] = NxsString(s.c_str()); /* odd construct for v2.1->v2.2 translation */
+	labelToIndex[x] = i;
+	}
+
+void NxsTaxaBlock::RemoveTaxonLabel(
+  unsigned i)	/* the taxon label number to remove */
+	{
+	std::string oldLabel(taxLabels[i].c_str());
+	NxsString::to_upper(oldLabel);
+	labelToIndex.erase(oldLabel);
+	taxLabels[i] = NxsString();
+	}
+
+/* Returns the length of the longest taxon label stored. Useful for formatting purposes in outputting the data matrix
+	(i.e., you want the left edge of the matrix to line up).
+*/
+unsigned NxsTaxaBlock::GetMaxTaxonLabelLength()
+	{
+	NxsStringVector::const_iterator tlIt = taxLabels.begin();
+	unsigned maxlen = 0;
+	for (; tlIt < taxLabels.end(); ++tlIt)
+		{
+		const unsigned thislen = (unsigned)tlIt->size();
+		if (thislen > maxlen)
+			maxlen = thislen;
+		}
+	return maxlen;
+	}
+
+/* Returns the label for taxon 'i'. where i is in the range [0-dimNTax)
+*/
+NxsString NxsTaxaBlock::GetTaxonLabel(unsigned i) const  /*v2.1to2.2 4 */
+	{
+	if (i >= dimNTax)
+		{
+		NxsString e = "The  taxon index ";
+		e << i  << " is out of range.  Only " << dimNTax << " taxa in block.";
+		throw NxsNCLAPIException(e);
+		}
+	if (i < (unsigned)taxLabels.size())
+		return taxLabels[i];
+	NxsString s;
+	s += (i + 1);
+	return s; /*the number is a default label*/
+	}
+
+/*!
+	Returns true if taxonLabels[i] contains embedded spaces and thus should be surrounded by single quotes if output is
+	NEXUS format.
+*/
+bool NxsTaxaBlock::NeedsQuotes(
+  unsigned i)	/* the taxon label number in question */
+	{
+	const NxsString x(GetTaxonLabel(i).c_str());
+	return x.QuotesNeeded();
+	}
+
+/*! Returns true if taxon label equal to 's' can be found in the taxonLabels list, and returns false otherwise.
+*/
+bool NxsTaxaBlock::IsAlreadyDefined(
+  const std::string & s)	/* the s to attempt to find in the taxonLabels list */
+	{
+	return (TaxLabelToNumber(s) != 0);
+	}
+
+/*!
+	Returns a (0-based) index of taxon named 's' in taxonLabels list. If taxon named 's' cannot be found, or if there are no
+	labels currently stored in the taxonLabels list, throws NxsX_NoSuchTaxon exception.
+*/
+unsigned NxsTaxaBlock::FindTaxon(
+  const NxsString &s) const /* the string to attempt to find in the taxonLabels list */  /*v2.1to2.2 4 */
+	{
+	unsigned k = TaxLabelToNumber(s);
+	if (k == 0)
+		throw NxsTaxaBlock::NxsX_NoSuchTaxon();
+	return (k - 1);
+	}
+
+/*! Returns number of taxon labels currently stored.
+*/
+unsigned NxsTaxaBlock::GetNumTaxonLabels() const
+	{
+	return (unsigned)taxLabels.size();
+	}
+
+/*! Sets dimNTax to n.
+*/
+void NxsTaxaBlock::SetNtax(
+  unsigned n)	/* the number of taxa */
+	{
+	dimNTax = n;
+	if (taxLabels.size() > dimNTax)
+		{
+		for (unsigned i = dimNTax; i < taxLabels.size(); i++)
+			RemoveTaxonLabel(i);
+		taxLabels.resize(dimNTax);
+		}
+	else
+		taxLabels.reserve(dimNTax);
+	}
+
+NxsTaxaBlock *NxsTaxaBlockFactory::GetBlockReaderForID(const std::string & idneeded, NxsReader *reader, NxsToken *)
+	{
+	if (reader == NULL || idneeded != "TAXA")
+		return NULL;
+	NxsTaxaBlock * nb = new NxsTaxaBlock();
+	nb->SetImplementsLinkAPI(false);
+	return nb;
+	}
+
+NxsTaxaBlockAPI * NxsTaxaBlockSurrogate::GetTaxaBlockPtr(int *status) const
+	{
+	if (status)
+		*status = GetTaxaLinkStatus();
+	return taxa;
+	}
+
+
+void NxsTaxaBlockSurrogate::SetTaxaLinkStatus(NxsBlock::NxsBlockLinkStatus s)
+	{
+	if (taxaLinkStatus & NxsBlock::BLOCK_LINK_USED)
+		{
+		throw NxsNCLAPIException("Resetting a used taxaLinkStatus");
+		}
+	taxaLinkStatus = s;
+	}
+
+
+void NxsTaxaBlockSurrogate::SetTaxaBlockPtr(NxsTaxaBlockAPI *c, NxsBlock::NxsBlockLinkStatus s)
+	{
+	SetTaxaLinkStatus(s);
+	taxa = c;
+	}
+
+/*only used it the linkAPI is enabled*/
+void NxsTaxaBlockSurrogate::HandleLinkTaxaCommand(NxsToken & token)
+	{
+	token.GetNextToken();
+	const std::map<std::string, std::string> kv = token.ProcessAsSimpleKeyValuePairs("LINK");
+	std::map<std::string, std::string>::const_iterator pairIt = kv.begin();
+	for (;pairIt != kv.end(); ++pairIt)
+		{
+		NxsTaxaBlockAPI *entryTaxa = taxa;
+		int entryTaxaLinkStatus = taxaLinkStatus;
+		NxsString key(pairIt->first.c_str());
+		key.ToUpper();
+		NxsString value(pairIt->second.c_str());
+		if (key == "TAXA")
+			{
+			if (taxa && !taxa->GetID().EqualsCaseInsensitive(value))
+				{
+				if (GetTaxaLinkStatus() & NxsBlock::BLOCK_LINK_USED)
+					{
+					NxsString errormsg = "LINK to a Taxa block must occur before commands that use a taxa block";
+					throw NxsException(errormsg, token);
+					}
+				SetTaxaBlockPtr(NULL, NxsBlock::BLOCK_LINK_UNINITIALIZED);
+				}
+			if (!taxa)
+				{
+				if (!nxsReader)
+					{
+					NxsString errormsg =  "API Error: No nxsReader during parse in NxsTaxaBlockSurrogate::HandleLinkTaxaCommand";
+					throw NxsNCLAPIException(errormsg, token);
+					}
+				NxsTaxaBlockAPI * cb = nxsReader->GetTaxaBlockByTitle(value.c_str(), NULL);
+				if (cb == NULL)
+					{
+					NxsString errormsg = "Unknown TAXA block (";
+					errormsg += value;
+					errormsg +=") referred to in the LINK command";
+					taxa = entryTaxa;
+					taxaLinkStatus = entryTaxaLinkStatus;
+					throw NxsException(errormsg, token);
+					}
+				SetTaxaBlockPtr(cb, NxsBlock::BLOCK_LINK_FROM_LINK_CMD);
+				}
+			}
+		else
+			{
+			NxsString errormsg = "Skipping unknown LINK subcommand: ";
+			errormsg += pairIt->first.c_str();
+			nxsReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+			errormsg.clear(); //this token pos will be off a bit.
+			}
+		}
+	}
+void NxsTaxaBlockSurrogate::WriteLinkTaxaCommand(std::ostream &out) const
+	{
+	if (taxa && !(taxa->GetTitle().empty()))
+		out << "    LINK TAXA = " << NxsString::GetEscaped(taxa->GetTitle()) << ";\n";
+	}
+
+/* This function is called by derived classes right before they start to parse a command
+	that requires a Taxa block.
+	If a taxa block has not been set at this point, and one cannot be created then
+	a NxsException will be generated.
+
+	This enables lazy initialization of the taxa field.
+*/
+void NxsTaxaBlockSurrogate::AssureTaxaBlock(bool allocBlock, NxsToken &token, const char *cmd)
+	{
+	if (!allocBlock)
+		{
+		if (taxa != NULL)
+			return;
+		if (!nxsReader)
+			{
+			NxsString  errormsg =  "API Error: No nxsReader during parse in NxsTaxaBlockSurrogate::AssureTaxaBlock";
+			throw NxsNCLAPIException(errormsg, token);
+			}
+		unsigned nTb;
+		NxsTaxaBlockAPI * cb = nxsReader->GetTaxaBlockByTitle(NULL, &nTb);
+		if (cb == NULL)
+			{
+			NxsString errormsg =  "TAXA Block has been not been read, but a ";
+			if (cmd)
+				errormsg += cmd;
+			errormsg += " command (which requires a TAXA block) has been encountered. Either add a TAXA block or (for blocks other than the TREES block) you may use a \"DIMENSIONS NEWTAXA NTAX= ...\" command to introduces taxa.";
+			throw NxsException(errormsg, token);
+			}
+		if (nTb > 1)
+			{
+			NxsString errormsg =  "Multiple TAXA Blocks have been read (or implied using NEWTAXA in other blocks) and a ";
+			if (cmd)
+				errormsg += cmd;
+			errormsg += " command (which requires a TAXA block) has been encountered";
+			std::string bn = token.GetBlockName();
+			if (!bn.empty())
+				{
+				errormsg += " in a ";
+				errormsg += bn;
+				errormsg += " block.";
+				}
+			errormsg += ".\nThis can be caused by reading multiple files. It is possible that\neach file is readable separately, but cannot be read unambiguously when read in sequence.\n";
+			errormsg += "One way to correct this is to use the\n    TITLE some-unique-name-here ;\ncommand in the TAXA block and an accompanying\n    LINK TAXA=the-unique-title-goes here;\n";
+			errormsg += "command to specify which TAXA block is needed.";
+			cb->WarnDangerousContent(errormsg, token);
+			}
+		taxa = cb;
+		return;
+		}
+	if (nxsReader != NULL)
+		{
+		NxsTaxaBlockFactory * tbf = nxsReader->GetTaxaBlockFactory();
+		if (tbf)
+			{
+			std::string s("TAXA");
+			taxa = tbf->GetBlockReaderForID(s, nxsReader, &token);
+			ownsTaxaBlock = true;
+			passedRefOfOwnedBlock = false;
+			taxaLinkStatus = NxsBlock::BLOCK_LINK_TO_IMPLIED_BLOCK;
+			}
+		}
+	if (taxa == NULL)
+		{
+		taxa = new NxsTaxaBlock();
+		ownsTaxaBlock = true;
+		passedRefOfOwnedBlock = false;
+		taxaLinkStatus = NxsBlock::BLOCK_LINK_TO_IMPLIED_BLOCK;
+		}
+	}
+
+bool NxsTaxaBlockSurrogate::SurrogateSwapEquivalentTaxaBlock(NxsTaxaBlockAPI * tb)
+	{
+		NxsTaxaBlockFactory * tbf = nxsReader->GetTaxaBlockFactory();
+		if (this->taxa && this->ownsTaxaBlock && tbf)
+			tbf->BlockError(taxa);
+		this->SetTaxaBlockPtr(tb, NxsBlock::BLOCK_LINK_EQUIVALENT_TO_IMPLIED);
+		return true;
+	}
+
+void NxsTaxaBlockSurrogate::ResetSurrogate()
+	{
+	if (ownsTaxaBlock)
+		{
+		if (!passedRefOfOwnedBlock)
+			{
+			if (taxa != NULL && nxsReader != NULL)
+				{
+				NxsTaxaBlockFactory * factory = nxsReader->GetTaxaBlockFactory();
+				if (factory)
+					{
+					factory->BlockError(taxa);
+					taxa = NULL;
+					}
+				}
+			if (taxa)
+				delete taxa;
+			}
+		taxa = NULL; /*potential memory leak, but a reference should be held, by the nexus reader.*/
+		ownsTaxaBlock = false;
+		taxaLinkStatus = NxsBlock::BLOCK_LINK_UNINITIALIZED;
+		}
+	newtaxa = false;
+	passedRefOfOwnedBlock = false;
+	}
+
+VecBlockPtr NxsTaxaBlockSurrogate::GetCreatedTaxaBlocks()
+	{
+	VecBlockPtr vbp;
+	if (newtaxa && taxa)
+		{
+		vbp.push_back(taxa);
+		passedRefOfOwnedBlock = true;
+		}
+	return vbp;
+	}
+/*!
+	Called when TAXLABELS command needs to be parsed from within the UNALIGNED block. Deals with everything after the
+	token TAXLABELS up to and including the semicolon that terminates the TAXLABELS command.
+*/
+void NxsTaxaBlockSurrogate::HandleTaxLabels(
+  NxsToken & token)	/* the token used to read from `in' */
+	{
+	if (!newtaxa || taxa == NULL)
+		{
+		NxsString errormsg = "NEWTAXA must have been specified in DIMENSIONS command to use the TAXLABELS command in a ";
+		errormsg << GetBlockName() << " block";
+		throw NxsException(errormsg, token);
+		}
+	taxa->HandleTaxLabels(token);
+	}
+
diff --git a/ncl/nxstaxablock.h b/ncl/nxstaxablock.h
new file mode 100644
index 0000000..8fd2498
--- /dev/null
+++ b/ncl/nxstaxablock.h
@@ -0,0 +1,484 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#ifndef NCL_NXSTAXABLOCK_H
+#define NCL_NXSTAXABLOCK_H
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxsblock.h"
+
+/*! This abstract class describes the interface that every block that wants to serve
+	as a reader of NEXUS TAXA blocks should fulfill.
+
+	A parsed taxa block in NEXUS is essentially a list of unique taxon labels.
+
+	When compared the label comparison is not case-sensitive.
+
+	The taxon can be referred to in NEXUS files by its number (numbering starting at 1), or its label.
+*/
+class NxsTaxaBlockAPI
+  : public NxsBlock, public NxsLabelToIndicesMapper
+  {
+  public:
+		/*! Adds taxon label 's' to end of list of taxon labels and increments dimNTax by 1.
+
+			\returns the (0-based) index of taxon label just added.
+		*/
+		virtual unsigned			AddTaxonLabel(const std::string & s) = 0;
+		/*! Changes the label for taxon `i` to `s`
+			The index `i` should be 0-based.
+			\throws NxsNCLAPIException if `i` is out of range.
+			\throws DuplicatedLabelNxsException if the label is already in the block
+			\throws NxsException if the label is not a legal taxon name (eg. it is a punctation character).
+		*/
+		virtual void  				ChangeTaxonLabel(unsigned i, NxsString s) = 0;  /*v2.1to2.2 4 */
+		/*! \returns the 0-based index of taxon named 's' in taxonLabels list.
+
+			\throws NxsX_NoSuchTaxon exception if taxon named 's' cannot be found.
+
+			\warning {This function does NOT implement the interpret-label-as-a-number functionality}
+		*/
+		virtual unsigned			FindTaxon(const NxsString & label) const  = 0;  /*v2.1to2.2 4 */
+		/*! \returns true if the label `label` already a taxon label (not case sensitive)
+		*/
+		virtual bool  				IsAlreadyDefined(const std::string & label) = 0;
+		/*! \returns the length of the longest label.
+
+			\note {The label length, does not include any extra characters (such as quotes) that may be needed to write the file
+			out to NEXUS format}
+		*/
+		virtual unsigned			GetMaxTaxonLabelLength() = 0;
+		/*! \returns the number of taxon labels (should be the same as GetNTax after a valid parse).
+		*/
+		virtual unsigned			GetNumTaxonLabels() const = 0;
+		/*! \returns the number of taxa
+		*/
+		virtual unsigned			GetNTax() const = 0;
+		/*! \returns the number of taxa
+			The prescence of this function and GetNTax is a historical artifact.  They have the same behavior.
+		*/
+		virtual unsigned			GetNTaxTotal() const = 0;
+		/*! \returns the label for taxon with (0-based) index of `i`
+
+			\throws NxsNCLAPIException if `i` is out of range.
+			\warning{Can return a 1-based number if the taxon lacks a name (in NEXUS parsing "1" refers to the first taxon).}
+		*/
+		virtual NxsString 			GetTaxonLabel(unsigned i) const = 0;  /*v2.1to2.2 4 */
+
+		/*! \returns a vector of all of the taxon labels */
+		virtual std::vector<std::string> GetAllLabels() const;
+
+		/*! \returns a 1-based number of the taxon with label of `label` (not case-sensitive).
+			This is a low-level function not intended for widespread use (it is faster way to
+			query the label list because it does not throw exceptions or do the numeric interpretation
+			of labels).
+
+			\warning{does NOT apply the numeric interpretation of the label.}
+
+			\warning{ 1-based numbering}
+		*/
+		virtual unsigned			TaxLabelToNumber(const std::string &label) const = 0;
+
+		/*! hook called during NxsTaxaBlock::Read() when the TaxLabels command is encountered */
+		virtual void 				HandleTaxLabels(NxsToken &token) = 0;
+		/*! writes the taxon labes as NEXUS to `out` */
+		virtual void 				WriteTaxLabelsCommand(std::ostream &out) const = 0;
+		/*! Sets the number of taxa to be included in the block
+
+			\warning{This can cause the cropping of labels.}
+		*/
+		virtual void 				SetNtax(unsigned n) = 0;
+
+		/*! \returns the number of taxa that have not been inactivated by calling InactivateTaxa
+		*/
+		virtual unsigned		 	GetNumActiveTaxa() const = 0;
+		/*! \returns true if the taxon (denoted by a 0-based index) is in range and not inactivated
+
+			\note{Works, but is not currently used by the library added for planned delete/restor functionality}
+		*/
+		virtual bool		 		IsActiveTaxon(unsigned i) const = 0;
+		/*! flags a set of taxa as inactive. Takes a set of 0-based indices.
+
+			\note{Works, but is not currently used by the library added for planned delete/restor functionality}
+		*/
+		virtual unsigned		 	InactivateTaxa(const std::set<unsigned> &s) = 0;
+		/*! flags a set of taxa as active. Takes a set of 0-based indices.
+
+			\note{Works, but is not currently used by the library added for planned delete/restor functionality}
+		*/
+		virtual unsigned		 	ActivateTaxa(const std::set<unsigned> &) = 0;
+		/*! flags a taxon as active. Takes a  0-based index.
+
+			\note{Works, but is not currently used by the library added for planned delete/restor functionality}
+		*/
+		virtual unsigned		 	InactivateTaxon(unsigned ) = 0;
+		/*! flags a taxon as active. Takes a  0-based index.
+
+			\note{Works, but is not currently used by the library added for planned delete/restor functionality}
+		*/
+		virtual unsigned		 	ActivateTaxon(unsigned ) = 0;
+
+  };
+
+/*! The default implementation of the NxsTaxaBlockAPI that is used to parse TAXA blocks into a list of
+	unique (case-insensitive) labels.
+
+*/
+class NxsTaxaBlock
+  : public NxsTaxaBlockAPI
+	{
+	friend class NxsDataBlock;
+	friend class NxsAllelesBlock;
+	friend class NxsCharactersBlock;
+	friend class NxsDistancesBlock;
+
+	public:
+							NxsTaxaBlock();
+		virtual				~NxsTaxaBlock();
+
+		virtual unsigned	AddTaxonLabel(const std::string & s);
+		void  				ChangeTaxonLabel(unsigned i, NxsString s); /*v2.1to2.2 4 */
+		unsigned			TaxLabelToNumber(const std::string &label) const;
+		unsigned			FindTaxon(const NxsString & label) const;  /*v2.1to2.2 4 */
+		bool  				IsAlreadyDefined(const std::string &label);
+		unsigned GetIndexSet(const std::string &label, NxsUnsignedSet * toFill) const
+			{
+			return NxsLabelToIndicesMapper::GetIndicesFromSets(label, toFill, taxSets);
+			}
+		unsigned			GetMaxTaxonLabelLength();
+		unsigned			GetNTax() const;
+		unsigned			GetNTaxTotal() const;
+		unsigned			GetNumTaxonLabels() const;
+		NxsString 			GetTaxonLabel(unsigned i) const;  /*v2.1to2.2 4 */
+		void 				HandleTaxLabels(NxsToken &token);
+		bool 				NeedsQuotes(unsigned i);
+		virtual void		Report(std::ostream &out) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void 		Reset();
+		void 				SetNtax(unsigned n);
+		void				WriteAsNexus(std::ostream &out) const;
+
+
+		virtual unsigned		 	GetNumActiveTaxa() const;
+		virtual bool		 		IsActiveTaxon(unsigned i) const;
+		virtual unsigned		 	InactivateTaxa(const std::set<unsigned> &);
+		virtual unsigned		 	ActivateTaxa(const std::set<unsigned> &);
+		virtual unsigned		 	InactivateTaxon(unsigned );
+		virtual unsigned		 	ActivateTaxon(unsigned );
+
+		class NxsX_NoSuchTaxon {};	/* thrown if FindTaxon cannot locate a supplied taxon label in the taxLabels vector */
+
+		void 				WriteTaxLabelsCommand(std::ostream &out) const;
+
+		unsigned GetMaxIndex() const;
+		unsigned GetNumLabelsCurrentlyStored() const;
+		unsigned GetIndicesForLabel(const std::string &label, NxsUnsignedSet *inds) const;
+		bool AddNewIndexSet(const std::string &label, const NxsUnsignedSet & inds);
+		bool AddNewPartition(const std::string &label, const NxsPartition & inds);
+
+		/*----------------------------------------------------------------------
+		| AppendNewLabel should not be called in most client code.  It is only
+		| 	added because some blocks create their own taxa block on-the-fly.
+		*/
+		virtual unsigned AppendNewLabel(std::string &label)
+			{
+			while (dimNTax <= taxLabels.size())
+				dimNTax++;
+			return AddTaxonLabel(label);
+			}
+
+		NxsTaxaBlock &operator=(const NxsTaxaBlock &other)
+			{
+			Reset();
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			CopyTaxaContents(other);
+			return *this;
+			}
+
+		void CopyTaxaContents(const NxsTaxaBlock &other)
+			{
+			taxLabels = other.taxLabels;
+			labelToIndex = other.labelToIndex;
+			dimNTax = other.dimNTax;
+			taxSets = taxSets;
+			taxPartitions = other.taxPartitions;
+			inactiveTaxa = other.inactiveTaxa;
+			}
+		NxsTaxaBlock * Clone() const
+			{
+			NxsTaxaBlock *taxa = new NxsTaxaBlock();
+			*taxa = *this;
+			return taxa;
+			}
+	protected:
+		NxsStringVector	taxLabels;	/* storage for list of taxon labels */
+		std::map<std::string, unsigned> labelToIndex;
+		unsigned		dimNTax;
+		NxsUnsignedSetMap taxSets;
+		NxsPartitionsByName taxPartitions;
+		std::set<unsigned> inactiveTaxa;
+
+		virtual void 	Read(NxsToken &token);
+		void CheckCapitalizedTaxonLabel(const std::string &s) const;
+		unsigned CapitalizedTaxLabelToNumber(const std::string & s) const;
+		void 			RemoveTaxonLabel(unsigned taxInd);
+	};
+
+
+/*! This class is the base class for blocks that can (in a pinch) serve as
+a TAXA block reader(NxsCharactersBlock, NxsTreesBlock, NxsUnalignedBlock, and NxsDistancesBlock)
+
+	Client code rarely needs to call the special functionality of this class.
+
+	In broad terms, this class delegates calls to the taxa block if there is an
+		external taxa block.
+	If no external taxa block has been associated with the NxsTaxaBlockSurrogate, then
+		will create one (which will later be returned to the NxsReader as an
+		implied block)
+*/
+class NxsTaxaBlockSurrogate
+	{
+	public:
+		void SetCreateImpliedBlock(bool v)
+        	{
+        	createImpliedBlock = v;
+        	}
+
+		/*! \returns an integer that will be a facet of NxsBlockLinkStatus which reflects how the taxa block was determined.*/
+		int GetTaxaLinkStatus() const
+			{
+			return taxaLinkStatus;
+			}
+
+		void SetTaxaLinkStatus(NxsBlock::NxsBlockLinkStatus s);
+		NxsTaxaBlockAPI * GetTaxaBlockPtr(int *status) const;
+		NxsTaxaBlockAPI * GetTaxaBlockPtr() {return GetTaxaBlockPtr(0L);}
+
+		virtual const std::string & GetBlockName() const = 0;
+
+		virtual unsigned			GetNTax() const;
+		virtual unsigned			GetNTaxTotal() const;
+		virtual unsigned			GetNumActiveTaxa() const;
+		virtual bool				IsActiveTaxon(unsigned i) const;
+		virtual unsigned			InactivateTaxa(const std::set<unsigned> &);
+		virtual unsigned			ActivateTaxa(const std::set<unsigned> &);
+		virtual unsigned			InactivateTaxon(unsigned );
+		virtual unsigned			ActivateTaxon(unsigned );
+
+		NxsTaxaBlockSurrogate &operator=(const NxsTaxaBlockSurrogate &other)
+			{
+			ResetSurrogate();
+			CopyTaxaBlockSurrogateContents(other);
+			return *this;
+			}
+
+		/*
+		|  Aliases the same taxa block as `other`, but `other` retains ownership!!
+		*/
+		virtual void CopyTaxaBlockSurrogateContents(const NxsTaxaBlockSurrogate &other)
+			{
+			ResetSurrogate();
+			taxa = other.taxa;
+			taxaLinkStatus = other.taxaLinkStatus;
+			newtaxa = other.newtaxa;
+			ownsTaxaBlock = false;
+			passedRefOfOwnedBlock = other.passedRefOfOwnedBlock;
+			createImpliedBlock = other.createImpliedBlock;
+			nxsReader = other.nxsReader;
+			}
+
+	protected:
+		NxsTaxaBlockSurrogate(NxsTaxaBlockAPI *tb, NxsReader * reader)
+			:taxa(tb),
+			newtaxa(false),
+			ownsTaxaBlock(false),
+			passedRefOfOwnedBlock(false),
+			createImpliedBlock(false),
+			nxsReader(reader)
+			{
+			taxaLinkStatus = (tb == NULL ? NxsBlock::BLOCK_LINK_UNINITIALIZED : NxsBlock::BLOCK_LINK_TO_ONLY_CHOICE);
+			}
+		virtual ~NxsTaxaBlockSurrogate()
+			{
+			ResetSurrogate();
+			}
+
+		void SetTaxaBlockPtr(NxsTaxaBlockAPI *c, NxsBlock::NxsBlockLinkStatus s);
+
+		VecBlockPtr GetCreatedTaxaBlocks();
+		void FlagTaxaBlockAsUsed()
+			{
+			taxaLinkStatus |= NxsBlock::BLOCK_LINK_USED;
+			}
+
+		void AssureTaxaBlock(bool allocBlock, NxsToken &, const char *cmd);
+		void ResetSurrogate();
+		void SetNexusReader(NxsReader *nxsptr)
+			{
+			nxsReader = nxsptr;
+			}
+		virtual void 			HandleTaxLabels(NxsToken & token);
+		virtual void			HandleLinkTaxaCommand(NxsToken & );
+		virtual void			WriteLinkTaxaCommand(std::ostream &out) const;
+		bool					SurrogateSwapEquivalentTaxaBlock(NxsTaxaBlockAPI * tb);
+
+		NxsTaxaBlockAPI			*taxa;				/* pointer to the TAXA block in which taxon labels are stored */
+		int						taxaLinkStatus;
+		bool					newtaxa;
+		bool					ownsTaxaBlock;
+		bool					passedRefOfOwnedBlock;
+		bool					createImpliedBlock; /*if true and NEWTAXA is read in the DIMENSIONS command, then a new TaxaBlock will be allocated (instead of resetting the TAXA block). false by default.*/
+		NxsReader 				*nxsReader;
+	};
+// The following typedef maintains compatibility with existing code.
+// The TaxaBlock class name is deprecated; please use NxsTaxaBlock instead.
+//
+typedef NxsTaxaBlock TaxaBlock;
+class NxsTaxaBlockFactory
+	:public NxsBlockFactory
+	{
+	public:
+		virtual NxsTaxaBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
+	};
+
+inline unsigned NxsTaxaBlock::GetNTax() const
+	{
+	return dimNTax;
+	}
+
+inline unsigned NxsTaxaBlock::GetNTaxTotal() const
+	{
+	return dimNTax;
+	}
+
+/*!	\returns a 1-based number of the taxon with label of `r` OR returns 0 to indicate that the label was not found.
+	Not for public usage
+
+	\warning{`r` must be capitalized for this function to work.}
+
+	\warning{does NOT apply the numeric interpretation of the label.}
+
+	\warning{ 1-based numbering}
+*/
+inline unsigned NxsTaxaBlock::CapitalizedTaxLabelToNumber(const std::string &r) const
+	{
+	std::map<std::string, unsigned>::const_iterator rIt = labelToIndex.find(r);
+	if (rIt == labelToIndex.end())
+		return 0;
+	return rIt->second + 1;
+	}
+
+
+/*!
+	Returns true if taxon `i' is active. If taxon `i' has been deleted, returns false. Assumes `i' is in the range
+	[0..`ntax').
+*/
+inline bool NxsTaxaBlockSurrogate::IsActiveTaxon(
+  unsigned taxInd) const	/* the taxon in question, in the range [0..`ntax') */
+	{
+	if (!taxa)
+	    throw NxsNCLAPIException("Calling IsActiveTaxon on uninitialized block");
+	return taxa->IsActiveTaxon(taxInd);
+	}
+inline unsigned NxsTaxaBlockSurrogate::GetNumActiveTaxa() const
+	{
+	if (!taxa)
+	    throw NxsNCLAPIException("Calling GetNumActiveTaxa on uninitialized block");
+	return taxa->GetNumActiveTaxa();
+	}
+inline unsigned NxsTaxaBlockSurrogate::InactivateTaxa(const std::set<unsigned> &s)
+	{
+	if (!taxa)
+	    throw NxsNCLAPIException("Calling InactivateTaxa on uninitialized block");
+	return taxa->InactivateTaxa(s);
+	}
+inline unsigned NxsTaxaBlockSurrogate::ActivateTaxa(const std::set<unsigned> &s)
+	{
+	if (!taxa)
+	    throw NxsNCLAPIException("Calling ActivateTaxa on uninitialized block");
+	return taxa->ActivateTaxa(s);
+	}
+
+inline unsigned NxsTaxaBlockSurrogate::InactivateTaxon(unsigned i)
+	{
+	if (!taxa)
+	    throw NxsNCLAPIException("Calling InactivateTaxon on uninitialized block");
+	return taxa->InactivateTaxon(i);
+	}
+
+inline unsigned NxsTaxaBlockSurrogate::ActivateTaxon(unsigned i)
+	{
+	if (!taxa)
+	    throw NxsNCLAPIException("Calling ActivateTaxon on uninitialized block");
+	return taxa->ActivateTaxon(i);
+	}
+
+inline unsigned NxsTaxaBlockSurrogate::GetNTax() const
+	{
+	if (!taxa)
+	    throw NxsNCLAPIException("Calling GetNTax on uninitialized block");
+	return taxa->GetNTax();
+	}
+
+inline unsigned NxsTaxaBlockSurrogate::GetNTaxTotal() const
+	{
+	if (!taxa)
+	    throw NxsNCLAPIException("Calling GetNTaxTotal on uninitialized block");
+	return taxa->GetNTaxTotal();
+	}
+
+
+inline unsigned NxsTaxaBlock::GetNumActiveTaxa() const
+	{
+	return GetNTax() - (unsigned)inactiveTaxa.size();
+	}
+
+inline bool NxsTaxaBlock::IsActiveTaxon(unsigned i) const
+	{
+	return i < GetNTax() && (inactiveTaxa.count(i) == 0);
+	}
+
+inline unsigned NxsTaxaBlock::InactivateTaxa(const std::set<unsigned> &s)
+	{
+	for (std::set<unsigned>::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt)
+		InactivateTaxon(*sIt);
+	return GetNumActiveTaxa();
+	}
+
+inline unsigned NxsTaxaBlock::ActivateTaxa(const std::set<unsigned> &s)
+	{
+	for (std::set<unsigned>::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt)
+		ActivateTaxon(*sIt);
+	return GetNumActiveTaxa();
+	}
+inline unsigned NxsTaxaBlock::InactivateTaxon(unsigned i)
+	{
+	if (i > GetNTax())
+		throw NxsNCLAPIException("Taxon index out of range in InactivateTaxon");
+	inactiveTaxa.insert(i);
+	return GetNumActiveTaxa();
+	}
+inline unsigned NxsTaxaBlock::ActivateTaxon(unsigned i)
+	{
+	if (i > GetNTax())
+		throw NxsNCLAPIException("Taxon index out of range in InactivateTaxon");
+	inactiveTaxa.erase(i);
+	return GetNumActiveTaxa();
+	}
+
+
+#endif
diff --git a/ncl/nxstoken.cpp b/ncl/nxstoken.cpp
new file mode 100644
index 0000000..97de802
--- /dev/null
+++ b/ncl/nxstoken.cpp
@@ -0,0 +1,1058 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <cstdlib>
+#include <cassert>
+#include <sstream>
+#include "ncl/nxstoken.h"
+
+using namespace std;
+
+#define NEW_NXS_TOKEN_READ_CHAR
+
+
+
+
+/*!
+ * Parses a ProcessedNxsCommand assuming that it has the form:
+ *		cmd_name opt_name = opt_val multi_opt_name = (opt_val_1 opt_val2) ;
+ * Errors are produced if opt_names (or multi_opt_names) are repeated within a command.
+ */
+NxsSimpleCommandStrings ProcessedNxsToken::ParseSimpleCmd(
+  const std::vector<ProcessedNxsToken> &pnc,
+	bool convertToLower)
+{
+	NxsSimpleCommandStrings nscs;
+	if (pnc.empty())
+		return nscs;
+
+
+	std::vector<ProcessedNxsToken>::const_iterator wordIt = pnc.begin();
+
+	nscs.cmdName = wordIt->GetToken();
+	if (convertToLower)
+		NxsString::to_lower(nscs.cmdName);
+	nscs.cmdPos = wordIt->GetFilePosInfoConstRef();
+	++wordIt;
+
+	std::string key;
+
+	NxsString errorMsg;
+	NxsTokenPosInfo keyPos = nscs.cmdPos;
+	bool eqRead = false;
+	for (; wordIt != pnc.end(); ++wordIt)
+		{
+		std::string w = wordIt->GetToken();
+		if (convertToLower)
+			NxsString::to_lower(w);
+		if (key.empty())
+			{
+			key = w;
+			if (nscs.HasKey(key))
+				{
+				errorMsg << "Command option (" << key << ") repeated in the " << nscs.cmdName << " command.";
+				throw NxsException(errorMsg, wordIt->GetFilePosInfoConstRef());
+				}
+			keyPos = wordIt->GetFilePosInfoConstRef();
+			}
+		else if (!eqRead)
+			{
+			if (w != "=")
+				{
+				errorMsg << "Expecting an = after the  " << key << " command option of the  " << nscs.cmdName << " command.";
+				throw NxsException(errorMsg, wordIt->GetFilePosInfoConstRef());
+				}
+			eqRead = true;
+			}
+		else {
+			if (w == "(")
+				{
+				++wordIt;
+				w = wordIt->GetToken();
+				std::vector<std::string> vals;
+				NxsSimpleCommandStrings::MatString mat;
+				if (w == "(")
+					{
+					while (w != ")")
+						{
+						if (w != "(")
+							{
+							errorMsg << "Expecting a ( to begin another row of values in the " << key << " command option of the  " << nscs.cmdName << " command.";
+							throw NxsException(errorMsg, keyPos);
+							}
+
+						++wordIt;
+						w = wordIt->GetToken();
+						while (wordIt != pnc.end())
+							{
+							w = wordIt->GetToken();
+							if (convertToLower)
+								NxsString::to_lower(w);
+							if (w == ")")
+								break;
+							vals.push_back(w);
+							++wordIt;
+							}
+						if (wordIt == pnc.end())
+							{
+							errorMsg << "Expecting a ) to end the list of values for the " << key << " command option of the  " << nscs.cmdName << " command.";
+							throw NxsException(errorMsg, keyPos);
+							}
+						++wordIt;
+						mat.push_back(vals);
+						vals.clear();
+						w = wordIt->GetToken();
+						if (wordIt == pnc.end())
+							{
+							errorMsg << "Expecting a ) to end the list of values for the " << key << " command option of the  " << nscs.cmdName << " command.";
+							throw NxsException(errorMsg, keyPos);
+							}
+						}
+					nscs.matOpts[key] = NxsSimpleCommandStrings::MatFromFile(wordIt->GetFilePosInfoConstRef(), mat);
+					}
+				else
+					{
+					while (wordIt != pnc.end())
+						{
+						w = wordIt->GetToken();
+						if (convertToLower)
+							NxsString::to_lower(w);
+						if (w == ")")
+							break;
+						vals.push_back(w);
+						++wordIt;
+						}
+					if (wordIt == pnc.end())
+						{
+						errorMsg << "Expecting a ) to end the list of values for the " << key << " command option of the  " << nscs.cmdName << " command.";
+						throw NxsException(errorMsg, keyPos);
+						}
+					nscs.multiOpts[key] = NxsSimpleCommandStrings::MultiValFromFile(wordIt->GetFilePosInfoConstRef(), vals);
+					}
+				}
+			else
+				{
+				std::string val = w;
+				nscs.opts[key] = NxsSimpleCommandStrings::SingleValFromFile( wordIt->GetFilePosInfoConstRef(), val);
+				}
+			eqRead = false;
+			key.clear();
+			}
+		}
+	if (eqRead)
+		{
+		errorMsg << "Expecting a value after the = sign in the  " << key << " command option of the  " << nscs.cmdName << " command.";
+		throw NxsException(errorMsg, keyPos);
+		}
+	if (!key.empty())
+		{
+		errorMsg << "Expecting an = after the  " << key << " command option of the  " << nscs.cmdName << " command.";
+		throw NxsException(errorMsg, keyPos);
+		}
+	return nscs;
+}
+
+
+
+
+NxsX_UnexpectedEOF::NxsX_UnexpectedEOF(NxsToken &token)
+	:NxsException("Unexpected end-of-file", token)
+	{
+	std::string t = token.GetBlockName();
+	NxsString::to_upper(t);
+	if (!t.empty())
+		msg << " while reading " << t << " block.";
+	}
+
+/*! Writes the command `c` (with all embedded comments) a terminating ; will be written if any tokens are written. */
+bool WriteCommandAsNexus(std::ostream & out, const ProcessedNxsCommand &c)
+	{
+	if (c.empty())
+		return false;
+	out << "   "; /* command indentation  - 1 space*/
+	for(ProcessedNxsCommand::const_iterator cIt = c.begin(); cIt != c.end(); ++cIt)
+		{
+		out << ' ';
+		cIt->WriteAsNexus(out);
+		}
+	out << ";";
+	return true;
+	}
+
+
+
+/*!
+	Convenience function.
+ 	Raises an aprropriate NxsException (by appending  `contextString` to the phrase Unexpected ; "), if incrementing
+		`tokIt` makes it equal to `endIt`
+*/
+void ProcessedNxsToken::IncrementNotLast(std::vector<ProcessedNxsToken>::const_iterator & tokIt, const std::vector<ProcessedNxsToken>::const_iterator &endIt, const char * contextString)
+	{
+	++tokIt;
+	if (tokIt == endIt)
+		{
+		NxsString errormsg = "Unexpected ; ";
+		if (contextString)
+			errormsg.append(contextString);
+		--tokIt;
+		throw NxsException(errormsg, *tokIt);
+		}
+	}
+/*!
+ 	Advance the stream and store it in nextCharInStream.  Deal with the 3 ways of specifying return charaters
+		(nextCharInStream will be set to \n if any of the return styles are found)
+*/
+inline void NxsToken::AdvanceToNextCharInStream()
+	{
+	if (nextCharInStream == EOF)
+		return;
+	nextCharInStream  = (signed char) (inputStream.rdbuf())->sbumpc();
+	posOffBy = -1;
+	if (nextCharInStream == 13 || nextCharInStream == 10)
+		{
+		if(nextCharInStream == 13)
+			{
+			if ((inputStream.rdbuf())->sgetc() == 10)	//peeks at the next char
+				{
+				(inputStream.rdbuf())->sbumpc();
+				posOffBy = -2;
+				}
+			}
+		nextCharInStream = '\n';
+		}
+	}
+
+
+#if defined(NEW_NXS_TOKEN_READ_CHAR)
+/*!
+	returns the character that had been stored in nextCharInStream, but also calls AdvanceToNextCharInStream() so
+	nextCharInStream is advanced.
+	Does all of the fileposition bookkeeping.
+	Throws an NxsX_UnexpectedEOF exception if eof is found but eofAllowed is false.
+*/
+inline char NxsToken::GetNextChar()
+	{
+	//
+	// 	Why this was changed:  calls to tellg seem slow and unnecessary - we're storing filepos in terms of the
+	//	number of times we call sbumpc().
+	//	if we go back to getting the filepos via in.tellg(), remember to call it
+	//	twice after both sgetc() calls in the case of the \13\10 endline
+
+	signed char ch = nextCharInStream;
+	AdvanceToNextCharInStream();
+	if(ch == EOF)
+		{
+		atEOF = true;
+		if (eofAllowed)
+			return '\0';
+		throw NxsX_UnexpectedEOF(*this);
+		}
+	if(ch == '\n')
+		{
+		fileLine++;
+		fileColumn = 1L;
+		atEOL = true;
+		return '\n';
+		}
+	if (ch == '\t')
+		fileColumn += 4 - ((fileColumn - 1)%4);	//@assumes that tab will be 4 in the editor we use
+	else
+		fileColumn++;
+	atEOL = false;
+	return ch;
+	}
+
+#else //	if  !defined(NEW_NXS_TOKEN_READ_CHAR)
+
+/*!
+	Reads next character from in and does all of the following before returning it to the calling function:
+~
+	o if character read is either a carriage return or line feed, the variable line is incremented by one and the
+	  variable col is reset to zero
+	o if character read is a carriage return, and a peek at the next character to be read reveals that it is a line
+	  feed, then the next (line feed) character is read
+	o if either a carriage return or line feed is read, the character returned to the calling function is '\n' if
+	  character read is neither a carriage return nor a line feed, col is incremented by one and the character is
+	  returned as is to the calling function
+	o in all cases, the variable filepos is updated using a call to the tellg function of istream.
+~
+*/
+inline char NxsToken::GetNextChar()
+	{
+	int ch = inputStream.get();
+	int failed = inputStream.bad();
+	if (failed)
+		{
+		errormsg = "Unknown error reading data file (check to make sure file exists)";
+		throw NxsException(errormsg);
+		}
+
+	if (ch == 13 || ch == 10)
+		{
+		fileLine++;
+		fileColumn = 1L;
+
+		if (ch == 13 && (int)inputStream.peek() == 10)
+			ch = inputStream.get();
+
+		atEOL = 1;
+		}
+	else if (ch == EOF)
+		atEOF = 1;
+	else
+		{
+		fileColumn++;
+		atEOL = 0;
+		}
+
+#	if defined(__DECCXX)
+		filepos = 0L;
+#	else
+		file_pos filepos = inputStream.tellg();
+#	endif
+
+	if (atEOF)
+		return '\0';
+	else if (atEOL)
+		return '\n';
+	else
+		return (char)ch;
+	}
+#endif
+
+std::map<std::string, std::string> NxsToken::ParseAsSimpleKeyValuePairs(const ProcessedNxsCommand & tv, const char *cmdName)
+	{
+	std::map<std::string, std::string> kv;
+	std::string key;
+	ProcessedNxsCommand::const_iterator tvIt = tv.begin();
+	ProcessedNxsCommand::const_iterator prevIt;
+	ProcessedNxsCommand::const_iterator endIt = tv.end();
+	while (tvIt != endIt)
+		{
+		key = tvIt->GetToken().c_str();
+		prevIt = tvIt++;
+		if (tvIt == endIt || tvIt->GetToken() != "=")
+			{
+			NxsString m("Expecting = after ");
+			m += key.c_str();
+			m += " in ";
+			m += cmdName;
+			m += " command.";
+			if (tvIt == endIt)
+				throw NxsException(m, prevIt->GetFilePosition(), prevIt->GetLineNumber(), prevIt->GetColumnNumber());
+			else
+				throw NxsException(m, tvIt->GetFilePosition(), tvIt->GetLineNumber(), tvIt->GetColumnNumber());
+			}
+		prevIt = tvIt++;
+		if (tvIt == endIt)
+			{
+			NxsString m("Expecting a value after = in the  ");
+			m += key.c_str();
+			m += " subcommand of the in ";
+			m += cmdName;
+			m += " command.";
+			throw NxsException(m, prevIt->GetFilePosition(), prevIt->GetLineNumber(), prevIt->GetColumnNumber());
+			}
+		kv[key] = tvIt->GetToken();
+		tvIt++;
+		}
+	return kv;
+	}
+
+
+std::vector<ProcessedNxsToken> NxsToken::Tokenize(const std::string & toTokenize)
+    {
+	std::string bogusStr = toTokenize;
+	bogusStr.append(1, '\n');
+	std::istringstream bogusStream(bogusStr);
+	NxsToken bogusToken(bogusStream);
+	bogusToken.GetNextToken();
+	std::vector<ProcessedNxsToken>  tokenVec;
+	while (!bogusToken.AtEOF())
+		{
+		tokenVec.push_back(ProcessedNxsToken(bogusToken));
+		bogusToken.GetNextToken();
+		}
+    return tokenVec;
+    }
+
+
+/*!
+	Reads until ";" and fills the vector of ProcessedNxsToken objects.
+	Note the ";" is not included in the ProcessedNxsCommand, but it can be assumed that the semicolon followed.
+	The NxsToken objects file position will reflect the location of the semicolon.
+*/
+void NxsToken::ProcessAsCommand(ProcessedNxsCommand *tokenVec)
+	{
+	;
+	while (!this->Equals(";"))
+		{
+		if (tokenVec)
+			tokenVec->push_back(ProcessedNxsToken(*this));
+		this->GetNextToken();
+		}
+	}
+
+
+/*!
+	Returns copy of s but with quoting according to the NEXUS Standard (single quotes around the token and all internal
+		single quotes replaced with a pair of single quotes.
+*/
+std::string NxsToken::GetQuoted(const std::string &s)
+	{
+	std::string withQuotes;
+	withQuotes.reserve(s.length() + 4);
+	withQuotes.push_back('\'');
+	for (NxsString::const_iterator sIt = s.begin(); sIt != s.end(); sIt++)
+		{
+		withQuotes.push_back(*sIt);
+		if (*sIt == '\'')
+			withQuotes.push_back('\'');
+		}
+	withQuotes.push_back('\'');
+	return withQuotes;
+	}
+
+/*!
+	Advances the token, and returns the unsigned int that the token represents
+
+ 	Sets errormsg and raises a NxsException on failure.
+	`contextString` is used in error messages:
+		"${contextString} must be a number greater than 0"
+*/
+unsigned NxsToken::DemandPositiveInt(NxsToken &token, NxsString & errormsg, const char *contextString)
+	{
+	token.GetNextToken();
+	int i = -1;
+	try {
+	    i = token.GetToken().ConvertToInt();
+	    }
+	catch (NxsString::NxsX_NotANumber &x)
+	    {
+	    }
+//	int i = atoi(token.GetToken().c_str());
+	if (i <= 0)
+		{
+		errormsg.assign(contextString);
+		errormsg += " must be a number greater than 0. Found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	return (unsigned) i;
+	}
+
+
+/*!
+	Advances the token, and returns the unsigned int that the token represents
+
+ 	Sets errormsg and raises a NxsException on failure.
+	`contextString` is used in error messages:
+		"Expecting ';' to terminate the ${contextString} command"
+*/
+void NxsToken::DemandEndSemicolon(NxsToken &token, NxsString & errormsg, const char *contextString)
+	{
+	token.GetNextToken();
+	if (!token.Equals(";"))
+		{
+		errormsg = "Expecting ';' to terminate the ";
+		errormsg += contextString;
+		errormsg += " command, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	}
+/*!
+	Returns copy of s but with quoting according to the NEXUS Standard (single quotes around the token and all internal
+		single quotes replaced with a pair of single quotes.
+*/
+bool NxsToken::NeedsQuotes(const std::string &s)
+	{
+	for (std::string::const_iterator sIt = s.begin(); sIt != s.end(); sIt++)
+		{
+		const char &c = (*sIt);
+		if (!isgraph(c))
+			return true;
+		else if (strchr("\'[(){}\"-]/\\,;:=*`+<>", c) != NULL)
+			{
+			// ' and [ always need quotes.  other punctuation needs quotes if it is in a word of length > 1
+			if (c == '\'' || c == '[')
+				return true;
+			return (s.length() > 1);
+			}
+		}
+	return false;
+	}
+
+
+
+/*!
+	Sets atEOF and atEOL to false, comment and token to the empty string, fileColumn and fileLine to 1, filepos to 0,
+	labileFlags to 0 and saved and special to the null character. Initializes the istream reference data
+	member in to the supplied istream `i'.
+*/
+NxsToken::NxsToken(
+  istream &i)	/* the istream object to which the token is to be associated */
+  : inputStream(i),
+	eofAllowed(true)
+	{
+	posOffBy = 0;
+	atEOF		= false;
+	atEOL		= false;
+	comment.clear();
+	fileColumn	= 1L;
+	fileLine	= 1L;
+	labileFlags	= 0;
+	saved		= '\0';
+	special		= '\0';
+
+	whitespace[0]  = ' ';
+	whitespace[1]  = '\t';
+	whitespace[2]  = '\n';
+	whitespace[3]  = '\0';
+#	if defined(NEW_NXS_TOKEN_READ_CHAR)
+		nextCharInStream = 'a';	//anything other than EOF will work
+		AdvanceToNextCharInStream();
+#	endif
+    this->isPunctuationFn = &(NxsString::IsNexusPunctuation);
+	}
+
+/*!
+	Nothing needs to be done; all objects take care of deleting themselves.
+*/
+NxsToken::~NxsToken()
+	{
+	}
+
+/*!
+	Reads rest of comment (starting '[' already input) and acts accordingly. If comment is an output comment, and if
+	an output stream has been attached, writes the output comment to the output stream. Otherwise, output comments are
+	simply ignored like regular comments.
+	If the labileFlag bit saveCommandComments is in effect, and we are NOT in the middle of a token then the comment
+		(without the [] braces) will be stored in token.
+	All other comments are stored as embeddedComments.
+	Returns true if a command comment was read and stored as the token
+*/
+bool NxsToken::GetComment()
+	{
+	// Set comment level to 1 initially.  Every ']' encountered reduces
+	// level by one, so that we know we can stop when level becomes 0.
+	//
+	NxsString currentComment;
+	bool command = false;
+
+	bool formerEOFAllowed = eofAllowed;
+	eofAllowed = false;
+	try
+		{
+		char ch = GetNextChar();
+		// See if first character is the output comment symbol ('!')
+		// or command comment symbol (&)
+		//
+		int printing = 0;
+		if (ch == '!')
+			printing = 1;
+		else if (ch == '&' && (labileFlags & saveCommandComments) && token.empty())
+			command = true;
+		currentComment.push_back(ch);
+		if (ch != ']')
+			{
+			int level = 1;
+			for(;;)
+				{
+				ch = GetNextChar();
+				if (ch == ']')
+					{
+					level--;
+					if (level == 0)
+						break;
+					}
+				else if (ch == '[')
+					level++;
+				currentComment.push_back(ch);
+				}
+
+			if (printing)
+				{
+				// Allow output comment to be printed or displayed in most appropriate
+				// manner for target operating system
+				//
+				NxsString foroutput(currentComment.c_str() + 1);
+				comment = foroutput;
+				OutputComment(foroutput);
+				}
+			if (command)
+				token = currentComment;
+			else
+				embeddedComments.push_back(NxsComment(currentComment, GetFileLine(), GetFileColumn()));
+			}
+		}
+	catch (NxsX_UnexpectedEOF & x)
+		{
+		x.msg << " (end-of-file inside comment)";
+		eofAllowed = formerEOFAllowed;
+		throw x;
+		}
+	eofAllowed = formerEOFAllowed ;
+	return command;
+	}
+
+/*!
+	Reads rest of a token surrounded with curly brackets (the starting '{' has already been input) up to and including
+	the matching '}' character. All nested curly-bracketed phrases will be included.
+*/
+void NxsToken::GetCurlyBracketedToken()
+	{
+	bool formerEOFAllowed = eofAllowed;
+	eofAllowed = false;
+	try
+		{
+		int level = 1;
+		while(level > 0)
+			{
+			char ch = GetNextChar();
+			if (ch == '}')
+				level--;
+			else if (ch == '{')
+				level++;
+			AppendToToken(ch);
+			}
+		}
+	catch (NxsX_UnexpectedEOF & x)
+		{
+		x.msg << " (end-of-file inside {} braced statement)";
+		eofAllowed = formerEOFAllowed;
+		throw x;
+		}
+	eofAllowed = formerEOFAllowed ;
+	}
+
+/*!
+	Gets remainder of a double-quoted NEXUS word (the first double quote character was read in already by GetNextToken).
+	This function reads characters until the next double quote is encountered. Tandem double quotes within a
+	double-quoted NEXUS word are not allowed and will be treated as the end of the first word and the beginning of the
+	next double-quoted NEXUS word. Tandem single quotes inside a double-quoted NEXUS word are saved as two separate
+	single quote characters; to embed a single quote inside a double-quoted NEXUS word, simply use the single quote by
+	itself (not paired with another tandem single quote).
+*/
+void NxsToken::GetDoubleQuotedToken()
+	{
+	bool formerEOFAllowed = eofAllowed;
+	eofAllowed = false;
+	try
+		{
+		for(;;)
+			{
+			char ch = GetNextChar();
+			if (ch == '\"')
+				break;
+			else
+				AppendToToken(ch);
+			}
+		}
+	catch (NxsX_UnexpectedEOF & x)
+		{
+		x.msg << " (end-of-file inside \" quoted statement)";
+		eofAllowed = formerEOFAllowed;
+		throw x;
+		}
+	eofAllowed = formerEOFAllowed ;
+	}
+
+/*!
+	Gets remainder of a quoted NEXUS word (the first single quote character was read in already by GetNextToken). This
+	function reads characters until the next single quote is encountered. An exception occurs if two single quotes occur
+	one after the other, in which case the function continues to gather characters until an isolated single quote is
+	found. The tandem quotes are stored as a single quote character in the token NxsString.
+*/
+void NxsToken::GetQuoted()
+	{
+	bool formerEOFAllowed = eofAllowed;
+	eofAllowed = false;
+	long fl = fileLine;
+	long fc = fileColumn;
+
+	try
+		{
+		for(;;)
+			{
+			char ch = GetNextChar();
+			if (ch == '\'')
+				{
+				ch = GetNextChar();
+				if (ch == '\'')
+					AppendToToken(ch);
+				else
+					{
+					saved = ch;
+					break;
+					}
+				}
+			else
+				AppendToToken(ch);
+			}
+		}
+	catch (NxsX_UnexpectedEOF & x)
+		{
+		x.msg << " (end-of-file inside \' quoted token that started on line " << fl<< ", column " <<fc << ')';
+		eofAllowed = formerEOFAllowed;
+		throw x;
+		}
+	eofAllowed = formerEOFAllowed ;
+	}
+
+/*!
+	Reads rest of parenthetical token (starting '(' already input) up to and including the matching ')' character.  All
+	nested parenthetical phrases will be included.
+*/
+void NxsToken::GetParentheticalToken()
+	{
+	// Set level to 1 initially.  Every ')' encountered reduces
+	// level by one, so that we know we can stop when level becomes 0.
+	//
+	int level = 1;
+	std::vector<NxsComment> prevEmbedded = embeddedComments;
+	embeddedComments.clear();
+	char ch;
+	ch = GetNextChar();
+	for(;;)
+		{
+		if (atEOF)
+			break;
+
+		if (ch == '\'')
+			{
+			AppendToToken('\'');
+			GetQuoted();
+			AppendToToken('\'');
+			ch = saved;
+			saved = '\0';
+			if (atEOF)
+				{
+				if (ch == ')' && level == 1)
+					{
+					AppendToToken(')');
+					break;
+					}
+				else
+					{
+					NxsX_UnexpectedEOF x(*this);
+					x.msg << "(end-of-file inside () statement)";
+					}
+				}
+			continue;
+			}
+		if (ch == '[')
+			{
+			GetComment();
+			assert(embeddedComments.size() == 1);
+			AppendToToken('[');
+			const std::string & body =  embeddedComments[0].GetText();
+			token.append(body.begin(), body.end());
+			AppendToToken(']');
+			embeddedComments.clear();
+
+			}
+		else
+			{
+			if (ch == ')')
+				level--;
+			else if (ch == '(')
+				level++;
+
+			AppendToToken(ch);
+			}
+
+		if (level == 0)
+			break;
+		ch = GetNextChar();
+		}
+	embeddedComments = prevEmbedded;
+	}
+
+/*!
+	Returns true if token begins with the capitalized portion of `s' and, if token is longer than `s', the remaining
+	characters match those in the lower-case portion of `s'. The comparison is case insensitive. This function should be
+	used instead of the Begins function if you wish to allow for abbreviations of commands and also want to ensure that
+	user does not type in a word that does not correspond to any command.
+*/
+bool NxsToken::Abbreviation(
+  NxsString s)	/* the comparison string */
+	{
+	int k;
+	int slen = (int)s.size();
+	int tlen = (int)token.size();
+	char tokenChar, otherChar;
+
+	// The variable mlen refers to the "mandatory" portion
+	// that is the upper-case portion of s
+	//
+	int mlen;
+	for (mlen = 0; mlen < slen; mlen++)
+		{
+		if (!isupper(s[mlen]))
+			break;
+		}
+
+	// User must have typed at least mlen characters in
+	// for there to even be a chance at a match
+	//
+	if (tlen < mlen)
+		return false;
+
+	// If user typed in more characters than are contained in s,
+	// then there must be a mismatch
+	//
+	if (tlen > slen)
+		return false;
+
+	// Check the mandatory portion for mismatches
+	//
+	for (k = 0; k < mlen; k++)
+		{
+		tokenChar = (char)toupper( token[k]);
+		otherChar = s[k];
+		if (tokenChar != otherChar)
+			return false;
+		}
+
+	// Check the auxiliary portion for mismatches (if necessary)
+	//
+	for (k = mlen; k < tlen; k++)
+		{
+		tokenChar = (char)toupper( token[k]);
+		otherChar = (char)toupper( s[k]);
+		if (tokenChar != otherChar)
+			return false;
+		}
+
+	return true;
+	}
+
+/*!
+	Returns true if token NxsString begins with the NxsString `s'. This function should be used instead of the Equals
+	function if you wish to allow for abbreviations of commands.
+*/
+bool NxsToken::Begins(
+  NxsString s,			/* the comparison string */
+  bool respect_case)	/* determines whether comparison is case sensitive */
+	{
+	unsigned k;
+	char tokenChar, otherChar;
+
+	unsigned slen = (unsigned)s.size();
+	if (slen > token.size())
+		return false;
+
+	for (k = 0; k < slen; k++)
+		{
+		if (respect_case)
+			{
+			tokenChar = token[k];
+			otherChar = s[k];
+			}
+		else
+			{
+			tokenChar = (char)toupper( token[k]);
+			otherChar = (char)toupper( s[k]);
+			}
+
+		if (tokenChar != otherChar)
+			return false;
+		}
+
+	return true;
+	}
+
+/*!
+	Reads characters from in until a complete token has been read and stored in token. GetNextToken performs a number
+	of useful operations in the process of retrieving tokens:
+~
+	o any underscore characters encountered are stored as blank spaces (unless the labile flag bit preserveUnderscores
+	  is set)
+	o if the first character of the next token is an isolated single quote, then the entire quoted NxsString is saved
+	  as the next token
+	o paired single quotes are automatically converted to single quotes before being stored
+	o comments are handled automatically (normal comments are treated as whitespace and output comments are passed to
+	  the function OutputComment which does nothing in the NxsToken class but can be overridden in a derived class to
+	  handle these in an appropriate fashion)
+	o leading whitespace (including comments) is automatically skipped
+	o if the end of the file is reached on reading this token, the atEOF flag is set and may be queried using the AtEOF
+	  member function
+	o punctuation characters are always returned as individual tokens (see the Maddison, Swofford, and Maddison paper
+	  for the definition of punctuation characters) unless the flag ignorePunctuation is set in labileFlags,
+	  in which case the normal punctuation symbols are treated just like any other darkspace character.
+~
+	The behavior of GetNextToken may be altered by using labile flags. For example, the labile flag saveCommandComments
+	can be set using the member function SetLabileFlagBit. This will cause comments of the form [&X] to be saved as
+	tokens (without the square brackets), but only for the aquisition of the next token. Labile flags are cleared after
+	each application.
+*/
+void NxsToken::GetNextToken()
+	{
+	ResetToken();
+
+	char ch = ' ';
+	if (saved == '\0' || IsWhitespace(saved))
+		{
+		// Skip leading whitespace
+
+		while( IsWhitespace(ch) && !atEOF)
+			ch = GetNextChar();
+		saved = ch;
+		}
+
+	for(;;)
+		{
+		// Break now if singleCharacterToken mode on and token length > 0.
+		//
+		if (labileFlags & singleCharacterToken && !token.empty())
+			break;
+
+		// Get next character either from saved or from input stream.
+		//
+		if (saved != '\0')
+			{
+			ch = saved;
+			saved = '\0';
+			}
+		else
+			ch = GetNextChar();
+		// Break now if we've hit EOF.
+		//
+		if (atEOF)
+			break;
+		if (strchr("\n\r \t", ch) != NULL)//!isgraph(ch))
+			{
+			if (ch == '\n' && labileFlags & newlineIsToken)
+				{
+				if (token.empty())
+					{
+					atEOL = 1;
+					AppendToToken(ch);
+					}
+				else
+					{
+					// Newline came after token, save newline until next time when it will be
+					// reported as a separate token.
+					//
+					atEOL = 0;
+					saved = ch;
+					}
+				break;
+				}
+			else
+				{
+				// Break only if we've begun adding to token (remember, if we hit a comment before a token,
+				// there might be further white space between the comment and the next token).
+				//
+				if (!token.empty())
+					break;
+				}
+			}
+		else if (ch == '_')
+			{
+			// If underscores are discovered in unquoted tokens, they should be
+			// automatically converted to spaces.
+			//
+			if (!(labileFlags & preserveUnderscores))
+				ch = ' ';
+			AppendToToken(ch);
+			}
+
+		else if (ch == '[')
+			{
+			// Get rest of comment and deal with it, but notice that we only break if the comment ends a token,
+			// not if it starts one (comment counts as whitespace). In the case of command comments
+			// (if saveCommandComment) GetComment will add to the token NxsString, causing us to break because
+			// token.size() will be greater than 0.
+			comment.clear();
+			if (GetComment())
+				break;
+			}
+		else if (IsPunctuation(ch))
+			{
+			if (ch == '(' && (labileFlags & parentheticalToken))
+				{
+				AppendToToken(ch);
+				GetParentheticalToken();
+				}
+			else if (ch == '{' && (labileFlags & curlyBracketedToken))
+				{
+				AppendToToken(ch);
+				GetCurlyBracketedToken();
+				}
+			else if (ch == '\"' && (labileFlags & doubleQuotedToken))
+				GetDoubleQuotedToken();
+			else if (ch == '\'' && token.empty())
+				GetQuoted();
+			else
+				{
+				//save if we have started a token, consider the punctuation to
+				// be the full token.
+				if (token.size() > 0)
+					saved = ch;
+				else
+					AppendToToken(ch);
+				}
+			break;
+			}
+		else
+			AppendToToken(ch);
+		}
+
+	labileFlags = 0;
+	}
+
+/*!
+	Strips whitespace from currently-stored token. Removes leading, trailing, and embedded whitespace characters.
+*/
+void NxsToken::StripWhitespace()
+	{
+	NxsString s;
+	for (unsigned j = 0; j < token.size(); j++)
+		{
+		if (IsWhitespace( token[j]))
+			continue;
+		s += token[j];
+		}
+	token = s;
+	}
+
+/*!
+	Converts all alphabetical characters in token to upper case.
+*/
+void NxsToken::ToUpper()
+	{
+	for (unsigned i = 0; i < token.size(); i++)
+		token[i] = (char)toupper(token[i]);
+	}
+
+
+void NxsToken::UseNewickTokenization(bool v)
+    {
+    if (v)
+        {
+        this->isPunctuationFn = &(NxsString::IsNewickPunctuation);
+        }
+    else
+        {
+        this->isPunctuationFn = &(NxsString::IsNexusPunctuation);
+        }
+    }    
diff --git a/ncl/nxstoken.h b/ncl/nxstoken.h
new file mode 100644
index 0000000..e8e77f2
--- /dev/null
+++ b/ncl/nxstoken.h
@@ -0,0 +1,874 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSTOKEN_H
+#define NCL_NXSTOKEN_H
+
+#include "ncl/nxsexception.h"
+class NxsToken;
+
+class NxsX_UnexpectedEOF: public NxsException
+	{
+	public:
+		NxsX_UnexpectedEOF(NxsToken &);
+	};
+
+
+/*!
+     General notes on NexusTokenizing
+
+
+  File position information (pos, line and column) refer to the end of the token.
+
+  Note 1:  the GetEmbeddedComments methods of ProcessedNxsToken and NxsToken can be tricky to use if detailed
+    position location of the comment is required.  A vector of "embedded comments" in the NCL context is a collection of
+    all comments that were encountered during a GetNextToken operation.  The behavior depends on whether the tokenizer
+    can tell if a section of text is has the potential to span comment. Potentially comment-spanning tokens have to be
+    read until a token-breaker is found.  Thus they include trailing comments.  Thus it is not always easy (or possible)
+    for client code to determine  whether a specifie comment belongs "with" a particular NEXUS token rather than the
+    previous or next token.
+    For example:
+  Text                            Result as (token, {"embedded comment"}) pairs    Explanation
+  ============================    =============================================   =====================================
+  ;a[1]b;                         (;, {}), (ab, {1}), (;, {})                     ab is a comment-spanning token
+  ;[1]a[2]b;                      (;, {}), (ab, {1, 2}), (;, {})                  tokenizer realizes that ; is always a single token
+                                                                                    so [1] is not encountered until the second GetNextToken() call.
+  a[1];[2]b;                      (a, {1}), (;, {}) (b, {2}), (;, {})             First GetNextToken() call reads "a" token until ; (thus reading "[1]")
+                                                                                    ; is a single character token, so no comments are read, thus making
+                                                                                    [2] part of the third GetNextToken call().
+
+    In some cases the comment position information and token position information may reveal the exact location of the
+    comments.  Fortunately the relative order of comments is retained and the exact position is rarely needed.\
+
+  Note 2: Using the NxsToken class with the saveCommandComments LabileFlag causes [&comment text here] comments to be
+    returned as tokens ONLY if they are not preceded by potentially comment-spanning tokens. This "feature" is new to
+	 NCL v2.1 and is the result of a bug-fix (previous versions of NCL incorrectly broke tokens at the start of any comment).
+
+  Text                      Result as in saveCommandComments mode                Explanation
+  ========================= =============================================      =====================================
+  =[&R](1,                  ("=",{}) ("&R", {}), ("(",{}), ("1",{}), (",",{})  [&R] is not in the middle of potentially-comment-spanning token.
+  a[&R]b,                   ("ab",{"&R"}), (",",{})                            [&R] is in the middle of comment-spanning token "ab"
+  a[&R],                    ("a",{"&R"}), (",",{})                             [&R] is in on the trailing end of a potentially-comment-spanning token "a"
+                                                                                the tokenizer
+    This wart makes it more tedious to deal with command comments. However it is tolerable becuase the only supported use of command
+    comments in NCL is after single-character tokens (for example after = in a tree descpription).
+
+    The NHX command comments are not processed by NCL, but they occur in contexts in which it will be possible to determine
+    the correct location of the comment  (though it is necessary to check the embedded comments when processing NHX trees):
+
+ Text                      Result as NOT IN saveCommandComments mode                        Explanation
+ ========================= ===================================================      =====================================
+ ):3.5[&&NHXtext],         (")",{}) (":", {}), ("3.5",{"&&NHXtext"}), (",",{})      "3.5" is potentially-comment-spanning, but the comment still
+                                                                                      is stored with other metadata for the same edge.
+ )[&&NHXtext],             (")",{}) (",", {"&&NHXtext"})                            NHX comment is parsed with the second token, but
+                                                                                      because , is NOT potentially-comment-spanning
+                                                                                      know that [&&NHXtext] must have preceded the comma (the
+                                                                                      token and comment column numbers would also make this clear.
+*/
+
+/*!
+ New in 2.1
+	 - See Note 2 above (bug-fix, but wart introduced).  This could lead to loss of backward compatibility if client
+		code relies of saveCommandComments in contexts in which command comments occur within potentially comment-spanning
+       tokens.
+	 - NxsComment class.
+    - Comments are stored in tokenization (the GetNextToken() call will trash the previous comments, so client code
+		must store comments if they are needed permanently).
+	 - NxsToken::SetEOFAllowed method added and SetEOFAllowed(false) is called when entering a block.  This means that
+		when parsing block contents the NxsToken tokenizer will raise an NxsException if it runs out of file (thus
+		Block reader code no longer needs to check for atEOF() constantly to issue an appropriate error).
+	 - ProcessedNxsToken class, NxsToken:ProcessAsSimpleKeyValuePairs, and NxsToken:ProcessAsCommand methods.  This makes
+		it easier to parse commands (by allowing random access to the tokens in a command). These methods are not appropriate
+		for very long commands (such as MATRIX) or commands that require fiddling with the tokenizing rules (such as disabling
+		the hyphen as a token breaker)
+	 - lazy NxsToken::GetFilePosition() and low level io operations dramatically speed up tokenization (~10-20 times faster).
+	 - some other utility functions were added, and some refactoring (delegation to NxsString) was done to clean up
+*/
+
+
+
+
+/*!
+   Storage for a comment text and (end of the comment) file position information
+*/
+class NxsComment
+	{
+	public:
+		NxsComment(const std::string & s, long lineNumber, long colNumber)
+			:body(s),
+			line(lineNumber),
+			col(colNumber)
+			{}
+		long		GetLineNumber() const
+			{
+			return line;
+			}
+		long 		GetColumnNumber() const
+			{
+			return col;
+			}
+		const std::string & GetText() const
+			{
+			return body;
+			}
+		void WriteAsNexus(std::ostream &out) const
+			{
+			out << '[' << body << ']';
+			}
+	private:
+		std::string body;
+		long line;
+		long col;
+	};
+
+
+/*!
+   Storage for a file position, line number and column number.
+*/
+class NxsTokenPosInfo
+	{
+	public:
+		NxsTokenPosInfo()
+			:pos(0),
+			line(-1),
+			col(-1)
+			{}
+		NxsTokenPosInfo(file_pos position, long lineno, long columnno)
+			:pos(position),
+			line(lineno),
+			col(columnno)
+			{}
+		NxsTokenPosInfo(const NxsToken &);
+
+		file_pos 	GetFilePosition() const
+			{
+			return pos;
+			}
+
+		long		GetLineNumber() const
+			{
+			return line;
+			}
+
+		long 		GetColumnNumber() const
+			{
+			return col;
+			}
+
+
+		file_pos	pos;	/* current file position */
+		long		line;	/* current line in file */
+		long		col;	/* column of current line */
+	};
+
+
+/*!
+	A structure for storing the name of a command and to maps of option names
+ 		to value strings.
+	Produced by ProcessedNxsToken::ParseSimpleCmd (see that commands comments for rules on how it parses a NEXUS
+	command into a NxsSimpleCommandStrings struct).
+*/
+class NxsSimpleCommandStrings
+	{
+	public:
+		typedef std::vector<std::string> VecString;
+		typedef std::list<VecString> MatString;
+		typedef std::pair<NxsTokenPosInfo, std::string> SingleValFromFile;
+		typedef std::pair<NxsTokenPosInfo, VecString > MultiValFromFile;
+		typedef std::pair<NxsTokenPosInfo, MatString > MatFromFile;
+		typedef std::map<std::string, SingleValFromFile> StringToValFromFile;
+		typedef std::map<std::string,  MultiValFromFile> StringToMultiValFromFile;
+		typedef std::map<std::string,  MatFromFile> StringToMatFromFile;
+
+		// Looks for k in opts and multiOpts. Returns all of the values
+		// 	for the command option (will be an empty vector of strings if the option was not found).
+		// Case-sensitive!
+		// If an option is in multiOpts and opts, then only the value from opts will be returned!
+		MultiValFromFile GetOptValue(const std::string &k) const
+			{
+			MultiValFromFile mvff;
+			StringToValFromFile::const_iterator s = this->opts.find(k);
+			if (s != this->opts.end())
+				{
+				const SingleValFromFile & v(s->second);
+				mvff.first = v.first;
+				mvff.second.push_back(v.second);
+				}
+			else
+				{
+				StringToMultiValFromFile::const_iterator m = this->multiOpts.find(k);
+				if (m != this->multiOpts.end())
+					{
+					const MultiValFromFile & mv(m->second);
+					mvff.first = mv.first;
+					mvff.second  = mv.second;
+					}
+				}
+			return mvff;
+			}
+
+		MatFromFile GetMatOptValue(const std::string & k) const
+			{
+			StringToMatFromFile::const_iterator mIt = this->matOpts.find(k);
+			if (mIt ==  this->matOpts.end())
+				return MatFromFile();
+			return mIt->second;
+			}
+
+		bool HasKey(const std::string k) const
+			{
+			if (this->opts.find(k) !=  this->opts.end())
+				return true;
+			return ((this->multiOpts.find(k) !=  this->multiOpts.end()) || (this->matOpts.find(k) !=  this->matOpts.end()));
+			}
+
+	  	std::string cmdName;
+	  	NxsTokenPosInfo cmdPos;
+		StringToValFromFile opts;
+		StringToMultiValFromFile multiOpts;
+		StringToMatFromFile matOpts;
+	};
+
+/*!
+   Storage for a single NEXUS token, and embedded comments, along with end-of-the-token file position information.
+*/
+class ProcessedNxsToken
+	{
+	public:
+		static void IncrementNotLast(std::vector<ProcessedNxsToken>::const_iterator & it,
+									 const std::vector<ProcessedNxsToken>::const_iterator &endIt,
+									 const char * context);
+		static NxsSimpleCommandStrings ParseSimpleCmd(const std::vector<ProcessedNxsToken> &, bool convertToLower);
+
+
+		ProcessedNxsToken(const NxsToken &t);
+
+		ProcessedNxsToken(std::string &s)
+			:token(s)
+			{}
+
+		ProcessedNxsToken(std::string &s, file_pos position,long lineno, long columnno)
+			:token(s),
+			posInfo(position, lineno, columnno)
+			{}
+
+		std::string GetToken() const
+			{
+			return token;
+			}
+
+		const std::vector<NxsComment> & GetEmbeddedComments() const
+			{
+			return embeddedComments;
+			}
+
+		NxsTokenPosInfo 	GetFilePosInfo() const
+			{
+			return posInfo;
+			}
+		const NxsTokenPosInfo & GetFilePosInfoConstRef() const
+			{
+			return posInfo;
+			}
+
+		file_pos 	GetFilePosition() const
+			{
+			return posInfo.GetFilePosition();
+			}
+
+		long		GetLineNumber() const
+			{
+			return posInfo.GetLineNumber();
+			}
+
+		long 		GetColumnNumber() const
+			{
+			return posInfo.GetColumnNumber();
+			}
+
+		bool		Equals(const char *c) const
+			{
+			return NxsString::case_insensitive_equals(token.c_str(), c);
+			}
+		bool		EqualsCaseSensitive(const char *c) const
+			{
+			return (strcmp(token.c_str(), c) == 0);
+			}
+
+		void 		SetEmbeddedComments(const std::vector<NxsComment> & c)
+			{
+			embeddedComments = c;
+			}
+
+		void WriteAsNexus(std::ostream &out) const
+			{
+			for(std::vector<NxsComment>::const_iterator cIt = embeddedComments.begin(); cIt != embeddedComments.end(); ++cIt)
+				cIt->WriteAsNexus(out);
+			out << NxsString::GetEscaped(token);
+			}
+	private:
+		std::string token;
+		NxsTokenPosInfo posInfo;
+		std::vector<NxsComment> embeddedComments; /* comments that were processed in the same GetToken operation that created this token. */
+	};
+
+/*!
+  ProcessedNxsCommand is merely of a collection of ProcessedNxsToken objects. The NxsToken object can use a ; as a
+	separator to parse of its input stream until the next ";" and return a ProcessedNxsCommand.
+
+	See NxsToken::ProcessAsCommand method.
+*/
+typedef std::vector<ProcessedNxsToken> ProcessedNxsCommand;
+bool WriteCommandAsNexus(std::ostream &, const ProcessedNxsCommand &);
+
+
+/**---------------------------------------------------------------------------------------------------------------------
+	NxsToken objects are used by NxsReader to extract words (tokens) from a NEXUS data file. NxsToken objects know to
+	correctly skip NEXUS comments and understand NEXUS punctuation, making reading a NEXUS file as simple as repeatedly
+	calling the GetNextToken() function and then interpreting the token returned. If the token object is not attached
+	to an input stream, calls to GetNextToken() will have no effect. If the token object is not attached to an output
+	stream, output comments will be discarded (i.e., not output anywhere) and calls to Write or Writeln will be
+	ineffective. If input and output streams have been attached to the token object, however, tokens are read one at a
+	time from the input stream, and comments are correctly read and either written to the output stream (if an output
+	comment) or ignored (if not an output comment). Sequences of characters surrounded by single quotes are read in as
+	single tokens. A pair of adjacent single quotes are stored as a single quote, and underscore characters are stored
+	as blanks.
+*/
+class NxsToken
+	{
+	public:
+		static std::string	EscapeString(const std::string &);
+		static bool 		NeedsQuotes(const std::string &);
+		static std::string	GetQuoted(const std::string &);
+		static void 		DemandEndSemicolon(NxsToken &token, NxsString & errormsg, const char *contextString);
+		static unsigned 	DemandPositiveInt(NxsToken &token, NxsString & errormsg, const char *contextString);
+		static std::map<std::string, std::string> ParseAsSimpleKeyValuePairs(const ProcessedNxsCommand & tv, const char *cmdName);
+
+		static std::vector<ProcessedNxsToken> Tokenize(const std::string & );
+
+		enum NxsTokenFlags	/* For use with the variable labileFlags */
+			{
+			saveCommandComments		= 0x0001,	/* if set, command comments of the form [&X] are not ignored but are instead saved as regular tokens (without the square brackets, however) */
+			parentheticalToken		= 0x0002,	/* if set, and if next character encountered is a left parenthesis, token will include everything up to the matching right parenthesis */
+			curlyBracketedToken		= 0x0004,	/* if set, and if next character encountered is a left curly bracket, token will include everything up to the matching right curly bracket */
+			doubleQuotedToken		= 0x0008,	/* if set, grabs entire phrase surrounded by double quotes */
+			singleCharacterToken	= 0x0010,	/* if set, next non-whitespace character returned as token */
+			newlineIsToken			= 0x0020,	/* if set, newline character treated as a token and atEOL set if newline encountered */
+			tildeIsPunctuation		= 0x0040,	/* if set, tilde character treated as punctuation and returned as a separate token */
+			useSpecialPunctuation	= 0x0080,	/* if set, character specified by the data member special is treated as punctuation and returned as a separate token */
+			hyphenNotPunctuation	= 0x0100,	/* if set, the hyphen character is not treated as punctutation (it is normally returned as a separate token) */
+			preserveUnderscores		= 0x0200,	/* if set, underscore characters inside tokens are not converted to blank spaces (normally, all underscores are automatically converted to blanks) */
+			ignorePunctuation		= 0x0400	/* if set, the normal punctuation symbols are treated the same as any other darkspace characters */
+			};
+
+		NxsString		errormsg;
+
+						NxsToken(std::istream &i);
+		virtual			~NxsToken();
+
+		bool			AtEOF();
+		bool			AtEOL();
+		bool			Abbreviation(NxsString s);
+		bool			Begins(NxsString s, bool respect_case = false);
+		void			BlanksToUnderscores();
+		bool			Equals(NxsString s, bool respect_case = false) const;
+		bool		EqualsCaseSensitive(const char *c) const
+			{
+			return (strcmp(token.c_str(), c) == 0);
+			}
+
+		long			GetFileColumn() const;
+		file_pos		GetFilePosition() const;
+		long			GetFileLine() const;
+		void			GetNextToken();
+		NxsString		GetToken(bool respect_case = true);
+		const char		*GetTokenAsCStr(bool respect_case = true);
+		const NxsString	&GetTokenReference() const;
+		int				GetTokenLength() const;
+		bool			IsPlusMinusToken();
+		bool			IsPunctuationToken();
+		bool			IsWhitespaceToken();
+		bool			IsPlusMinusToken(const std::string & t);
+		bool			IsPunctuationToken(const std::string & t);
+		bool			IsWhitespaceToken(const std::string & t);
+		std::map<std::string, std::string> ProcessAsSimpleKeyValuePairs(const char *cmdName);
+		void 			ProcessAsCommand(ProcessedNxsCommand *tokenVec);
+		void			ReplaceToken(const NxsString s);
+		void			ResetToken();
+		void			SetSpecialPunctuationCharacter(char c);
+		void			SetLabileFlagBit(int bit);
+		bool			StoppedOn(char ch);
+		void			StripWhitespace();
+		void			ToUpper();
+		void			Write(std::ostream &out);
+		void			Writeln(std::ostream &out);
+
+		virtual void	OutputComment(const NxsString &msg);
+
+		void			SetEOFAllowed(bool e)
+			{
+			eofAllowed = e;
+			}
+		bool			GetEOFAllowed() const
+			{
+			return eofAllowed;
+			}
+		void			SetBlockName(const char *);
+		std::string 	GetBlockName();
+		const std::vector<NxsComment> & GetEmbeddedComments() const
+			{
+			return embeddedComments;
+			}
+		char			PeekAtNextChar() const;
+		
+		/// Calling with `true` will force the NxsToken to only consider newick's
+		//		punctuation characters to be punctuation (newick's punctuation
+		//		chars are ()[]':;, this is a subset of NEXUS punctuation.
+		//	Calling with `false` will restore NEXUS punctuation rules.
+		void UseNewickTokenization(bool v);
+
+	protected:
+
+		void			AppendToComment(char ch);
+		void			AppendToToken(char ch);
+		bool			GetComment();
+		void			GetCurlyBracketedToken();
+		void			GetDoubleQuotedToken();
+		void			GetQuoted();
+		void			GetParentheticalToken();
+		bool			IsPunctuation(char ch);
+		bool			IsWhitespace(char ch);
+
+	private:
+		void AdvanceToNextCharInStream();
+		char			GetNextChar();
+		//char ReadNextChar();
+
+		std::istream	&inputStream;		/* reference to input stream from which tokens will be read */
+		signed char		nextCharInStream;
+		file_pos		posOffBy;			/* offset of the file pos (according to the stream) and the tokenizer (which is usually a character or two behind, due to saved chars */
+		file_pos		usualPosOffBy;		/* default of posOffBy.  Usually this is -1, but it can be positive if a tokenizer is created from a substring of the file */
+		long			fileLine;			/* current file line */
+		long			fileColumn;			/* current column in current line (refers to column immediately following token just read) */
+		NxsString		token;				/* the character buffer used to store the current token */
+		NxsString		comment;			/* temporary buffer used to store output comments while they are being built */
+		bool			eofAllowed;
+		signed char		saved;				/* either '\0' or is last character read from input stream */
+		bool			atEOF;				/* true if end of file has been encountered */
+		bool			atEOL;				/* true if newline encountered while newlineIsToken labile flag set */
+		char			special;			/* ad hoc punctuation character; default value is '\0' */
+		int				labileFlags;		/* storage for flags in the NxsTokenFlags enum */
+		char			whitespace[4];		/* stores the 3 whitespace characters: blank space, tab and newline */
+		std::string 	currBlock;
+		std::vector<NxsComment>		embeddedComments;
+		typedef bool (* CharPredFunc)(const char);
+		CharPredFunc    isPunctuationFn;
+	};
+
+typedef NxsToken NexusToken;
+
+
+inline ProcessedNxsToken::ProcessedNxsToken(const NxsToken &t)
+	:token(t.GetTokenReference()),
+	posInfo(t)
+	{}
+
+inline NxsTokenPosInfo::NxsTokenPosInfo(const NxsToken &t)
+	:pos(t.GetFilePosition()),
+	line(t.GetFileLine()),
+	col(t.GetFileColumn())
+	{}
+
+/*!
+	Stores the current block name (for better error reporting only).  Use NULL to clear the currBlock name.
+*/
+inline void NxsToken::SetBlockName(const char *c)
+	{
+	if (c == 0L)
+		currBlock.clear();
+	else
+		currBlock.assign(c);
+	}
+
+/*!
+	Returns the token's block name (for better error reporting)
+*/
+inline std::string NxsToken::GetBlockName()
+	{
+	return currBlock;
+	}
+
+/*!
+	Returns copy of s but with quoting according to the NEXUS Standard iff s needs to be quoted.
+*/
+inline std::string NxsToken::EscapeString(const std::string &s)
+	{
+	return NxsString::GetEscaped(s);
+	}
+
+/*!
+	Returns the token for functions that only need read only access - faster than GetToken.
+*/
+inline const NxsString &NxsToken::GetTokenReference() const
+	{
+	return token;
+	}
+
+/**
+  This function is called whenever an output comment (i.e., a comment beginning with an exclamation point) is found
+	in the data file.
+
+  This base-class version of OutputComment suppresses these messages. You can override this virtual function to display
+    the output comment in the most appropriate way for application platform you are supporting.
+*/
+inline void NxsToken::OutputComment(
+  const NxsString &)	/* the contents of the printable comment discovered in the NEXUS data file */
+	{
+	}
+
+/*!
+	Adds `ch' to end of comment NxsString.
+*/
+inline void NxsToken::AppendToComment(
+  char ch)	/* character to be appended to comment */
+	{
+	comment += ch;
+	}
+
+/*!
+	Adds `ch' to end of current token.
+*/
+inline void NxsToken::AppendToToken(
+  char ch)	/* character to be appended to token */
+	{
+	token.push_back(ch);
+	}
+
+
+/*!
+	Returns true if character supplied is considered a whitespace character. Note: treats '\n' as darkspace if labile
+	flag newlineIsToken is in effect.
+*/
+inline bool NxsToken::IsWhitespace(
+  char ch)	/* the character in question */
+	{
+	bool ws = false;
+
+	// If ch is found in the whitespace array, it's whitespace
+	//
+	if (strchr(whitespace, ch) != NULL)
+		ws = true;
+
+	// Unless of course ch is the newline character and we're currently
+	// treating newlines as darkspace!
+	//
+	if (labileFlags & newlineIsToken && ch == '\n')
+		ws = false;
+
+	return ws;
+	}
+
+/*!
+	Returns true if and only if last call to GetNextToken encountered the end-of-file character (or for some reason the
+	input stream is now out of commission).
+*/
+inline bool NxsToken::AtEOF()
+	{
+	return atEOF;
+	}
+
+/*!
+	Returns true if and only if last call to GetNextToken encountered the newline character while the newlineIsToken
+	labile flag was in effect.
+*/
+inline bool NxsToken::AtEOL()
+	{
+	return atEOL;
+	}
+
+/*!
+	Converts all blanks in token to underscore characters. Normally, underscores found in the tokens read from a NEXUS
+	file are converted to blanks automatically as they are read; this function reverts the blanks back to underscores.
+*/
+inline void NxsToken::BlanksToUnderscores()
+	{
+	token.BlanksToUnderscores();
+	}
+
+/*!
+	Returns value stored in `filecol', which keeps track of the current column in the data file (i.e., number of
+	characters since the last new line was encountered).
+*/
+inline long  NxsToken::GetFileColumn() const
+	{
+	return fileColumn;
+	}
+
+/*!
+	Returns value stored in filepos, which keeps track of the current position in the data file (i.e., number of
+	characters since the beginning of the file).  Note: for Metrowerks compiler, you must use the offset() method of
+	the streampos class to use the value returned.
+*/
+inline file_pos  NxsToken::GetFilePosition() const
+	{
+	return inputStream.rdbuf()->pubseekoff(0,std::ios::cur, std::ios::in) + posOffBy;
+	}
+
+/*!
+	Returns value stored in `fileline', which keeps track of the current line in the data file (i.e., number of new
+	lines encountered thus far).
+*/
+inline long  NxsToken::GetFileLine() const
+	{
+	return fileLine;
+	}
+
+/*!
+	Returns the data member `token'. Specifying false for`respect_case' parameter causes all characters in `token'
+	to be converted to upper case before `token' is returned. Specifying true results in GetToken returning exactly
+	what it read from the file.
+*/
+inline NxsString NxsToken::GetToken(
+  bool respect_case)	/* determines whether token is converted to upper case before being returned */
+	{
+	if (!respect_case)
+		ToUpper();
+
+	return token;
+	}
+
+/*!
+	Returns the data member `token' as a C-style string. Specifying false for`respect_case' parameter causes all
+	characters in `token' to be converted to upper case before the `token' C-string is returned. Specifying true
+	results in GetTokenAsCStr returning exactly what it read from the file.
+*/
+inline const char *NxsToken::GetTokenAsCStr(
+  bool respect_case)	/* determines whether token is converted to upper case before being returned */
+	{
+	if (!respect_case)
+		ToUpper();
+
+	return token.c_str();
+	}
+
+/*!
+	Returns token.size().
+*/
+inline int NxsToken::GetTokenLength() const
+	{
+	return (int)token.size();
+	}
+
+/*!
+	Returns true if current token is a single character and this character is either '+' or '-'.
+*/
+inline bool NxsToken::IsPlusMinusToken()
+	{
+	return IsPlusMinusToken(token);
+	}
+
+/*!
+	Returns true if t is a single character and this character is either '+' or '-'.
+*/
+inline bool NxsToken::IsPlusMinusToken(const std::string &t)
+	{
+	return (t.size() == 1 && ( t[0] == '+' || t[0] == '-') );
+	}
+
+
+/*!
+	Returns true if character supplied is considered a punctuation character. The following twenty characters are
+	considered punctuation characters:
+>
+	()[]{}/\,;:=*'"`+-<>
+>
+	Exceptions:
+~
+	o The tilde character ('~') is also considered punctuation if the tildeIsPunctuation labile flag is set
+	o The special punctuation character (specified using the SetSpecialPunctuationCharacter) is also considered
+	  punctuation if the useSpecialPunctuation labile flag is set
+	o The hyphen (i.e., minus sign) character ('-') is not considered punctuation if the hyphenNotPunctuation
+	  labile flag is set
+~
+	Use the SetLabileFlagBit method to set one or more NxsLabileFlags flags in `labileFlags'
+*/
+inline bool NxsToken::IsPunctuation(
+  char ch)	/* the character in question */
+	{
+
+	// PAUP 4.0b10
+	//  o allows ]`<> inside taxon names
+	//  o allows `<> inside taxset names
+	//
+	if (isPunctuationFn(ch))
+		{
+		if  (labileFlags & hyphenNotPunctuation)
+#			if defined(NCL_VERSION_2_STYLE_HYPHEN) && NCL_VERSION_2_STYLE_HYPHEN
+				return (ch != '-');
+#			else
+				return (ch != '-'  && ch != '+');
+#			endif
+		return true;
+		}
+	if (labileFlags & tildeIsPunctuation  && ch == '~')
+		return true;
+	return (labileFlags & useSpecialPunctuation  && ch == special);
+	}
+
+
+/*!
+	Returns true if current token is a single character and this character is a punctuation character (as defined in
+	IsPunctuation function).
+*/
+inline bool NxsToken::IsPunctuationToken()
+	{
+	return IsPunctuationToken(token);
+	}
+
+/*!
+	Returns true if t is a single character and this character is a punctuation character (as defined in
+	IsPunctuation function).
+*/
+inline bool NxsToken::IsPunctuationToken(const std::string &t)
+	{
+	return (t.size() == 1 && IsPunctuation(t[0]));
+	}
+
+
+/*!
+	Returns true if current token is a single character and this character is a whitespace character (as defined in
+	IsWhitespace function).
+*/
+inline bool NxsToken::IsWhitespaceToken()
+	{
+	return IsWhitespaceToken(token);
+	}
+
+/*!
+	Returns true if t is a single character and this character is a whitespace character (as defined in IsWhitespace function).
+*/
+inline bool NxsToken::IsWhitespaceToken(const std::string &t)
+	{
+	return (t.size() == 1 && IsWhitespace( t[0]));
+	}
+
+/*!
+	Replaces current token NxsString with s.
+*/
+inline void NxsToken::ReplaceToken(
+  const NxsString s)	/* NxsString to replace current token NxsString */
+	{
+	token = s;
+	}
+
+/*!
+	Sets token to the empty NxsString ("").
+*/
+inline void NxsToken::ResetToken()
+	{
+	token.clear();
+	embeddedComments.clear();
+	}
+
+/*!
+	Sets the special punctuation character to `c'. If the labile bit useSpecialPunctuation is set, this character will
+	be added to the standard list of punctuation symbols, and will be returned as a separate token like the other
+	punctuation characters.
+*/
+inline void NxsToken::SetSpecialPunctuationCharacter(
+  char c)	/* the character to which `special' is set */
+	{
+	special = c;
+	}
+
+/*!
+	Sets the bit specified in the variable `labileFlags'. The available bits are specified in the NxsTokenFlags enum.
+	All bits in `labileFlags' are cleared after each token is read.
+*/
+inline void NxsToken::SetLabileFlagBit(
+  int bit)	/* the bit (see NxsTokenFlags enum) to set in `labileFlags' */
+	{
+	labileFlags |= bit;
+	}
+
+/*!
+	Checks character stored in the variable saved to see if it matches supplied character `ch'. Good for checking such
+	things as whether token stopped reading characters because it encountered a newline (and labileFlags bit
+	newlineIsToken was set):
+>
+	StoppedOn('\n');
+>
+	or whether token stopped reading characters because of a punctuation character such as a comma:
+>
+	StoppedOn(',');
+>
+*/
+inline bool NxsToken::StoppedOn(
+  char ch)	/* the character to compare with saved character */
+	{
+	if (saved == ch)
+		return true;
+	else
+		return false;
+	}
+inline char NxsToken::PeekAtNextChar() const
+	{
+	return nextCharInStream;
+	}
+/*!
+	Simply outputs the current NxsString stored in `token' to the output stream `out'. Does not send a newline to the
+	output stream afterwards.
+*/
+inline void NxsToken::Write(
+  std::ostream &out)	/* the output stream to which to write token NxsString */
+	{
+	out << token;
+	}
+
+/*!
+	Simply outputs the current NxsString stored in `token' to the output stream `out'. Sends a newline to the output
+	stream afterwards.
+*/
+inline void NxsToken::Writeln(
+  std::ostream &out)	/* the output stream to which to write `token' */
+	{
+	out << token << std::endl;
+	}
+
+inline std::map<std::string, std::string> NxsToken::ProcessAsSimpleKeyValuePairs(const char *cmdName)
+	{
+	ProcessedNxsCommand tokenVec;
+	ProcessAsCommand(&tokenVec);
+	return ParseAsSimpleKeyValuePairs(tokenVec, cmdName);
+	}
+
+/*!
+	Returns true if token NxsString exactly equals `s'. If abbreviations are to be allowed, either Begins or
+	Abbreviation should be used instead of Equals.
+*/
+inline bool NxsToken::Equals(
+  NxsString s, /* the string for comparison to the string currently stored in this token */
+  bool respect_case) const	/* if true, comparison will be case-sensitive */
+	{
+	if (respect_case)
+		return (strcmp(token.c_str(), s.c_str()) == 0);
+	return NxsString::case_insensitive_equals(token.c_str(), s.c_str());
+	}
+
+#endif
diff --git a/ncl/nxstreesblock.cpp b/ncl/nxstreesblock.cpp
new file mode 100644
index 0000000..b721c7c
--- /dev/null
+++ b/ncl/nxstreesblock.cpp
@@ -0,0 +1,2045 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+#include <climits>
+#include <sstream>
+#include <stack>
+
+#include "ncl/nxstreesblock.h"
+#include "ncl/nxsreader.h"
+using namespace std;
+#define REGRESSION_TESTING_GET_TRANS_TREE_DESC 0
+#define DEBUGGING_TREES_BLOCK 0
+enum PrevTreeTokenDesc
+		{
+		NXS_TREE_OPEN_PARENS_TOKEN,
+		NXS_TREE_CLOSE_PARENS_TOKEN,
+		NXS_TREE_COMMA_TOKEN,
+		NXS_TREE_CLADE_NAME_TOKEN,
+		NXS_TREE_COLON_TOKEN,
+		NXS_TREE_BRLEN_TOKEN
+		};
+
+NxsSimpleNode * NxsSimpleNode::FindTaxonIndex(unsigned leafIndex)
+{
+	if (leafIndex == taxIndex)
+		return this;
+	NxsSimpleNode *n = lChild;
+	while (n)
+		{
+		NxsSimpleNode * r = n->FindTaxonIndex(leafIndex);
+		if (r)
+			return r;
+		n = n->rSib;
+		}
+	return NULL;
+}
+
+//Makes the leaf with taxIndex == leafIndex a child of the root of the tree
+// \returns the node that is the new child of the root.
+NxsSimpleNode * NxsSimpleTree::RerootAt(unsigned leafIndex)
+{
+	NxsSimpleNode * newRoot = NULL;
+	if (root)
+		{
+		if (leafIndex < leaves.size())
+			newRoot = leaves[leafIndex];
+		if (newRoot == NULL)
+			newRoot = root->FindTaxonIndex(leafIndex);
+		}
+	if (newRoot == NULL)
+		{
+		NxsString eMsg;
+		eMsg << "Reroot failed. Leaf number " << (leafIndex + 1) << " was not found in the tree.";
+		throw NxsNCLAPIException(eMsg);
+		}
+	return RerootAtNode(newRoot);
+}
+
+NxsSimpleNode * NxsSimpleTree::RerootAtNode(NxsSimpleNode *newRoot)
+{
+	NxsSimpleNode * p = newRoot->edgeToPar.parent;
+	if (!p || p == root)
+		return newRoot;
+	std::stack<NxsSimpleNode *> toFlip;
+	while (p != root)
+		{
+		toFlip.push(p);
+		p = p->edgeToPar.parent;
+		}
+	while (!toFlip.empty())
+		{
+		NxsSimpleNode *subRoot = toFlip.top();
+		toFlip.pop();
+		FlipRootsChildToRoot(subRoot);
+		}
+	return newRoot;
+}
+void NxsSimpleTree::FlipRootsChildToRoot(NxsSimpleNode *subRoot)
+{
+	std::vector<NxsSimpleNode *> rc = root->GetChildren();
+	if (rc.size() < 2)
+		{
+		NCL_ASSERT(!rc.empty());
+		NCL_ASSERT(rc[0] == subRoot);
+		/* root has degree 1 delete it */
+		std::vector<NxsSimpleNode *> tmp;
+		tmp.swap(allNodes);
+		allNodes.reserve(tmp.size() - 1);
+		for (std::vector<NxsSimpleNode *>::const_iterator nIt = tmp.begin(); nIt != tmp.end(); ++nIt)
+			{
+			if (*nIt != root)
+				allNodes.push_back(*nIt);
+			}
+		delete root;
+		root = subRoot;
+		subRoot->edgeToPar.parent = NULL;
+		return;
+		}
+
+	if (rc.size() == 2)
+		{
+		/* root has degree 2 delete it */
+
+		NxsSimpleNode * formerSib = subRoot->rSib;
+		if (formerSib == NULL)
+			formerSib = root->lChild;
+		NCL_ASSERT(formerSib != subRoot);
+
+		std::vector<NxsSimpleNode *> tmp;
+		tmp.swap(allNodes);
+		allNodes.reserve(tmp.size() - 1);
+		for (std::vector<NxsSimpleNode *>::const_iterator nIt = tmp.begin(); nIt != tmp.end(); ++nIt)
+			{
+			if (*nIt != root)
+				allNodes.push_back(*nIt);
+			}
+		delete root;
+		root = NULL;
+
+		formerSib->edgeToPar.parent = subRoot;
+		if (formerSib->edgeToPar.defaultEdgeLen)
+			{
+			if (!subRoot->edgeToPar.defaultEdgeLen)
+				{
+				formerSib->edgeToPar.defaultEdgeLen = false;
+				formerSib->edgeToPar.hasIntEdgeLens = subRoot->edgeToPar.hasIntEdgeLens;
+				formerSib->edgeToPar.iEdgeLen = subRoot->edgeToPar.iEdgeLen;
+				formerSib->edgeToPar.dEdgeLen = subRoot->edgeToPar.dEdgeLen;
+				}
+			}
+		else
+			{
+			if (!subRoot->edgeToPar.defaultEdgeLen)
+				{
+				if (formerSib->edgeToPar.hasIntEdgeLens)
+					{
+					if (subRoot->edgeToPar.hasIntEdgeLens)
+						formerSib->edgeToPar.iEdgeLen += subRoot->edgeToPar.iEdgeLen;
+					else
+						{
+						formerSib->edgeToPar.hasIntEdgeLens = false;
+						formerSib->edgeToPar.dEdgeLen = subRoot->edgeToPar.dEdgeLen + (double) formerSib->edgeToPar.iEdgeLen;
+						}
+					}
+				else
+					{
+					if (subRoot->edgeToPar.hasIntEdgeLens)
+						formerSib->edgeToPar.dEdgeLen += (double)subRoot->edgeToPar.iEdgeLen;
+					else
+						formerSib->edgeToPar.dEdgeLen += subRoot->edgeToPar.dEdgeLen;
+					}
+				}
+			}
+		NxsSimpleNode * subRootRChild = subRoot->GetLastChild();
+		if (subRootRChild == NULL)
+			subRoot->lChild = formerSib;
+		else
+			subRootRChild->rSib = formerSib;
+		subRoot->rSib = NULL;
+		root = subRoot;
+		subRoot->edgeToPar.parent = NULL;
+		}
+	else
+		{
+		/* root has degree > 2, preserve it */
+		root->edgeToPar = subRoot->edgeToPar;
+		std::swap(root->edgeToPar.child, root->edgeToPar.parent);
+		NxsSimpleNode * subRootRChild = subRoot->GetLastChild();
+		if (subRootRChild == NULL)
+			subRoot->lChild = root;
+		else
+			subRootRChild->rSib = root;
+		if (root->lChild == subRoot)
+			root->lChild = subRoot->rSib;
+		else
+			{
+			NxsSimpleNode * rOtherChild = root->lChild;
+			while (rOtherChild)
+				{
+				if (rOtherChild->rSib == subRoot)
+					{
+					rOtherChild->rSib = subRoot->rSib;
+					break;
+					}
+				rOtherChild = rOtherChild->rSib;
+				NCL_ASSERT(rOtherChild); // we trip this if subRoot is not in the rsib list
+				}
+			}
+		subRoot->rSib = NULL;
+		root = subRoot;
+		subRoot->edgeToPar.parent = NULL;
+		}
+}
+
+void NxsSimpleEdge::WriteAsNewick(std::ostream &out, bool nhx) const
+	{
+	if (!defaultEdgeLen)
+		{
+		out << ':';
+		if (lenAsString.empty())
+			if (hasIntEdgeLens)
+				out << iEdgeLen;
+			else
+				out << dEdgeLen;
+		else
+			out << lenAsString;
+		}
+	for (std::vector<NxsComment>::const_iterator uc = unprocessedComments.begin(); uc != unprocessedComments.end(); ++uc)
+		out << '[' << uc->GetText() << ']';
+	if (nhx && !parsedInfo.empty())
+		{
+		out << "[&&NHX";
+		for (std::map<std::string, std::string>::const_iterator p = parsedInfo.begin(); p != parsedInfo.end(); ++p)
+			out << ':' << p->first << '=' << p->second;
+		out << ']';
+		}
+	}
+
+void NxsSimpleNode::WriteAsNewick(std::ostream &out, bool nhx, bool useLeafNames, bool escapeNames, const NxsTaxaBlockAPI *taxa) const
+	{
+	if (lChild)
+		{
+		out << '(';
+		const std::vector<NxsSimpleNode *> children = GetChildren();
+		for (std::vector<NxsSimpleNode *>::const_iterator child = children.begin(); child != children.end(); ++child)
+			{
+			if (child != children.begin())
+				out << ',';
+			(*child)->WriteAsNewick(out, nhx, useLeafNames, escapeNames, taxa);
+			}
+		out << ')';
+		if (!name.empty())
+			{
+			if (escapeNames)
+				out << NxsString::GetEscaped(name);
+			else
+				out << name;
+			}
+		else if (taxIndex != UINT_MAX)
+			out << (1 + taxIndex);
+		}
+	else
+		{
+		NCL_ASSERT (taxIndex != UINT_MAX);
+		if (useLeafNames)
+			{
+			if (name.empty() && taxa)
+				{
+				std::string n = taxa->GetTaxonLabel(taxIndex);
+				if (escapeNames)
+					out << NxsString::GetEscaped(n);
+				else
+					out << n;
+				}
+			else
+				{
+				if (escapeNames)
+					out << NxsString::GetEscaped(name);
+				else
+					out << name;
+				}
+			}
+		else
+			out << (1 + taxIndex);
+		}
+	edgeToPar.WriteAsNewick(out, nhx);
+	}
+
+void NxsSimpleNode::AddSelfAndDesToPreorder(std::vector<const NxsSimpleNode *> &p) const
+	{
+#if  0
+	p.push_back(this);
+	NxsSimpleNode * currCh = this->lChild;
+	while (currCh)
+		{
+		currCh->AddSelfAndDesToPreorder(p);
+		currCh = currCh->rSib;
+		}
+#else
+	std::stack<const NxsSimpleNode *> ndStack;
+	const NxsSimpleNode * currCh = this;
+	for (;;)
+		{
+		p.push_back(currCh);
+		if (currCh->lChild) 
+			{
+			currCh = currCh->lChild;
+			if (currCh->rSib) 
+				{
+				ndStack.push(currCh->rSib);
+				}
+			}
+		else 
+			{
+			if (ndStack.empty())
+				break;
+			currCh = ndStack.top();
+			ndStack.pop();
+			if (currCh->rSib) 
+				{
+				ndStack.push(currCh->rSib);
+				}
+			}
+		}
+#endif
+	}
+
+std::vector<const NxsSimpleNode *> NxsSimpleTree::GetPreorderTraversal() const
+	{
+	std::vector<const NxsSimpleNode *> p;
+	if (root)
+		root->AddSelfAndDesToPreorder(p);
+	return p;
+	}
+
+std::vector<std::vector<int> > NxsSimpleTree::GetIntPathDistances(bool toMRCA) const
+	{
+	if (root == NULL || root->lChild == NULL)
+		return std::vector<std::vector<int> >();
+
+	typedef std::map<unsigned, int> TaxonIndToDistMap;
+	typedef std::map<unsigned, TaxonIndToDistMap> PairwiseDistMap;
+	typedef PairwiseDistMap::iterator PairwiseDistRow;
+
+	std::map<const NxsSimpleNode *,  TaxonIndToDistMap > ndToDist;
+	const std::vector<const NxsSimpleNode *> preord = GetPreorderTraversal();
+	unsigned maxIndex = 0;
+	PairwiseDistMap pairwiseDist;
+	for (std::vector<const NxsSimpleNode *>::const_reverse_iterator nIt = preord.rbegin(); nIt != preord.rend(); ++nIt)
+		{
+		const NxsSimpleNode *nd = *nIt;
+		if (nd->lChild)
+			{
+			TaxonIndToDistMap nm;
+			ndToDist[nd] = nm;
+			TaxonIndToDistMap & tidm = ndToDist[nd];
+			const NxsSimpleNode * currChild = nd->lChild;
+			if (nd->taxIndex != UINT_MAX)
+				{
+				if (maxIndex < nd->taxIndex)
+					maxIndex = nd->taxIndex;
+				tidm[nd->taxIndex] = 0;
+				}
+			while (currChild)
+				{
+				TaxonIndToDistMap currChildEls;
+				TaxonIndToDistMap * currChildElsPtr;
+				int currEdgeLen = currChild->edgeToPar.GetIntEdgeLen();
+				if (currChild->lChild)
+					{
+					NCL_ASSERT(ndToDist.find(currChild) != ndToDist.end());
+					currChildElsPtr = &(ndToDist[currChild]);
+					}
+				else
+					{
+					if (maxIndex < currChild->taxIndex)
+						maxIndex = currChild->taxIndex;
+					currChildEls[currChild->taxIndex] = 0;
+					currChildElsPtr = &currChildEls;
+					}
+				for (TaxonIndToDistMap::const_iterator i = tidm.begin(); i != tidm.end(); ++i)
+					{
+					const unsigned iIndex = i->first;
+					const int idist = i->second;
+					for (TaxonIndToDistMap::const_iterator j = currChildElsPtr->begin(); j != currChildElsPtr->end(); ++j)
+						{
+						const unsigned jIndex = j->first;
+						const int jdist = j->second;
+						const int ndToJDist = jdist + currEdgeLen;
+						if (toMRCA)
+							{
+							PairwiseDistRow  iRow = pairwiseDist.find(iIndex);
+							PairwiseDistRow  jRow = pairwiseDist.find(jIndex);
+							NCL_ASSERT(iRow == pairwiseDist.end() || (iRow->second.find(jIndex) == iRow->second.end()));
+							NCL_ASSERT(jRow == pairwiseDist.end() || (jRow->second.find(iIndex) == jRow->second.end()));
+							pairwiseDist[iIndex][jIndex] = idist;
+							pairwiseDist[jIndex][iIndex] = ndToJDist;
+							}
+						else
+							{
+							const unsigned fIndex = (iIndex < jIndex ? iIndex : jIndex);
+							const unsigned sIndex = (iIndex < jIndex ? jIndex : iIndex);
+							PairwiseDistRow  r = pairwiseDist.find(fIndex);
+							const bool found = (r != pairwiseDist.end() && (r->second.find(sIndex) != r->second.end()));
+							if (!found)
+								pairwiseDist[fIndex][sIndex] = currEdgeLen + idist + jdist;
+							}
+						}
+					}
+				for (TaxonIndToDistMap::const_iterator j = currChildElsPtr->begin(); j != currChildElsPtr->end(); ++j)
+					tidm[j->first] = currEdgeLen + j->second;
+				currChild = currChild->rSib;
+				}
+			}
+		}
+	if (maxIndex == 0)
+		return std::vector<std::vector<int> >();
+	std::vector<int> toTipDistRow(maxIndex+1, INT_MAX);
+	std::vector<std::vector<int> > pathDistMat(maxIndex+1, toTipDistRow);
+	for (unsigned diagInd = 0; diagInd <= maxIndex; ++diagInd)
+		pathDistMat[diagInd][diagInd] = 0;
+
+	for (PairwiseDistMap::const_iterator iit = pairwiseDist.begin(); iit != pairwiseDist.end(); ++iit)
+		{
+		const unsigned iInd = iit->first;
+		const TaxonIndToDistMap & toDistMap = iit->second;
+		for (TaxonIndToDistMap::const_iterator jit = toDistMap.begin(); jit != toDistMap.end(); ++jit)
+			{
+			const unsigned jInd = jit->first;
+			if (jInd != iInd)
+				{
+				const int d = jit->second;
+				pathDistMat[iInd][jInd] = d;
+				pathDistMat[jInd][iInd] = d;
+				}
+			}
+		}
+
+	return pathDistMat;
+	}
+
+/* if toMRCA is true the the row i col j element will be the distanc from tip i
+ to the MRCA of (i and j)
+*/
+std::vector<std::vector<double> > NxsSimpleTree::GetDblPathDistances(bool toMRCA) const
+	{
+	if (root == NULL || root->lChild == NULL)
+		return std::vector<std::vector<double> >();
+
+	typedef std::map<unsigned, double> TaxonIndToDistMap;
+	typedef std::map<unsigned, TaxonIndToDistMap> PairwiseDistMap;
+	typedef PairwiseDistMap::iterator PairwiseDistRow;
+
+	std::map<const NxsSimpleNode *,  TaxonIndToDistMap > ndToDist;
+	const std::vector<const NxsSimpleNode *> preord = GetPreorderTraversal();
+	unsigned maxIndex = 0;
+	PairwiseDistMap pairwiseDist;
+	for (std::vector<const NxsSimpleNode *>::const_reverse_iterator nIt = preord.rbegin(); nIt != preord.rend(); ++nIt)
+		{
+		const NxsSimpleNode *nd = *nIt;
+		if (nd->lChild)
+			{
+			TaxonIndToDistMap nm;
+			ndToDist[nd] = nm;
+			TaxonIndToDistMap & tidm = ndToDist[nd];
+			if (nd->taxIndex != UINT_MAX)
+				{
+				if (maxIndex < nd->taxIndex)
+					maxIndex = nd->taxIndex;
+				tidm[nd->taxIndex] = 0.0;
+				}
+			// loop over all of the children of nd
+			const NxsSimpleNode * currChild = nd->lChild;
+			while (currChild)
+				{
+				TaxonIndToDistMap currChildEls;
+				TaxonIndToDistMap * currChildElsPtr;
+				double currEdgeLen = currChild->edgeToPar.GetDblEdgeLen();
+				if (currChild->lChild)
+					{
+					NCL_ASSERT(ndToDist.find(currChild) != ndToDist.end());
+					currChildElsPtr = &(ndToDist[currChild]);
+					}
+				else
+					{
+					if (maxIndex < currChild->taxIndex)
+						maxIndex = currChild->taxIndex;
+					currChildEls[currChild->taxIndex] = 0.0;
+					currChildElsPtr = &currChildEls;
+					}
+				//for each leaf i ( the the previously encountered descendants of nd)...
+				for (TaxonIndToDistMap::const_iterator i = tidm.begin(); i != tidm.end(); ++i)
+					{
+					// compare it to leaf j (descendant of currChild).
+					const unsigned iIndex = i->first;
+					const double idist = i->second;
+					for (TaxonIndToDistMap::const_iterator j = currChildElsPtr->begin(); j != currChildElsPtr->end(); ++j)
+						{
+						const unsigned jIndex = j->first;
+						const double jdist = j->second;
+						const double ndToJDist = jdist + currEdgeLen;
+						if (toMRCA)
+							{
+							PairwiseDistRow  iRow = pairwiseDist.find(iIndex);
+							PairwiseDistRow  jRow = pairwiseDist.find(jIndex);
+							NCL_ASSERT(iRow == pairwiseDist.end() || (iRow->second.find(jIndex) == iRow->second.end()));
+							NCL_ASSERT(jRow == pairwiseDist.end() || (jRow->second.find(iIndex) == jRow->second.end()));
+							pairwiseDist[iIndex][jIndex] = idist;
+							pairwiseDist[jIndex][iIndex] = ndToJDist;
+							}
+						else
+							{
+							const unsigned fIndex = (iIndex < jIndex ? iIndex : jIndex);
+							const unsigned sIndex = (iIndex < jIndex ? jIndex : iIndex);
+							PairwiseDistRow  r = pairwiseDist.find(fIndex);
+							const bool found = (r != pairwiseDist.end() && (r->second.find(sIndex) != r->second.end()));
+							if (!found)
+								pairwiseDist[fIndex][sIndex] = idist + ndToJDist;
+							}
+						}
+					}
+				for (TaxonIndToDistMap::const_iterator j = currChildElsPtr->begin(); j != currChildElsPtr->end(); ++j)
+					tidm[j->first] = currEdgeLen + j->second;
+				currChild = currChild->rSib;
+				}
+			}
+		}
+	if (maxIndex == 0)
+		return std::vector<std::vector<double> >();
+	std::vector<double> toTipDistRow(maxIndex+1, DBL_MAX);
+	std::vector<std::vector<double> > pathDistMat(maxIndex+1, toTipDistRow);
+	for (unsigned diagInd = 0; diagInd <= maxIndex; ++diagInd)
+		pathDistMat[diagInd][diagInd] = 0.0;
+
+
+	for (PairwiseDistMap::const_iterator iit = pairwiseDist.begin(); iit != pairwiseDist.end(); ++iit)
+		{
+		const unsigned iInd = iit->first;
+		pathDistMat[iInd][iInd] = 0.0;
+		const TaxonIndToDistMap & toDistMap = iit->second;
+		for (TaxonIndToDistMap::const_iterator jit = toDistMap.begin(); jit != toDistMap.end(); ++jit)
+			{
+			const unsigned jInd = jit->first;
+			const double d = jit->second;
+			pathDistMat[iInd][jInd] = d;
+			if (!toMRCA)
+				pathDistMat[jInd][iInd] = d;
+			}
+		}
+
+	return pathDistMat;
+	}
+
+std::string parseNHXComment(const std::string comment, std::map<std::string, std::string> *infoMap)
+	{
+	if (comment.length() < 6 || comment[0] != '&' || comment[1] != '&' || comment[2] != 'N' ||comment[3] != 'H' || comment[4] != 'X' )
+		return comment;
+	size_t colonPos = comment.find(':', 5);
+	if (colonPos == string::npos)
+		return comment.substr(5, string::npos);
+	for (;;)
+		{
+		size_t eqPos = comment.find('=', colonPos);
+		if (eqPos == string::npos || (eqPos <= (colonPos + 1)))
+			return comment.substr(colonPos, string::npos);
+		std::string key = comment.substr(colonPos + 1, eqPos - 1 - colonPos);
+		colonPos = comment.find(':', eqPos + 1);
+		if (colonPos == eqPos + 1)
+			{
+			if (infoMap)
+				(*infoMap)[key] = string();
+			}
+		else if (colonPos == string::npos)
+			{
+			std::string lastVal = comment.substr(eqPos + 1);
+			if (infoMap)
+				(*infoMap)[key] = lastVal;
+			return std::string();
+			}
+		else
+			{
+			std::string value = comment.substr(eqPos + 1, colonPos - eqPos - 1);
+			if (infoMap)
+				(*infoMap)[key] = value;
+			}
+		}
+	}
+
+void NxsSimpleEdge::DealWithNexusComments(const std::vector<NxsComment> & ecs, bool NHXComments)
+	{
+	for (std::vector<NxsComment>::const_iterator ecsIt = ecs.begin(); ecsIt != ecs.end(); ++ecsIt)
+		{
+		if (NHXComments)
+			{
+			std::string ns = ecsIt->GetText();
+			std::map<std::string, std::string> currCmt;
+			std::string unparsed = parseNHXComment(ns, &currCmt);
+			for (std::map<std::string, std::string>::const_iterator c = currCmt.begin(); c != currCmt.end(); ++c)
+				{
+				const std::string & k = c->first;
+				const std::string & v = c->second;
+				this->parsedInfo[k] = v;
+				}
+			if (!unparsed.empty())
+				{
+				if (unparsed.length() == ns.length())
+					this->unprocessedComments.push_back(*ecsIt);
+				else
+					{
+					NxsComment nc(unparsed, ecsIt->GetLineNumber(), ecsIt->GetColumnNumber());
+					this->unprocessedComments.push_back(nc);
+					}
+				}
+			}
+		else
+			this->unprocessedComments.push_back(*ecsIt);
+		}
+	}
+
+void NxsSimpleTree::Initialize(const NxsFullTreeDescription & td)
+	{
+	if (!td.IsProcessed())
+		throw NxsNCLAPIException("A tree description must be processed by ProcessTree before calling NxsSimpleTree::NxsSimpleTree");
+	Clear();
+	std::string s;
+	const std::string & n = td.GetNewick();
+	s.reserve(n.length() + 1);
+	s.assign(n.c_str());
+	s.append(1, ';');
+	istringstream newickstream(s);
+	NxsToken token(newickstream);
+	if (td.RequiresNewickNameTokenizing())
+		{
+		token.UseNewickTokenization(true);
+		}
+	token.SetEOFAllowed(false);
+	realEdgeLens = td.SomeEdgesHaveLengths() && (! td.EdgeLengthsAreAllIntegers());
+	const bool NHXComments = td.HasNHXComments();
+	NxsString emsg;
+	double lastFltEdgeLen;
+	long lastIntEdgeLen;
+	long currTaxNumber;
+	token.GetNextToken();
+	NCL_ASSERT(token.Equals("("));
+	root = AllocNewNode(0L);
+	NxsSimpleNode * currNd = root;
+	NxsSimpleEdge * currEdge = &(currNd->edgeToPar);
+	NxsSimpleNode * tmpNode;
+	bool prevInternalOrLength;
+	bool currInternalOrLength = false;
+	for (;;)
+		{
+		currEdge->DealWithNexusComments(token.GetEmbeddedComments(), NHXComments);
+		if (token.Equals(";"))
+			{
+			if (currNd != root)
+				throw NxsNCLAPIException("Semicolon found before the end of the tree description.  This means that more \"(\" characters  than \")\"  were found.");
+			break;
+			}
+		const NxsString & tstr = token.GetTokenReference();
+		const char * t = tstr.c_str();
+		bool handled;
+		handled = false;
+		prevInternalOrLength = currInternalOrLength;
+		currInternalOrLength = false;
+
+		if (tstr.length() == 1)
+			{
+			handled = true;
+			if (t[0] == '(')
+				{
+				tmpNode = AllocNewNode(currNd);
+				currNd->AddChild(tmpNode);
+				currNd = tmpNode;
+				currEdge = &(currNd->edgeToPar);
+				}
+			else if (t[0] == ')')
+				{
+				currNd = currNd->GetParent();
+				NCL_ASSERT(currNd);
+				currEdge = &(currNd->edgeToPar);
+				currInternalOrLength = true;
+				}
+			else if (t[0] == ':')
+				{
+				token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation); // this allows us to deal with sci. not. in branchlengths (and negative branch lengths).
+				token.GetNextToken();
+				currEdge->DealWithNexusComments(token.GetEmbeddedComments(), NHXComments);
+				t = token.GetTokenReference().c_str();
+				if (realEdgeLens)
+					{
+					if (!NxsString::to_double(t, &lastFltEdgeLen))
+						{
+						emsg << "Expecting a number as a branch length. Found " << tstr;
+						throw NxsException(emsg, token);
+						}
+					currEdge->SetDblEdgeLen(lastFltEdgeLen, t);
+					}
+				else
+					{
+					if (!NxsString::to_long(t, &lastIntEdgeLen))
+						{
+						emsg << "Expecting a number as a branch length. Found " << tstr;
+						throw NxsException(emsg, token);
+						}
+					currEdge->SetIntEdgeLen((int)lastIntEdgeLen, t);
+					}
+				currInternalOrLength = true;
+				}
+			else if (t[0] == ',')
+				{
+				currNd = currNd->GetParent();
+				NCL_ASSERT(currNd);
+				tmpNode = AllocNewNode(currNd);
+				currNd->AddChild(tmpNode);
+				currNd = tmpNode;
+				currEdge = &(currNd->edgeToPar);
+				}
+			else
+				handled = false;
+			}
+		if (!handled)
+			{
+			bool wasReadAsNumber = NxsString::to_long(t, &currTaxNumber);
+			if (wasReadAsNumber)
+				{
+				if (currTaxNumber < 1)
+					{
+					if (!prevInternalOrLength)
+						{
+						emsg << "Expecting a taxon number greater than 1. Found " << tstr;
+						throw NxsException(emsg, token);
+						}
+					wasReadAsNumber = false;
+					}
+				}
+			if (wasReadAsNumber)
+				{
+				currNd->taxIndex = (unsigned)currTaxNumber - 1;
+				if (currNd->lChild == NULL)
+					{
+					while (currNd->taxIndex >= leaves.size())
+						leaves.push_back(0L);
+					leaves[currNd->taxIndex] = currNd;
+					}
+				}
+			else
+				currNd->name = t;
+			}
+		token.GetNextToken();
+		}
+	}
+unsigned NxsTreesBlock::TreeLabelToNumber(const std::string & name) const
+	{
+	NxsString r(name.c_str());
+	r.ToUpper();
+	std::map<std::string, unsigned>::const_iterator cntiIt = capNameToInd.find(r);
+	if (cntiIt == capNameToInd.end())
+		return 0;
+	return cntiIt->second + 1;
+	}
+unsigned NxsTreesBlock::GetMaxIndex() const
+	{
+	if (trees.size() == 0)
+		return UINT_MAX;
+	return (unsigned)trees.size() - 1;
+	}
+/*!
+ Returns the number of indices that correspond to the label (and the number
+ of items that would be added to *inds if inds points to an empty set).
+*/
+unsigned NxsTreesBlock::GetIndicesForLabel(const std::string &label, NxsUnsignedSet *inds) const
+	{
+	NxsString emsg;
+	const unsigned numb = TreeLabelToNumber(label);
+	if (numb > 0)
+		{
+		if (inds)
+			inds->insert(numb - 1);
+		return 1;
+		}
+	return GetIndicesFromSetOrAsNumber(label, inds, treeSets, GetMaxIndex(), "tree");
+	}
+bool NxsTreesBlock::AddNewIndexSet(const std::string &label, const NxsUnsignedSet & inds)
+	{
+	NxsString  nlabel(label.c_str());
+	const bool replaced = treeSets.count(nlabel) > 0;
+	treeSets[nlabel] = inds;
+	return replaced;
+	}
+/*!
+	Returns true if this set replaces an older definition.
+*/
+bool NxsTreesBlock::AddNewPartition(const std::string &label, const NxsPartition & inds)
+	{
+	NxsString ls(label.c_str());
+	bool replaced = treePartitions.count(ls) > 0;
+	treePartitions[ls] = inds;
+	return replaced;
+	}
+/*!
+	Initializes `NCL_BLOCKTYPE_ATTR_NAME' to "TREES", `ntrees' to 0, `defaultTree' to 0, and `taxa' to `tb'. Assumes `tb' is non-NULL.
+*/
+NxsTreesBlock::NxsTreesBlock(
+  NxsTaxaBlockAPI *tb)	/* the NxsTaxaBlockAPI object to be queried for taxon names appearing in tree descriptions */
+  :NxsTaxaBlockSurrogate(tb, NULL),
+  processedTreeValidationFunction(NULL),
+  ptvArg(NULL)
+	{
+	NCL_BLOCKTYPE_ATTR_NAME = "TREES";
+	defaultTreeInd = UINT_MAX;
+	writeTranslateTable = true;
+	allowImplicitNames = false;
+	useNewickTokenizingDuringParse = false;
+	treatIntegerLabelsAsNumbers = false;
+	processAllTreesDuringParse = true;
+	writeFromNodeEdgeDataStructure = false;
+	validateInternalNodeLabels = true;
+	treatAsRootedByDefault = true;
+	allowNumericInterpretationOfTaxLabels = true;
+	}
+/*!
+	Clears `translateList', `rooted', `treeName' and `treeDescription'.
+*/
+NxsTreesBlock::~NxsTreesBlock()
+	{
+	}
+/*!
+	Makes data member `taxa' point to `tb' rather than the NxsTaxaBlockAPI object it was previously pointing to. Assumes
+	`tb' is non-NULL.
+*/
+void NxsTreesBlock::ReplaceTaxaBlockPtr(
+  NxsTaxaBlockAPI *tb)		/* pointer to new NxsTaxaBlockAPI object (does not attempt to delete the object previously pointed to) */
+	{
+	NCL_ASSERT(tb != NULL);
+	taxa = tb;
+	}
+/*! \returns the description of the tree stored at position `i' in `treeDescription'. Assumes that `i' will be in the
+	range [0..`ntrees').
+
+	in NCL version 2.1 and greater, this newick string is guaranteed to use taxon numbers (1-based)
+	in the newick string.  This makes it easier to parse.
+*/
+NxsString NxsTreesBlock::GetTreeDescription(
+  unsigned i)	/* the index of the tree for which the description is to be returned */
+	{
+	return NxsString(GetFullTreeDescription(i).GetNewick().c_str());
+	}
+/*!
+	Returns true if the `i'th tree (0-offset) is rooted, false otherwise. Assumes that `i' will be in the
+	range [0..ntrees).
+*/
+bool NxsTreesBlock::IsRootedTree(
+  unsigned i)	/* the index of the tree in question */
+  	{
+	return GetFullTreeDescription(i).IsRooted();
+	}
+/*!
+	Returns the name of the tree stored at position `i' in `treeName'. Assumes that `i' will be in the range
+	[0..`ntrees').
+*/
+NxsString NxsTreesBlock::GetTreeName(
+  unsigned i)	/* the index of the tree for which the name is to be returned */
+	{
+	return NxsString(GetFullTreeDescription(i).GetName().c_str());
+	}
+/*!
+	Returns true if the `i'th tree (0-offset) is the default tree, false otherwise. Assumes that `i' will be in the
+	range [0..ntrees).
+*/
+bool NxsTreesBlock::IsDefaultTree(
+  unsigned i)	/* the index of the tree in question */
+	{
+	return (i == GetNumDefaultTree());
+	}
+const NxsFullTreeDescription & NxsTreesBlock::GetFullTreeDescription(unsigned i) const
+	{
+	NCL_ASSERT(i < trees.size());
+	return trees.at(i);
+	}
+/*!
+	This function outputs a brief report of the contents of this block. Overrides the abstract virtual function in the
+	base class.
+*/
+void NxsTreesBlock::Report(
+  std::ostream &out) NCL_COULD_BE_CONST /* the output stream to which to write the report */ /*v2.1to2.2 1 */
+	{
+	const unsigned ntrees = GetNumTrees();
+	out << '\n' <<  NCL_BLOCKTYPE_ATTR_NAME << " block contains ";
+	if (ntrees == 0)
+		{
+		out << "no trees" << endl;
+		return;
+		}
+	if (ntrees == 1)
+		out << "one tree" << endl;
+	else
+		out << ntrees << " trees" << endl;
+	for (unsigned k = 0; k < ntrees; k++)
+		{
+		const NxsFullTreeDescription & tree = GetFullTreeDescription(k);
+		out << "    " << (k+1) << "    " << tree.GetName();
+		out << "    (";
+		if (tree.IsRooted())
+			out << "rooted";
+		else
+			out << "unrooted";
+		if (defaultTreeInd == k)
+			out << ",default tree)" << endl;
+		else
+			out << ')' << endl;
+		}
+	}
+/*!
+	Outputs a brief description of this block's contents to the referenced NxsString. An example of the output of this
+	command is shown below:
+>
+	TREES block contains 102 trees
+>
+*/
+void NxsTreesBlock::BriefReport(
+  NxsString &s) NCL_COULD_BE_CONST /* reference to the string in which to store the contents of the brief report */ /*v2.1to2.2 1 */
+	{
+	const unsigned ntrees = GetNumTrees();
+	s << "\n\n" << NCL_BLOCKTYPE_ATTR_NAME << " block contains ";
+	if (ntrees == 0)
+		s += "no trees\n";
+	else if (ntrees == 1)
+		s += "one tree\n";
+	else
+		s << ntrees << " trees\n";
+	}
+/*!
+	Flushes `treeName', `treeDescription', `translateList' and `rooted', and sets `ntrees' and `defaultTree' both to 0
+	in preparation for reading a new TREES block.
+*/
+void NxsTreesBlock::Reset()
+	{
+	NxsBlock::Reset();
+	ResetSurrogate();
+	defaultTreeInd = UINT_MAX;
+	trees.clear();
+	capNameToInd.clear();
+	treeSets.clear();
+	treePartitions.clear();
+	constructingTaxaBlock = false;
+	newtaxa = false;
+	}
+/*!
+	Returns the 0-offset index of the default tree, which will be 0 if there is only one tree stored or no trees
+	stored. If more than one tree is stored, the default tree will be the one specifically indicated by the user (using
+	an asterisk in the data file), or 0 if the user failed to specify.
+*/
+unsigned NxsTreesBlock::GetNumDefaultTree()
+	{
+	return (defaultTreeInd == UINT_MAX ? 0 : defaultTreeInd);
+	}
+/*!
+	Returns the number of trees stored in this NxsTreesBlock object.
+*/
+unsigned NxsTreesBlock::GetNumTrees() const
+	{
+	return (unsigned)trees.size();
+	}
+/*!
+	Returns the number of trees stored in this NxsTreesBlock object.
+*/
+unsigned NxsTreesBlock::GetNumTrees()
+	{
+	return (unsigned)trees.size();
+	}
+void NxsTreesBlock::WriteTranslateCommand(std::ostream & out) const
+	{
+	NCL_ASSERT(taxa);
+	out << "    TRANSLATE" << "\n";
+	const unsigned nt = taxa->GetNTaxTotal();
+	for (unsigned i = 0; i < nt; ++i)
+		{
+		if (i > 0)
+				out << ",\n";
+		out << "        " << i + 1 << ' ' << NxsString::GetEscaped(taxa->GetTaxonLabel(i));
+		}
+	out << ";\n";
+	}
+
+void NxsTreesBlock::WriteTreesCommand(std::ostream & out) const
+	{
+	if (constructingTaxaBlock)
+		{
+		// this check is intended to make sure that ProcessTree really behaves
+		//	as a const function.
+		// If we are constructingTaxaBlock, then the it can modify the contained taxa block
+		throw NxsNCLAPIException("WriteTreesCommand block cannot be called while the Trees Block is still being constructed");
+		}
+	NxsTreesBlock *ncthis = const_cast<NxsTreesBlock *>(this);
+	NxsSimpleTree nst(0, 0.0);
+	const bool useLeafNames = !(this->writeTranslateTable);
+	for (unsigned k = 0; k < trees.size(); k++)
+		{
+#		if defined REGRESSION_TESTING_GET_TRANS_TREE_DESC
+			NxsTreesBlock *nc = const_cast<NxsTreesBlock *>(this);
+			NxsString transTreeDesc = nc->GetTranslatedTreeDescription(k);
+#		endif
+		NxsFullTreeDescription & treeDesc = trees.at(k);
+		ncthis->ProcessTree(treeDesc);
+		const std::string & name = treeDesc.GetName();
+		out << "    TREE ";
+		if (k == defaultTreeInd)
+			out << "* ";
+		if (name.length() == 0)
+			out <<  "UnnamedTree = [&";
+		else
+			out << NxsString::GetEscaped(name) << " = [&";
+		out << (treeDesc.IsRooted() ? 'R' : 'U');
+		out << ']';
+		if (writeFromNodeEdgeDataStructure)
+			{
+			nst.Initialize(treeDesc);
+			nst.WriteAsNewick(out, true, useLeafNames, true, taxa);
+			}
+		else
+			out << treeDesc.GetNewick();
+		out << ";\n";
+		
+
+#		if defined(PHYLOBASE_TESTING)
+			const NxsTreesBlock * treeBlock = this;
+		    std::vector<std::string> treeNames;      //vector of tree names
+		    const NxsTaxaBlockAPI * taxaB = GetTaxaBlockPtr(0L);
+		    unsigned ntax = taxaB->GetNTax();
+
+
+        	std::vector<unsigned> parentVector; //Index of the parent. 0 means no parent.
+    	    std::vector<double> branchLengthVector; 
+			parentVector.clear();
+			branchLengthVector.clear();
+			const NxsFullTreeDescription & ftd = treeBlock->GetFullTreeDescription(k); 
+			treeNames.push_back(ftd.GetName());
+			NxsSimpleTree simpleTree(ftd, -1, -1.0);
+			std::vector<const NxsSimpleNode *> ndVector =  simpleTree.GetPreorderTraversal();
+			unsigned internalNdIndex = ntax;
+			for (std::vector<const NxsSimpleNode *>::const_iterator ndIt = ndVector.begin(); ndIt != ndVector.end(); ++ndIt)
+				{
+				NxsSimpleNode * nd = (NxsSimpleNode *) *ndIt;
+				unsigned nodeIndex;
+				if (nd->IsTip())
+					{
+					nodeIndex = nd->GetTaxonIndex();
+					std::cout << " leaf node # = " <<  nodeIndex << '\n';
+					}
+				else
+					{
+					nodeIndex = internalNdIndex++;
+					nd->SetTaxonIndex(nodeIndex);
+					std::cout << " internal node # = " << nd->GetTaxonIndex()  << '\n';
+					}
+				if (parentVector.size() < nodeIndex + 1)
+					{
+					parentVector.resize(nodeIndex + 1);
+					}
+				if (branchLengthVector.size() < nodeIndex + 1)
+					{
+					branchLengthVector.resize(nodeIndex + 1);
+					}
+				NxsSimpleEdge edge = nd->GetEdgeToParent();
+
+				NxsSimpleNode * par = 0L;
+				par = (NxsSimpleNode *) edge.GetParent();
+				if (par != 0L)
+					{
+					parentVector[nodeIndex] = 1 + par->GetTaxonIndex();
+					branchLengthVector[nodeIndex] = edge.GetDblEdgeLen();
+					}
+				else
+					{
+					parentVector[nodeIndex] = 0;
+					branchLengthVector[nodeIndex] = -1.0;
+					}
+				}
+			std::cout << "Parents = [";
+			for (std::vector<unsigned>::const_iterator nIt = parentVector.begin(); nIt != parentVector.end(); ++nIt)
+				{
+				std::cout << *nIt << ", ";				
+				}
+			std::cout << "]\nbranch lengths = [";
+			for (std::vector<double>::const_iterator nIt = branchLengthVector.begin(); nIt != branchLengthVector.end(); ++nIt)
+				{
+				std::cout << *nIt << ", ";				
+				}
+			std::cout << "]\n";
+#endif
+		}
+	}
+/*!
+	Writes contents of this block in NEXUS format to `out'.
+*/
+void NxsTreesBlock::WriteAsNexus(std::ostream &out) const
+	{
+	if (GetNumTrees() == 0)
+		return;
+	out << "BEGIN TREES;\n";
+	WriteBasicBlockCommands(out);
+	if (this->writeTranslateTable)
+		WriteTranslateCommand(out);
+	WriteTreesCommand(out);
+	WriteSkippedCommands(out);
+	out << "END;\n";
+	}
+NxsTreesBlock *NxsTreesBlockFactory::GetBlockReaderForID(const std::string & idneeded, NxsReader *reader, NxsToken *)
+	{
+	if (reader == NULL || idneeded != "TREES")
+		return NULL;
+	NxsTreesBlock * nb = new NxsTreesBlock(NULL);
+	nb->SetCreateImpliedBlock(true);
+	nb->SetImplementsLinkAPI(true);
+	return nb;
+	}
+void NxsTreesBlock::ConstructDefaultTranslateTable(NxsToken &token, const char * cmd)
+	{
+	if (taxa == NULL)
+		{
+		if (nxsReader == NULL)
+			GenerateNxsException(token, "A Taxa block must be read before the Trees block can be read.");
+		unsigned nTb;
+		nxsReader->GetTaxaBlockByTitle(NULL, &nTb);
+		AssureTaxaBlock(nTb == 0 && allowImplicitNames && createImpliedBlock, token, cmd);
+		}
+	const unsigned nt = taxa->GetNTaxTotal();
+	if (nt == 0)
+		{
+		if (allowImplicitNames)
+			{
+			if (nexusReader)
+				nexusReader->NexusWarnToken("A TAXA block should be read before the TREES block (but no TAXA block was found).  Taxa will be inferred from their usage in the TREES block.", NxsReader::AMBIGUOUS_CONTENT_WARNING , token);
+			constructingTaxaBlock = true;
+			newtaxa = true;
+			}
+		else
+			GenerateNxsException(token, "Taxa block must be read before the Trees block can be read.");
+		}
+	if (!constructingTaxaBlock)
+		{
+		for (unsigned i = 0; i < nt; ++i)
+			{
+			NxsString s;
+			s += (i + 1);
+			capNameToInd[s] = i;
+			NxsString t(taxa->GetTaxonLabel(i).c_str());
+			t.ToUpper();
+			capNameToInd[t] = i;
+			}
+		}
+	}
+void NxsTreesBlock::HandleTranslateCommand(NxsToken &token)
+	{
+	for (unsigned n = 0;; ++n)
+		{
+		token.GetNextToken();
+		if (token.Equals(";"))
+			break;
+		NxsString key(token.GetTokenReference().c_str());
+		unsigned keyInd = taxa->TaxLabelToNumber(key);
+		token.GetNextToken();
+		NxsString value(token.GetTokenReference().c_str());
+		unsigned valueInd = taxa->TaxLabelToNumber(value);
+		if (valueInd == 0)
+			{
+			if (constructingTaxaBlock)
+				{
+				taxa->SetNtax(n+1);
+				// bug fix March 10, 2009 we had had an erroneous "+ 1" added to the index
+				unsigned newVal = taxa->AddTaxonLabel(value);
+				NxsString numV;
+				numV += (1 + newVal);
+				if (capNameToInd.find(numV) == capNameToInd.end())
+					capNameToInd[numV] = newVal;
+				// bug fix March 10, 2009.  When we get no taxa block, but a translate
+				//	table we need to add the label to the translation table (because the
+				//	call to ConstructDefaultTranslateTable will not have been able
+				//	to fill in any taxon labels)
+				value.ToUpper();
+				if (capNameToInd.find(value) == capNameToInd.end())
+					capNameToInd[value] = newVal;
+
+				}
+			else if (nexusReader)
+				{
+				errormsg << "Unknown taxon " << value << " in TRANSLATE command.\nThe translate key "<< key << " has NOT been added to the translation table!";
+				nexusReader->NexusWarnToken(errormsg, NxsReader::PROBABLY_INCORRECT_CONTENT_WARNING, token);
+				errormsg.clear();
+				}
+			}
+		if (valueInd > 0)
+			{
+			if (keyInd != 0 && keyInd != valueInd && nexusReader)
+				{
+				errormsg << "TRANSLATE command overwriting the taxon " << key << " with a redirection to " << value;
+				nexusReader->NexusWarnToken(errormsg, NxsReader::OVERWRITING_CONTENT_WARNING, token);
+				errormsg.clear();
+				}
+			key.ToUpper();
+			capNameToInd[key] = valueInd - 1;
+			}
+		token.GetNextToken();
+		if (token.Equals(";"))
+			break;
+		if (!token.Equals(","))
+			{
+			errormsg << "Expecting a , or ; after a translate key-value pair. Found " << token.GetTokenReference();
+			throw NxsException(errormsg, token);
+			}
+		}
+	constructingTaxaBlock = false;
+	}
+
+/*
+ Converts to a Nexus token (and thus loses some of the file position information).
+*/
+void NxsTreesBlock::ProcessTokenVecIntoTree(
+  const ProcessedNxsCommand & tokenVec,
+  NxsFullTreeDescription & td,
+  NxsLabelToIndicesMapper *taxa,
+  std::map<std::string, unsigned> &capNameToInd,
+  bool allowNewTaxa,
+  NxsReader * nexusReader,
+  const bool respectCase,
+  const bool validateInternalNodeLabels,
+  const bool treatIntegerLabelsAsNumbers, 
+  const bool allowNumericInterpretationOfTaxLabels)
+	{
+	ProcessedNxsCommand::const_iterator tvIt = tokenVec.begin();
+	ostringstream tokenStream;
+	long line = 0;
+	long col = 0;
+	file_pos pos = 0;
+	if (!tokenVec.empty())
+		{
+		line = tvIt->GetLineNumber();
+		col = tvIt->GetColumnNumber();
+		pos = tvIt->GetFilePosition();
+		for (;tvIt != tokenVec.end(); ++tvIt)
+			tokenStream << NxsString::GetEscaped(tvIt->GetToken());
+		tokenStream << ';';
+		}
+	std::string s = tokenStream.str();
+	istringstream newickstream(s);
+	NxsToken token(newickstream);
+	if (td.RequiresNewickNameTokenizing())
+		{
+		token.UseNewickTokenization(true);
+		}
+
+	try
+		{
+		ProcessTokenStreamIntoTree(token, td, taxa, capNameToInd, allowNewTaxa, nexusReader, respectCase, 
+								   validateInternalNodeLabels,  treatIntegerLabelsAsNumbers, allowNumericInterpretationOfTaxLabels);
+		}
+	catch (NxsException & x)
+		{
+		x.pos += pos;
+		x.line += line;
+		x.col += col;
+		throw x;
+		}
+	}
+
+std::vector<std::string> NxsFullTreeDescription::GetTreeTokens() const
+	{
+	const std::string & n = this->GetNewick();
+	std::string y;
+	const std::string *p = &n;
+	if (n.empty() || *n.rend() != ';') {
+			y = n;
+			y.append(1, ';');
+			p = &y;
+		}
+	istringstream newickstream(*p);
+	NxsToken tokenizer(newickstream);
+	if (this->RequiresNewickNameTokenizing())
+		{
+		tokenizer.UseNewickTokenization(true);
+		}
+	std::list<std::string> tl;
+	tokenizer.SetLabileFlagBit(NxsToken::hyphenNotPunctuation);
+	tokenizer.GetNextToken();
+	while (!tokenizer.EqualsCaseSensitive(";"))
+		{
+		tl.push_back(tokenizer.GetTokenReference());
+		tokenizer.SetLabileFlagBit(NxsToken::hyphenNotPunctuation);
+		tokenizer.GetNextToken();
+		}
+	return std::vector<std::string>(tl.begin(), tl.end());
+	}
+
+
+void NxsTreesBlock::ProcessTokenStreamIntoTree(
+  NxsToken & token,
+  NxsFullTreeDescription & td,
+  NxsLabelToIndicesMapper *taxa,
+  std::map<std::string, unsigned> &capNameToInd,
+  bool allowNewTaxa,
+  NxsReader * nexusReader,
+  const bool respectCase,
+  const bool validateInternalNodeLabels,
+  const bool treatIntegerLabelsAsNumbers,
+  const bool allowNumericInterpretationOfTaxLabels)
+	{
+	bool previousNonIntegerLabels=false, previousAllIntegerLabels = false;
+	NxsString errormsg;
+	int & flags = td.flags;
+	bool NHXComments = false;
+	bool someMissingEdgeLens = false;
+	bool someHaveEdgeLens = false;
+	bool someRealEdgeLens = false;
+	bool hasPolytomies = false;
+	bool hasDegTwoNodes = false;
+	bool hasInternalLabels = false;
+	bool hasInternalLabelsInTaxa = false;
+	bool hasInternalLabelsNotInTaxa = false;
+	const bool rooted = (flags & NxsFullTreeDescription::NXS_IS_ROOTED_BIT);
+	std::stack<unsigned> nchildren;
+	std::set<unsigned> taxaEncountered;
+	double minDblEdgeLen = DBL_MAX;
+	int minIntEdgeLen = INT_MAX;
+	double lastFltEdgeLen;
+	long lastIntEdgeLen;
+	bool taxsetRead = false;
+	token.GetNextToken();
+	ostringstream newickStream;
+	if (!token.Equals("("))
+		{
+		errormsg << "Expecting a ( to start the tree description, but found " << token.GetTokenReference();
+		throw NxsException(errormsg, token);
+		}
+	nchildren.push(0);
+	newickStream << '(';
+	int prevToken = NXS_TREE_OPEN_PARENS_TOKEN;
+	token.GetNextToken();
+	for (;;)
+		{
+		const std::vector<NxsComment> & ecs = token.GetEmbeddedComments();
+		for (std::vector<NxsComment>::const_iterator ecsIt = ecs.begin(); ecsIt != ecs.end(); ++ecsIt)
+			{
+			if (!NHXComments)
+				{
+				const std::string & ns = ecsIt->GetText();
+				if (ns.length() > 5 && ns[0] == '&' && ns[1] == '&' && ns[2] == 'N' &&ns[3] == 'H' && ns[4] == 'X')
+					NHXComments = true;
+				}
+			ecsIt->WriteAsNexus(newickStream);
+			}
+		if (token.Equals(";"))
+			{
+			if (!nchildren.empty())
+				throw NxsException("Semicolon found before the end of the tree description.  This means that more \"(\" characters  than \")\"  were found.", token);
+			break;
+			}
+		const NxsString & tstr = token.GetTokenReference();
+		const char * t = tstr.c_str();
+		bool handled;
+		handled = false;
+		if (tstr.length() == 1)
+			{
+			if (t[0] == '(')
+				{
+				if (nchildren.empty())
+					throw NxsException("End of tree description.  Expected ; but found (", token);
+				if (prevToken == NXS_TREE_CLOSE_PARENS_TOKEN || prevToken == NXS_TREE_CLADE_NAME_TOKEN || prevToken == NXS_TREE_BRLEN_TOKEN)
+					{
+					errormsg << "Expecting a , before a new subtree definition:\n \")(\"\n \"name(\" and\n \"branch-length(\"\n are prohibited.";
+					if (nexusReader)
+						nexusReader->NexusWarnToken(errormsg, NxsReader::PROBABLY_INCORRECT_CONTENT_WARNING, token);
+					else
+						throw NxsException(errormsg, token);
+					/* if we did not throw an excection, then we are in relaxed parsing mode.
+						We'll add the implied ,
+					*/
+					if (!someMissingEdgeLens && (prevToken == NXS_TREE_CLOSE_PARENS_TOKEN || prevToken == NXS_TREE_CLADE_NAME_TOKEN))
+						someMissingEdgeLens = true;
+					newickStream << ',';
+					prevToken = NXS_TREE_COMMA_TOKEN;
+					}
+				else if (prevToken == NXS_TREE_COLON_TOKEN)
+					throw NxsException("Expecting a branch length after a : but found (", token);
+				nchildren.top() += 1;
+				nchildren.push(0);
+				newickStream << '(';
+				prevToken = NXS_TREE_OPEN_PARENS_TOKEN;
+				handled = true;
+				}
+			else if (t[0] == ')')
+				{
+				if (nchildren.empty())
+					throw NxsException("End of tree description.  Expected ; but found )", token);
+				if (prevToken == NXS_TREE_OPEN_PARENS_TOKEN || prevToken == NXS_TREE_COMMA_TOKEN)
+					throw NxsException("Expecting a clade description before the subtree's closing )\n \"()\" and \",)\" are prohibited.", token);
+				if (prevToken == NXS_TREE_COLON_TOKEN)
+					throw NxsException("Expecting a branch length after a : but found (", token);
+				if (!someMissingEdgeLens && (prevToken == NXS_TREE_CLOSE_PARENS_TOKEN || prevToken == NXS_TREE_CLADE_NAME_TOKEN))
+					someMissingEdgeLens = true;
+				if (nchildren.top() == 1)
+					hasDegTwoNodes = true;
+				else if (nchildren.top() > 2)
+					{
+					if (rooted)
+						hasPolytomies = true;
+					else if (nchildren.top() > 3 || nchildren.size() > 1) /* three children are allowed not considered a polytomy */
+						hasPolytomies = true;
+					}
+				nchildren.pop();
+				newickStream << ')';
+				prevToken = NXS_TREE_CLOSE_PARENS_TOKEN;
+				handled = true;
+				}
+			else if (t[0] == ':')
+				{
+				if (prevToken != NXS_TREE_CLOSE_PARENS_TOKEN && prevToken != NXS_TREE_CLADE_NAME_TOKEN)
+					throw NxsException("Found a : separator for a subtree at an inappropriate location. A colon is only permitted after a clade name or )-symbol.", token);
+				if (taxsetRead && prevToken == NXS_TREE_CLADE_NAME_TOKEN)
+					throw NxsException("Found a : separator after a taxset name. Branch lengths cannot be assigned to multi-taxon taxsets.", token);
+				newickStream << ':';
+				prevToken = NXS_TREE_COLON_TOKEN;
+				handled = true;
+				token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation); // this allows us to deal with sci. not. in branchlengths (and negative branch lengths).
+				}
+			else if (t[0] == ',')
+				{
+				if (prevToken == NXS_TREE_OPEN_PARENS_TOKEN)
+					throw NxsException("Found a empty subclade found. The combination \"(,\" is prohibited.", token);
+				if (prevToken == NXS_TREE_COMMA_TOKEN)
+					throw NxsException("Found a empty subclade found. The combination \",,\" is prohibited.", token);
+				if (prevToken == NXS_TREE_COLON_TOKEN)
+					throw NxsException("Found a , when a branch length was expected found. The combination \":,\" is prohibited.", token);
+				if (!someMissingEdgeLens && (prevToken == NXS_TREE_CLOSE_PARENS_TOKEN || prevToken == NXS_TREE_CLADE_NAME_TOKEN))
+					someMissingEdgeLens = true;
+				newickStream << ',';
+				prevToken = NXS_TREE_COMMA_TOKEN;
+				handled = true;
+				}
+			}
+		if (!handled)
+			{
+			if (prevToken == NXS_TREE_COLON_TOKEN)
+				{
+				bool handledLength = false;
+				if (!someRealEdgeLens)
+					{
+					if (NxsString::to_long(t, &lastIntEdgeLen))
+						{
+						handledLength = true;
+						if (lastIntEdgeLen < minIntEdgeLen)
+							minIntEdgeLen = (int)lastIntEdgeLen;
+						}
+					}
+				if (!handledLength)
+					{
+					if (!NxsString::to_double(t, &lastFltEdgeLen))
+						{
+						errormsg << "Expecting a number as a branch length. Found " << tstr;
+						throw NxsException(errormsg, token);
+						}
+					someRealEdgeLens = true;
+					if (lastFltEdgeLen < minDblEdgeLen)
+						minDblEdgeLen = lastFltEdgeLen;
+					}
+				newickStream << tstr;
+				someHaveEdgeLens = true;
+				prevToken = NXS_TREE_BRLEN_TOKEN;
+				}
+			else
+				{
+				if (prevToken == NXS_TREE_BRLEN_TOKEN || prevToken == NXS_TREE_CLADE_NAME_TOKEN)
+					{
+					errormsg << "Found a name " << tstr << " which should be preceded by a ( or a ,";
+					throw NxsException(errormsg, token);
+					}
+				taxsetRead = false;
+				NxsString ucl(t);
+				if (!respectCase)
+					ucl.ToUpper();
+				NxsString toAppend;
+				if (prevToken == NXS_TREE_CLOSE_PARENS_TOKEN)
+					{
+					if (validateInternalNodeLabels)
+						{
+						std::map<std::string, unsigned>::const_iterator tt = capNameToInd.find(ucl);
+						unsigned ind = (tt == capNameToInd.end() ? UINT_MAX : tt->second);
+						if (taxaEncountered.find(ind) != taxaEncountered.end())
+							{
+							errormsg << "Taxon number " << ind + 1 << " (coded by the token " << tstr << ") has already been encountered in this tree. Duplication of taxa in a tree is prohibited.";
+							throw NxsException(errormsg, token);
+							}
+						hasInternalLabels = true;
+						if (ind == UINT_MAX)
+							{
+							hasInternalLabelsNotInTaxa = true;
+							toAppend += NxsString::GetEscaped(tstr);
+							}
+						else
+							{
+							hasInternalLabelsInTaxa = true;
+							taxaEncountered.insert(ind);
+							toAppend += (1 + ind);
+							}
+						}
+					else
+						{
+						hasInternalLabels = true;
+						hasInternalLabelsNotInTaxa = true;
+						toAppend += NxsString::GetEscaped(tstr);
+						}
+					}
+				else
+					{
+					std::map<std::string, unsigned>::const_iterator tt = capNameToInd.find(ucl);
+					unsigned ind = (tt == capNameToInd.end() ? UINT_MAX : tt->second);
+					if (taxaEncountered.find(ind) != taxaEncountered.end())
+						{
+						errormsg << "Taxon number " << ind + 1 << " (coded by the token " << tstr << ") has already been encountered in this tree. Duplication of taxa in a tree is prohibited.";
+						throw NxsException(errormsg, token);
+						}
+					if (ind == UINT_MAX)
+						{
+						std::set<unsigned> csinds;
+						if (allowNumericInterpretationOfTaxLabels) //@TEMPORARY hack
+							NxsLabelToIndicesMapper::allowNumberAsIndexPlusOne = false;
+						unsigned nadded = taxa->GetIndexSet(tstr, &csinds);
+						if (allowNumericInterpretationOfTaxLabels) //@TEMPORARY hack
+							NxsLabelToIndicesMapper::allowNumberAsIndexPlusOne = true;
+						if (nadded == 0)
+							{
+							if (!allowNewTaxa)
+								{
+								errormsg << "Expecting a Taxon label after a \"" << (prevToken == NXS_TREE_OPEN_PARENS_TOKEN ? '(' : ',') << "\" character. Found \"" << tstr << "\" but this is not a recognized taxon label.";
+								throw NxsException(errormsg, token);
+								}
+							long dummy;
+							if (treatIntegerLabelsAsNumbers && NxsString::to_long(ucl.c_str(), &dummy))
+								{
+								if (previousNonIntegerLabels)
+									{
+									errormsg << "Trees are being read in a mode that treats integer taxon labels as the number of the taxon. The mixing of integer and non-integer labels is not supported";
+									throw NxsException(errormsg, token);
+									}
+								previousAllIntegerLabels = true;
+								if (dummy < 1)
+									{
+									errormsg << "Trees are being read in a mode that treats integer taxon labels as the number of the taxon. All numbers are expected to be > 0";
+									throw NxsException(errormsg, token);
+									}
+								unsigned currNT = taxa->GetNumLabelsCurrentlyStored();
+								unsigned tn = (unsigned) dummy;
+								//errormsg << "numeric taxon handling -- currNT =  " << currNT << ". dummy= " << dummy << ".\n" ;
+								while (currNT < tn)
+									{
+									NxsString tasstring;
+									tasstring << ++currNT;
+									unsigned valueInd = taxa->AppendNewLabel(tasstring);
+									capNameToInd[tasstring] = valueInd;
+									//errormsg << "numeric taxon handling -- registering " << tasstring << " to " << valueInd << " mapping.\n";
+									}
+								std::map<std::string, unsigned>::const_iterator ttWithAdditions = capNameToInd.find(ucl);
+								unsigned indWithAdditions = (ttWithAdditions == capNameToInd.end() ? UINT_MAX : ttWithAdditions->second);
+								if (indWithAdditions == UINT_MAX)
+									{
+									errormsg << "Trees are being read in a mode that treats integer taxon labels as the number of the taxon - only numeric taxon labels were expected (the lookup table for "<< ucl << " failed to yield a hit, indicating that some non-numeric labels have been registered at some point)";
+									throw NxsException(errormsg, token);
+									}
+								taxaEncountered.insert(indWithAdditions);
+								nchildren.top() += 1;
+								toAppend += (1 + indWithAdditions);
+								}
+							else
+								{
+								if (treatIntegerLabelsAsNumbers)
+									{
+									if (previousAllIntegerLabels)
+										{
+										errormsg << "Trees are being read in a mode that treats integer taxon labels as the number of the taxon. The mixing of integer and non-integer labels (such as \"" << t << "\") is not supported";
+										throw NxsException(errormsg, token);
+										}
+									previousNonIntegerLabels = true;
+									}
+								std::string tasstring(tstr.c_str());
+								unsigned valueInd = taxa->AppendNewLabel(tasstring);
+								if (allowNumericInterpretationOfTaxLabels)
+									{
+									NxsString numV;
+									numV += (valueInd+1);
+									if (capNameToInd.find(numV) == capNameToInd.end())
+										capNameToInd[numV] = valueInd;
+									}
+								if (!respectCase)
+									NxsString::to_upper(tasstring);
+								capNameToInd[tasstring] = valueInd;
+								taxaEncountered.insert(valueInd);
+								nchildren.top() += 1;
+								toAppend += (1 + valueInd);
+								}
+							}
+						else
+							{
+							bool firstTaxonAdded = true;
+							for (std::set<unsigned>::const_iterator cit = csinds.begin(); cit != csinds.end(); ++cit)
+								{
+								if (taxaEncountered.find(*cit) != taxaEncountered.end())
+									{
+									errormsg << "Taxon number " << *cit + 1 << " (one of the members of the taxset " << tstr << ") has already been encountered in this tree. Duplication of taxa in a tree is prohibited.";
+									throw NxsException(errormsg, token);
+									}
+								taxaEncountered.insert(*cit);
+								nchildren.top() += 1;
+								if (!firstTaxonAdded)
+									toAppend.append(1, ',');
+								toAppend += (1 + *cit);
+								firstTaxonAdded = false;
+								}
+							if (nadded > 1)
+								{
+								taxsetRead = true;
+								someMissingEdgeLens = true;
+								}
+							}
+						}
+					else
+						{
+						taxaEncountered.insert(ind);
+						nchildren.top() += 1;
+						toAppend += (1 + ind);
+						}
+					}
+				newickStream << toAppend;
+				prevToken = NXS_TREE_CLADE_NAME_TOKEN;
+				}
+			}
+		token.GetNextToken();
+		}
+	td.flags |= NxsFullTreeDescription::NXS_TREE_PROCESSED;
+	if (someHaveEdgeLens)
+		{
+		flags |= NxsFullTreeDescription::NXS_HAS_SOME_EDGE_LENGTHS_BIT;
+		if (someRealEdgeLens)
+			{
+			flags &= ~(NxsFullTreeDescription::NXS_INT_EDGE_LENGTHS_BIT);
+			td.minDblEdgeLen = minDblEdgeLen;
+			}
+		else
+			{
+			flags |= NxsFullTreeDescription::NXS_INT_EDGE_LENGTHS_BIT;
+			td.minIntEdgeLen = minIntEdgeLen;
+			}
+		}
+	td.newick = newickStream.str();
+	if (someMissingEdgeLens)
+		flags |= NxsFullTreeDescription::NXS_MISSING_SOME_EDGE_LENGTHS_BIT;
+	if (hasPolytomies)
+		flags |= NxsFullTreeDescription::NXS_HAS_POLYTOMY_BIT;
+	if (hasDegTwoNodes)
+		flags |= NxsFullTreeDescription::NXS_HAS_DEG_TWO_NODES_BIT;
+	if (hasInternalLabels)
+		{
+		flags |= NxsFullTreeDescription::NXS_HAS_INTERNAL_NAMES_BIT;
+		if (hasInternalLabelsNotInTaxa)
+			flags |= NxsFullTreeDescription::NXS_HAS_NEW_INTERNAL_NAMES_BIT;
+		if (hasInternalLabelsInTaxa)
+			flags |= NxsFullTreeDescription::NXS_KNOWN_INTERNAL_NAMES_BIT;
+		}
+	if (NHXComments)
+		flags |= NxsFullTreeDescription::NXS_HAS_NHX_BIT;
+	if (taxaEncountered.size() == taxa->GetMaxIndex() + 1)
+		flags |= NxsFullTreeDescription::NXS_HAS_ALL_TAXA_BIT;
+	}
+
+void NxsTreesBlock::ProcessTree(NxsFullTreeDescription & ftd) const
+	{
+	if (ftd.flags & NxsFullTreeDescription::NXS_TREE_PROCESSED)
+		return;
+	ftd.newick.append(1, ';');
+	const std::string incomingNewick = ftd.newick;
+	ftd.newick.clear();
+	istringstream newickstream(incomingNewick);
+	NxsToken token(newickstream);
+	if (ftd.RequiresNewickNameTokenizing())
+		{
+		token.UseNewickTokenization(true);
+		}
+	ProcessTokenStreamIntoTree(token, ftd, taxa, capNameToInd, constructingTaxaBlock, nexusReader, false, 
+								validateInternalNodeLabels, treatIntegerLabelsAsNumbers, allowNumericInterpretationOfTaxLabels);
+	}
+
+void NxsTreesBlock::HandleTreeCommand(NxsToken &token, bool rooted)
+	{
+	NCL_ASSERT(taxa);
+	token.GetNextToken();
+	if (token.Equals("*"))
+		{
+		defaultTreeInd = (unsigned)trees.size();
+		token.GetNextToken();
+		}
+	NxsString treeName = token.GetToken();
+	DemandEquals(token, "after tree name in TREE command");
+	file_pos fp = 0;
+	int fline = (int)token.GetFileLine();
+	int fcol = (int)token.GetFileColumn();
+	fp = token.GetFilePosition();
+	try {
+		// This should be either a tree description or a command comment specifying
+		// whether this tree is to be rooted ([&R]) or unrooted ([&U]).
+		//
+		token.SetLabileFlagBit(NxsToken::saveCommandComments);
+		token.SetLabileFlagBit(NxsToken::parentheticalToken);
+		token.GetNextToken();
+		NxsString s = token.GetToken();
+		if (!s.empty() && s[0] == '&')
+			{
+			if (s[1] == 'R' || s[1] == 'r')
+				rooted = true;
+			else if (s[1] == 'U' || s[1] == 'u')
+				rooted = false;
+			else
+				{
+				errormsg << "[" << token.GetToken() << "] is not a valid command comment in a TREE command";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			// now grab the tree description
+			token.SetLabileFlagBit(NxsToken::parentheticalToken);
+			token.GetNextToken();
+			s = token.GetToken();
+			}
+		if (!s.empty() && s[0] != '(')
+			{
+			errormsg << "Expecting command comment or tree description in TREE (or UTREE) command, but found " << token.GetToken() << " instead";
+			throw NxsException(errormsg);
+			}
+		}
+	catch (NxsX_UnexpectedEOF &)
+		{
+		errormsg << "Unexpected end of file in tree description.\n";
+		errormsg << "This probably indicates that the parentheses in the newick description are not balanced, and one or more closing parentheses are needed.";
+		throw NxsException(errormsg, fp, fline, fcol);
+		}
+	std::string mt;
+	int f = (rooted ? NxsFullTreeDescription::NXS_IS_ROOTED_BIT : 0);
+	trees.push_back(NxsFullTreeDescription(mt, treeName, f));
+	NxsFullTreeDescription & td = trees[trees.size() -1];
+	ReadTreeFromOpenParensToken(td, token);
+	}
+
+void NxsTreesBlock::ReadTreeFromOpenParensToken(NxsFullTreeDescription &td, NxsToken & token)
+	{
+	if (this->useNewickTokenizingDuringParse)
+		{
+		token.UseNewickTokenization(true);
+		td.SetRequiresNewickNameTokenizing(true);
+		}
+	try {
+		file_pos fp = 0;
+		int fline = (int)token.GetFileLine();
+		int fcol = (int)token.GetFileColumn();
+		ostringstream newickStream;
+		newickStream << token.GetTokenReference();
+		token.GetNextToken();
+		const std::vector<NxsComment> & ecs = token.GetEmbeddedComments();
+		for (std::vector<NxsComment>::const_iterator ecsIt = ecs.begin(); ecsIt != ecs.end(); ++ecsIt)
+			ecsIt->WriteAsNexus(newickStream);
+		while (!token.Equals(";"))
+			{
+			if (token.Equals("(") || token.Equals(")") || token.Equals(","))
+				GenerateUnexpectedTokenNxsException(token, "root taxon information");
+			newickStream << NxsString::GetEscaped(token.GetTokenReference());
+			token.GetNextToken();
+			const std::vector<NxsComment> & iecs = token.GetEmbeddedComments();
+			for (std::vector<NxsComment>::const_iterator iecsIt = iecs.begin(); iecsIt != iecs.end(); ++iecsIt)
+				iecsIt->WriteAsNexus(newickStream);
+			}
+		td.newick = newickStream.str();
+		if (processAllTreesDuringParse)
+			{
+			try
+				{
+				ProcessTree(td);
+				if (this->processedTreeValidationFunction)
+					{
+					if (!this->processedTreeValidationFunction(td, this->ptvArg, this))
+						trees.pop_back();
+					}
+				}
+			catch (NxsException &x)
+				{
+				x.pos += fp;
+				x.line += fline - 1; /*both tokenizers start at 1 instead of zero, so we need to decrement the line */
+				x.col += fcol;
+				throw x;
+				}
+			}
+		}
+	catch (...) 
+		{
+		if (this->useNewickTokenizingDuringParse) 
+			token.UseNewickTokenization(false);
+		throw;
+		}
+	if (this->useNewickTokenizingDuringParse)
+		token.UseNewickTokenization(false);
+	}
+/*!
+	This function provides the ability to read everything following the block name (which is read by the NxsReader
+	object) to the END or ENDBLOCK command. Characters are read from the input stream `in'. Overrides the abstract
+	virtual function in the base class.
+*/
+void NxsTreesBlock::Read(
+  NxsToken &token)	/* the token used to read from `in' */
+	{
+	isEmpty = false;
+	isUserSupplied = true;
+	DemandEndSemicolon(token, "BEGIN TREES");
+	//AssureTaxaBlock(createImpliedBlock, token, "BEGIN TREES");
+	bool readTranslate = false;
+	bool readTree = false;
+	errormsg.clear();
+	constructingTaxaBlock = false;
+	newtaxa = false;
+	capNameToInd.clear();
+	unsigned numSigInts = NxsReader::getNumSignalIntsCaught();
+	const bool checkingSignals = NxsReader::getNCLCatchesSignals();
+
+	for (;;)
+		{
+		token.GetNextToken();
+		if (checkingSignals && NxsReader::getNumSignalIntsCaught() != numSigInts)
+			{
+			throw NxsSignalCanceledParseException("Reading TREES Block");
+			}
+		NxsBlock::NxsCommandResult res = HandleBasicBlockCommands(token);
+		if (res == NxsBlock::NxsCommandResult(STOP_PARSING_BLOCK))
+			{
+			if (constructingTaxaBlock)
+				{
+				if (taxa && taxa->GetNTax() > 0)
+					newtaxa = true;
+				constructingTaxaBlock = false; /* we don't allow the construction of taxa blocks over repeated readings or after the block has been read */
+				}
+			return;
+			}
+		if (res != NxsBlock::NxsCommandResult(HANDLED_COMMAND))
+			{
+			if (token.Equals("TRANSLATE"))
+				{
+				if (readTree)
+					WarnDangerousContent("TRANSLATE command must precede any TREE commands in a TREES block", token);
+				if (readTranslate)
+					{
+					WarnDangerousContent("Only one TRANSLATE command may be read in a TREES block", token);
+					capNameToInd.clear();
+					}
+				readTranslate = true;
+				ConstructDefaultTranslateTable(token, "TRANSLATE");
+				HandleTranslateCommand(token);
+				}
+			else
+				{
+				bool utreeCmd = token.Equals("UTREE");
+				bool treeCmd = token.Equals("TREE");
+				bool readAsRooted = (treeCmd && this->treatAsRootedByDefault);
+				if (utreeCmd || treeCmd)
+					{
+					if (!readTranslate && ! readTree)
+						ConstructDefaultTranslateTable(token, token.GetTokenReference().c_str());
+					readTree = true;
+					HandleTreeCommand(token, readAsRooted);
+					}
+				else
+					SkipCommand(token);
+				}
+			}
+		}
+	}
+/*! Returns the description of the tree with index `i' where i is in [0..ntrees).
+	Node numbers will be translated to names in the resulting tree description.
+	Use GetTreeDescription if translation is not desired.
+
+	Note that if the Names are complex they may complicate simple parses of the tree
+	For example "A (" is a valid NEXUS taxon name (though one that I hope no one is crazy enough to use.
+*/
+NxsString NxsTreesBlock::GetTranslatedTreeDescription(
+  unsigned i)	/* the index of the tree for which the description is to be returned */
+	{
+	NCL_ASSERT(i < trees.size());
+	NCL_ASSERT(taxa);
+	NxsFullTreeDescription & ftd = trees.at(i);
+	ProcessTree(ftd);
+	std::string incomingNewick = ftd.newick;
+	incomingNewick.append(1, ';');
+	istringstream newickstream(incomingNewick);
+	NxsToken token(newickstream);
+	if (ftd.RequiresNewickNameTokenizing())
+		{
+		token.UseNewickTokenization(true);
+		}
+
+	token.GetNextToken();
+	if (!token.Equals("("))
+		{
+		errormsg << "Expecting a ( to start the tree description, but found " << token.GetTokenReference();
+		throw NxsException(errormsg, token);
+		}
+	int prevToken = NXS_TREE_OPEN_PARENS_TOKEN;
+	long taxIndLong;
+	const unsigned ntax = taxa->GetNTaxTotal();
+	ostringstream translated;
+	for (;;)
+		{
+		const std::vector<NxsComment> & ecs = token.GetEmbeddedComments();
+		for (std::vector<NxsComment>::const_iterator ecsIt = ecs.begin(); ecsIt != ecs.end(); ++ecsIt)
+			ecsIt->WriteAsNexus(translated);
+		if (token.Equals(";"))
+			break;
+		const NxsString & t = token.GetTokenReference();
+		bool handled;
+		handled = false;
+		if (t.length() == 1)
+			{
+			if (t[0] == '(')
+				{
+				translated <<  '(';
+				prevToken = NXS_TREE_OPEN_PARENS_TOKEN;
+				handled = true;
+				}
+			else if (t[0] == ')')
+				{
+				translated << ')';
+				prevToken = NXS_TREE_CLOSE_PARENS_TOKEN;
+				handled = true;
+				}
+			else if (t[0] == ':')
+				{
+				translated << ':';
+				prevToken = NXS_TREE_COLON_TOKEN;
+				handled = true;
+				token.SetLabileFlagBit(NxsToken::hyphenNotPunctuation); // this allows us to deal with sci. not. in branchlengths (and negative branch lengths).
+				}
+			else if (t[0] == ',')
+				{
+				translated << ',';
+				prevToken = NXS_TREE_COMMA_TOKEN;
+				handled = true;
+				}
+			}
+		if (!handled)
+			{
+			if (prevToken == NXS_TREE_COLON_TOKEN)
+				{
+				translated << t;
+				prevToken = NXS_TREE_BRLEN_TOKEN;
+				}
+			else
+				{
+				if (NxsString::to_long(t.c_str(), &taxIndLong) && taxIndLong <= (long) ntax && taxIndLong > 0)
+					translated << NxsString::GetEscaped(taxa->GetTaxonLabel((unsigned) taxIndLong - 1));
+				else if (prevToken == NXS_TREE_CLOSE_PARENS_TOKEN)
+					translated << t;
+				else
+					{
+					errormsg << "Expecting a taxon index in a tree description, but found " << t;
+					throw NxsException(errormsg, token);
+					}
+				}
+			}
+		token.GetNextToken();
+		}
+	return NxsString(translated.str().c_str());
+	}
+
+void NxsTreesBlock::ReadPhylipTreeFile(NxsToken & token)
+	{
+	bool prevAIN = allowImplicitNames;
+	bool prevUNTDP = useNewickTokenizingDuringParse;
+	allowImplicitNames = true;
+	bool firstTree = true;
+	const bool prevEOFAllowed = token.GetEOFAllowed();
+	token.SetEOFAllowed(false);
+	try
+		{
+		for (;;)
+			{
+			token.SetLabileFlagBit(NxsToken::saveCommandComments);
+			token.SetLabileFlagBit(NxsToken::parentheticalToken);
+			token.GetNextToken();
+			NxsString s = token.GetToken();
+			bool rooted = false;
+			if (!s.empty() && s[0] == '&')
+				{
+				if (s[1] == 'R' || s[1] == 'r')
+					rooted = true;
+				else if (s[1] == 'U' || s[1] == 'u')
+					rooted = false;
+				else
+					{
+					errormsg << "[" << token.GetToken() << "] is not a valid command comment in a TREE command";
+					throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+					}
+				// now grab the tree description
+				token.SetLabileFlagBit(NxsToken::parentheticalToken);
+				token.GetNextToken();
+				s = token.GetToken();
+				}
+			if (!s.empty() && s[0] != '(')
+				{
+				errormsg << "Expecting a tree description, but found \"" << token.GetToken() << "\" instead";
+				throw NxsException(errormsg);
+				}
+			if (firstTree)
+				{
+				ConstructDefaultTranslateTable(token, token.GetTokenReference().c_str());
+				firstTree = false;
+				}
+			int f = (rooted ? NxsFullTreeDescription::NXS_IS_ROOTED_BIT : 0);
+			std::string mt;
+			trees.push_back(NxsFullTreeDescription(mt, mt, f));
+			NxsFullTreeDescription & td = trees[trees.size() -1];
+			this->useNewickTokenizingDuringParse = true;
+			ReadTreeFromOpenParensToken(td, token);
+			this->useNewickTokenizingDuringParse = prevUNTDP;
+			this->constructingTaxaBlock = false; // we have to signal that we are done constructing the TAXA block
+			}
+		}
+	catch (NxsX_UnexpectedEOF &)
+		{
+		allowImplicitNames = prevAIN;
+		useNewickTokenizingDuringParse = prevUNTDP;
+		token.SetEOFAllowed(prevEOFAllowed);
+		if (firstTree)
+			{
+			errormsg << "Unexpected end of file in tree description.\n";
+			errormsg << "This probably indicates that the parentheses in the newick description are not balanced, and one or more closing parentheses are needed.";
+			throw NxsException(errormsg);
+			}
+		}
+	catch (...)
+		{
+		allowImplicitNames = prevAIN;
+		useNewickTokenizingDuringParse = prevUNTDP;
+		token.SetEOFAllowed(prevEOFAllowed);
+		throw;
+		}
+	token.SetEOFAllowed(prevEOFAllowed);
+	allowImplicitNames = prevAIN;
+	useNewickTokenizingDuringParse = prevUNTDP;
+	}
+
diff --git a/ncl/nxstreesblock.h b/ncl/nxstreesblock.h
new file mode 100644
index 0000000..f4049e4
--- /dev/null
+++ b/ncl/nxstreesblock.h
@@ -0,0 +1,983 @@
+//	Copyright (C) 1999-2003 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSTREESBLOCK_H
+#define NCL_NXSTREESBLOCK_H
+#include <climits>
+#include <cfloat>
+#include "ncl/nxsdefs.h"
+#include "ncl/nxstaxablock.h"
+
+class NxsTreesBlockAPI
+  : public NxsBlock, public NxsLabelToIndicesMapper
+	{
+ 	public:
+		virtual unsigned	GetNumDefaultTree() = 0;
+		virtual unsigned	GetNumTrees() = 0;
+		virtual NxsString	GetTreeName(unsigned i) = 0;
+		virtual NxsString	GetTreeDescription(unsigned i) = 0;
+		virtual NxsString	GetTranslatedTreeDescription(unsigned i) = 0;
+		virtual bool		IsDefaultTree(unsigned i) = 0;
+		virtual bool		IsRootedTree(unsigned i) = 0;
+	};
+/*! This function provides rudimentary support for parsing of NHX comments.
+	It is called during the creation of a NxsSimpleTree to handle any NHX comments
+
+	It fills `infoMap` with the key value pairs parsed from a comment that starts with
+		&&NHX
+	\returns the unparsed portion of the comment
+*/
+std::string parseNHXComment(const std::string comment, /*! the comment without the [] braces. If the comment does not start with &&NHX then the entire comment will be returned*/
+			std::map<std::string, std::string> *infoMap); /*!< the destination for key value pairs parsed out of the NHX comment */
+class NxsFullTreeDescription;
+class NxsSimpleNode;
+/*! The edge used by the NxsSimpleTree class.
+*/
+class NxsSimpleEdge
+	{
+	public:
+		bool EdgeLenIsDefaultValue() const
+			{
+			return defaultEdgeLen;
+			}
+
+		bool IsIntEdgeLen() const
+			{
+			return hasIntEdgeLens;
+			}
+
+		double GetDblEdgeLen() const
+			{
+			return hasIntEdgeLens ? (double) iEdgeLen : dEdgeLen ;
+			}
+
+		int GetIntEdgeLen() const
+			{
+			return hasIntEdgeLens ? iEdgeLen : (int) dEdgeLen ;
+			}
+
+		std::vector<NxsComment> GetUnprocessedComments() const
+			{
+			return unprocessedComments;
+			}
+
+		/*! \returns true if `key` was processed from a comment.
+			If the key was found and `value` pointer is not NULL, then the
+				*value will hold the value on exit
+		*/
+		bool GetInfo(const std::string &key, std::string *value) const
+			{
+			std::map<std::string, std::string>::const_iterator kvit = parsedInfo.find(key);
+			if (kvit == parsedInfo.end())
+				return false;
+			if (value != NULL)
+				*value = kvit->second;
+			return true;
+			}
+		/*! Returns a reference to the map that stores information in a generic
+			key to value mapping where both elements are strings.
+
+			This map is populated by the information from NHX comments during the creation of
+			a NxsSimpleTree.
+		*/
+		const std::map<std::string, std::string> & GetInfo() const
+			{
+			return parsedInfo;
+			}
+		const NxsSimpleNode * GetParent() const
+			{
+			return parent;
+			}
+		const NxsSimpleNode * GetChild() const
+			{
+			return child;
+			}
+
+		void SetDblEdgeLen(double e, const char *asString)
+			{
+			defaultEdgeLen = false;
+			hasIntEdgeLens = false;
+			dEdgeLen = e;
+			if (asString)
+				lenAsString.assign(asString);
+
+			}
+
+		void SetIntEdgeLen(int e, const char *asString)
+			{
+			defaultEdgeLen = false;
+			hasIntEdgeLens = true;
+			iEdgeLen = e;
+			if (asString)
+				lenAsString.assign(asString);
+			}
+		mutable void * scratch;
+		void SetParent(NxsSimpleNode *p) 
+		    {
+		    this->parent = p;
+		    }
+	private:
+		void WriteAsNewick(std::ostream &out, bool nhx) const;
+		void DealWithNexusComments(const std::vector<NxsComment> & ecs, bool NHXComments);
+
+		NxsSimpleEdge(NxsSimpleNode  *par, NxsSimpleNode * des, double edgeLen)
+			:scratch(0L),
+			parent(par),
+			child(des),
+			defaultEdgeLen(true),
+			hasIntEdgeLens(false),
+			dEdgeLen(edgeLen)
+			{
+			}
+
+		NxsSimpleEdge(int edgeLen, NxsSimpleNode *par, NxsSimpleNode * des)
+			:scratch(0L),
+			parent(par),
+			child(des),
+			defaultEdgeLen(true),
+			hasIntEdgeLens(true),
+			iEdgeLen(edgeLen)
+			{
+			}
+
+		NxsSimpleNode * GetMutableParent() const
+			{
+			return parent;
+			}
+
+		NxsSimpleNode * parent;
+		NxsSimpleNode * child;
+		bool			defaultEdgeLen;
+		bool			hasIntEdgeLens;
+		int				iEdgeLen;
+		double			dEdgeLen;
+		std::string		lenAsString; /*easy (but inefficient) means of preserving the formatting of the input branch length */
+		std::vector<NxsComment> unprocessedComments;
+		std::map<std::string, std::string> parsedInfo;
+		friend class NxsSimpleTree;
+		friend class NxsSimpleNode;
+	};
+
+/*! The node used by the NxsSimpleTree class.
+*/
+class NxsSimpleNode
+	{
+	public:
+		NxsSimpleEdge GetEdgeToParent() const
+			{
+			return edgeToPar;
+			}
+
+		const NxsSimpleEdge & GetEdgeToParentRef() const
+			{
+			return edgeToPar;
+			}
+
+		NxsSimpleEdge & GetMutableEdgeToParentRef()
+			{
+			return edgeToPar;
+			}
+
+		bool IsTip() const
+			{
+			return (lChild == 0L);
+			}
+		NxsSimpleNode *GetFirstChild() const
+			{
+			return lChild;
+			}
+		NxsSimpleNode * GetNextSib() const
+			{
+			return rSib;
+			}
+		NxsSimpleNode * GetLastChild() const
+			{
+			NxsSimpleNode * currNode = GetFirstChild();
+			if (!currNode)
+				return NULL;
+			NxsSimpleNode * nextNd = currNode->GetNextSib();
+			while (nextNd)
+				{
+				currNode = nextNd;
+				nextNd = currNode->GetNextSib();
+				}
+			return currNode;
+			}
+
+		std::vector<NxsSimpleNode *> GetChildren() const
+			{
+			std::vector<NxsSimpleNode *> children;
+			NxsSimpleNode * currNode = GetFirstChild();
+			while(currNode)
+				{
+				children.push_back(currNode);
+				currNode = currNode->GetNextSib();
+				}
+			return children;
+			}
+		// present for every leaf. UINT_MAX for internals labeled with taxlabels
+		unsigned GetTaxonIndex() const
+			{
+			return taxIndex;
+			}
+
+		// present for every leaf. UINT_MAX for internals labeled with taxlabels
+		void SetTaxonIndex(unsigned i)
+			{
+			taxIndex = i;
+			}
+
+		// non-empty only for internals that are labelled with names that are NOT taxLabels
+		std::string GetName() const
+			{
+			return name;
+			}
+		void SetName(const std::string &n)
+			{
+			name = n;
+			}
+		mutable void * scratch;
+
+		NxsSimpleNode(NxsSimpleNode *par, double edgeLen)
+			:scratch(0L),
+			lChild(0L),
+			rSib(0L),
+			edgeToPar(par, 0L, edgeLen),
+			taxIndex(UINT_MAX)
+			{
+			edgeToPar.child = this;
+			}
+
+
+	public:
+		void WriteAsNewick(std::ostream &out, bool nhx, bool useLeafNames, bool escapeNames, const NxsTaxaBlockAPI *taxa=0L) const;
+
+
+		NxsSimpleNode(int edgeLen, NxsSimpleNode *par)
+			:scratch(0L),
+			lChild(0L),
+			rSib(0L),
+			edgeToPar(edgeLen, par, 0L),
+			taxIndex(UINT_MAX)
+			{
+			edgeToPar.child = this;
+			}
+
+		NxsSimpleNode * GetParent() const
+			{
+			return edgeToPar.GetMutableParent();
+			}
+
+		void AddSib(NxsSimpleNode *n)
+			{
+			if (rSib)
+				rSib->AddSib(n);
+			else
+				rSib = n;
+			}
+		void AddChild(NxsSimpleNode *n)
+			{
+			if (lChild)
+				lChild->AddSib(n);
+			else
+				lChild = n;
+			}
+
+		bool RemoveChild(NxsSimpleNode *n)
+			{
+			if (n == 0L || lChild == 0L)
+			    return false;			
+			if (lChild == n)
+				lChild = lChild->rSib;
+			else 
+			    {
+			    NxsSimpleNode * c = lChild;
+				for (;;) 
+				    {
+				    if (c->rSib == n)
+				        {
+				        c->rSib = n->rSib;
+				        break;
+				        }
+				    if (c->rSib == 0L)
+				        return false;
+	    			}
+		    	}
+			n->edgeToPar.parent = 0L;
+			return true;
+			}
+		void AddSelfAndDesToPreorder(std::vector<const NxsSimpleNode *> &p) const;
+		NxsSimpleNode * FindTaxonIndex(unsigned leafIndex);
+
+        void LowLevelSetFirstChild(NxsSimpleNode *nd) {
+            lChild = nd;
+        }
+        void LowLevelSetNextSib(NxsSimpleNode *nd) {
+            rSib = nd;
+        }
+    private:
+		NxsSimpleNode * lChild;
+		NxsSimpleNode * rSib;
+		NxsSimpleEdge edgeToPar;
+		std::string name; // non-empty only for internals that are labelled with names that are NOT taxLabels
+		unsigned taxIndex; // present for every leaf. UINT_MAX for internals labeled with taxlabels
+		friend class NxsSimpleTree;
+	};
+/*! A simple tree class.
+	Internally NCL stores trees as newick strings with metadata (see the NxsFullTreeDescription class)
+	but you can create a NxsSimpleTree
+*/
+class NxsSimpleTree
+	{
+	public:
+		NxsSimpleTree(const NxsFullTreeDescription &ftd, const int defaultIntEdgeLen, const double defaultDblEdgeLen)
+			:defIntEdgeLen(defaultIntEdgeLen),
+			defDblEdgeLen(defaultDblEdgeLen),
+			realEdgeLens(false)
+			{
+			Initialize(ftd);
+			}
+		NxsSimpleTree(const int defaultIntEdgeLen, const double defaultDblEdgeLen)
+			:defIntEdgeLen(defaultIntEdgeLen),
+			defDblEdgeLen(defaultDblEdgeLen),
+			realEdgeLens(false)
+			{}
+		~NxsSimpleTree()
+			{
+			Clear();
+			}
+		void Initialize(const NxsFullTreeDescription &);
+
+
+		std::vector<const NxsSimpleNode *> GetPreorderTraversal() const;
+		std::vector<NxsSimpleNode *> & GetLeavesRef()
+			{
+			return leaves;
+			}
+		std::vector<std::vector<int> > GetIntPathDistances(bool toMRCA=false) const;
+		std::vector<std::vector<double> > GetDblPathDistances(bool toMRCA=false) const;
+
+		/** Writes just the newick description with numbers for leaf labels.
+			Neither the tree name or NEXUS ; are written
+		*/
+		void WriteAsNewick(std::ostream &out, bool nhx, bool useLeafNames, bool escapeNames, const NxsTaxaBlockAPI * taxa) const
+			{
+			if (root)
+				root->WriteAsNewick(out, nhx, useLeafNames, escapeNames, taxa);
+			}
+		NxsSimpleNode * RerootAt(unsigned leafIndex);
+        NxsSimpleNode * RerootAtNode(NxsSimpleNode *newRoot);
+
+		const NxsSimpleNode * GetRootConst() const
+			{
+			return root;
+			}
+	protected:
+		std::vector<NxsSimpleNode *> allNodes;
+		std::vector<NxsSimpleNode *> leaves;
+		NxsSimpleNode * root;
+		int defIntEdgeLen;
+		double defDblEdgeLen;
+		bool realEdgeLens;
+	public:
+		NxsSimpleNode * AllocNewNode(NxsSimpleNode *p)
+			{
+			NxsSimpleNode * nd;
+			if (realEdgeLens)
+				nd = new NxsSimpleNode(p, defDblEdgeLen);
+			else
+				nd = new NxsSimpleNode(defIntEdgeLen, p);
+			allNodes.push_back(nd);
+			return nd;
+			}
+
+		void Clear()
+			{
+			root = NULL;
+			for (std::vector<NxsSimpleNode *>::iterator nIt = allNodes.begin(); nIt != allNodes.end(); ++nIt)
+				delete *nIt;
+			allNodes.clear();
+			leaves.clear();
+			}
+		void FlipRootsChildToRoot(NxsSimpleNode *subRoot);
+		NxsSimpleTree(const NxsSimpleTree &); //not defined.  Not copyable
+		NxsSimpleTree & operator=(const NxsSimpleTree &); //not defined.  Not copyable
+	};
+
+/*! A class that encapsulates a newick string description of a tree and metadata about the tree.
+
+	the NxsTreesBlock stores the trees as NxsFullTreeDescription because during its parse
+	and validation of a tree string.
+	By default, NCL will "process" each tree -- converting the taxon labels to
+		numbers for the taxa (the number will be 1 + the taxon index).
+		During this processing, the trees block detects things about the tree such as whether
+		there are branch lengths on the tree, whether there are polytomies...
+
+	This data about the tree is then stored in a NxsFullTreeDescription
+	so that the client code can access some information about a tree before it parses
+	the newick string.
+
+	If you do not want to parse the newick string yourself, you can construct a
+		NxsSimpleTree object from a NxsFullTreeDescription object if the NxsFullTreeDescription
+		is "processed"
+
+	If the NxsTreesBlock is configured NOT to process trees (see NxsTreesBlock::SetProcessAllTreesDuringParse())
+*/
+class NxsFullTreeDescription
+	{
+	public:
+		enum TreeDescFlags
+			{ 	NXS_IS_ROOTED_BIT					= 0x0001,
+				NXS_HAS_SOME_EDGE_LENGTHS_BIT		= 0x0002,
+				NXS_MISSING_SOME_EDGE_LENGTHS_BIT	= 0x0004,
+				NXS_EDGE_LENGTH_UNION 				= 0x0006,
+				NXS_INT_EDGE_LENGTHS_BIT 			= 0x0008,
+				NXS_HAS_ALL_TAXA_BIT				= 0x0010,
+				NXS_HAS_NHX_BIT 					= 0x0020,
+				NXS_HAS_DEG_TWO_NODES_BIT			= 0x0040,
+				NXS_HAS_POLYTOMY_BIT				= 0x0080,
+				NXS_HAS_INTERNAL_NAMES_BIT			= 0x0100,
+				NXS_HAS_NEW_INTERNAL_NAMES_BIT		= 0x0200,
+				NXS_KNOWN_INTERNAL_NAMES_BIT		= 0x0400,
+				NXS_SOME_ZERO_EDGE_LEN_BIT			= 0x0800,
+				NXS_SOME_NEGATIVE_EDGE_LEN_BIT		= 0x1000,
+				NXS_TREE_PROCESSED 					= 0x2000
+			};
+		/*! Creates a Tree description from a newick string, name and int with bits that indicate
+			some metadata about the tree.
+		*/
+		NxsFullTreeDescription(const std::string & newickStr, /*!< the newick string */
+				const std::string &treeName, /*!< the name of the tree */
+				int infoFlags) /*!< union of the relevant bits from TreeDescFlags */
+			:newick(newickStr),
+			name(treeName),
+			flags(infoFlags),
+			minIntEdgeLen(INT_MAX),
+			minDblEdgeLen(DBL_MAX),
+			requireNewickNameTokenizing(false)
+			{}
+		/*! Tokenizes the tree into a vector of NEXUS tokens.
+			This makes it easier for to parse.
+		*/
+		std::vector<std::string> GetTreeTokens() const;
+
+		/** returns a newick string.
+			If the NxsFullTreeDescription is processed, then the string will have
+				1-based numbers corresponding to (1 + Taxa block's index of taxon)
+			If it is not processed, then it will correspond with the exact string
+				in the file. Handling unprocessed newick strings requires that the
+				client code consult the Translation table and implement NEXUS'
+				numeric interpretation of labels in order to decode correctly
+				decode all taxon labels
+		*/
+		const std::string &	GetNewick() const
+			{
+			return newick;
+			}
+		/*! \returns the name of the tree */
+		const std::string &	GetName() const
+			{
+			return name;
+			}
+		/*! \returns true if the newick string has been processed. */
+		bool IsProcessed() const
+			{
+			return (flags&NXS_TREE_PROCESSED) != 0;
+			}
+		/*! \throws a NxsNCLAPIException if the tree has not been "processed" */
+		void AssertProcessed() const
+			{
+			if (!IsProcessed())
+				throw NxsNCLAPIException("Tree description queries are only supported on processed tree descriptions.");
+			}
+		/*! \returns true if the tree was rooted.  */
+		bool IsRooted() const
+			{
+			AssertProcessed();
+			return (flags&NXS_IS_ROOTED_BIT) != 0;
+			}
+		/*! \returns true all of the edges in the tree have edge length.
+			\raises a NxsNCLAPIException if the tree has not been processed!
+		*/
+		bool AllEdgesHaveLengths() const
+			{
+			AssertProcessed();
+			return (flags&NXS_EDGE_LENGTH_UNION) == NXS_HAS_SOME_EDGE_LENGTHS_BIT;
+			}
+		/*! \returns true at least one edge in the tree have edge length
+			\raises a NxsNCLAPIException if the tree has not been processed!
+		*/
+		bool SomeEdgesHaveLengths() const
+			{
+			AssertProcessed();
+			return (flags&NXS_HAS_SOME_EDGE_LENGTHS_BIT) != 0;
+			}
+		/*! \returns true all of the edge lengths that are specified can be read as integers
+			\raises a NxsNCLAPIException if the tree has not been processed!
+		*/
+		bool EdgeLengthsAreAllIntegers() const
+			{
+			AssertProcessed();
+			return (flags&NXS_INT_EDGE_LENGTHS_BIT) != 0;
+			}
+		/*! \returns true if the tree contains all of the taxa listed in the NxsTaxaBlock associated with the trees block that generated this NxsFullTreeDescription
+			\raises a NxsNCLAPIException if the tree has not been processed!
+		*/
+		bool AllTaxaAreIncluded() const
+			{
+			AssertProcessed();
+			return (flags&NXS_HAS_ALL_TAXA_BIT) != 0;
+			}
+		/*! \returns true if some of the edges in the tree have New Hampshire Extended style comments  (see http://www.phylosoft.org/NHX)
+			\raises a NxsNCLAPIException if the tree has not been processed!
+		*/
+		bool HasNHXComments() const
+			{
+			AssertProcessed();
+			return (flags&NXS_HAS_NHX_BIT) != 0;
+			}
+		/*! \returns true if the tree has polytomies
+			\raises a NxsNCLAPIException if the tree has not been processed!
+		*/
+		bool HasPolytomies() const
+			{
+			AssertProcessed();
+			return (flags&NXS_HAS_POLYTOMY_BIT) != 0;
+			}
+		/*! \returns true if the tree some internal nodes that only have one child.
+			\raises a NxsNCLAPIException if the tree has not been processed!
+		*/
+		bool HasDegreeTwoNodes() const
+			{
+			AssertProcessed();
+			return (flags&NXS_HAS_DEG_TWO_NODES_BIT) != 0;
+			}
+		/*! If EdgeLengthsAreAllIntegers returns true then this will return the
+			shortest edge length in the tree (useful as means of checking for
+			constraints by programs that prohibit 0 or negative branch lengths)
+		*/
+		int smallestIntEdgeLength() const
+			{
+			return minIntEdgeLen;
+			}
+		/*!	If EdgeLengthsAreAllIntegers returns false then this will return the
+			shortest edge length in the tree (useful as means of checking for
+			constraints by programs that prohibit 0 or negative branch lengths)
+		*/
+		double smallestRealEdgeLength() const
+			{
+			return minDblEdgeLen;
+			}
+		bool RequiresNewickNameTokenizing() const 
+		    {
+		    return this->requireNewickNameTokenizing;
+		    }
+		void SetRequiresNewickNameTokenizing(bool v) 
+		    {
+		    this->requireNewickNameTokenizing = v;
+		    }
+	private:
+		std::string newick; /*with 1-based numbers corresponding to (1 + Taxa block's index of taxon)*/
+		std::string name;
+		int flags;
+		int minIntEdgeLen; /* if EdgeLengthsAreAllIntegers returns true then this will hold shortest edge length in the tree (useful as means of checking for constraints by programs that prohibit 0 or negative branch lengths)*/
+		double minDblEdgeLen; /* if EdgeLengthsAreAllIntegers returns false then this will hold shortest edge length in the tree (useful as means of checking for constraints by programs that prohibit 0 or negative branch lengths)*/
+		bool requireNewickNameTokenizing;  /* False by default. If true, then newick rather than NEXUS tokenizing rules should be used for the taxa names */
+
+	friend class NxsTreesBlock;
+	};
+class NxsTreesBlock;
+typedef bool (* ProcessedTreeValidationFunction)(NxsFullTreeDescription &, void *, NxsTreesBlock *);
+/*!
+	This class handles reading and storage for the NEXUS block TREES.
+	The class can  read the TRANSLATE and TREE commands.
+
+	The tree is validated during the parse and then stored as a NxsFullTreeDescription
+		object which will hold the newick string. This newick string will have
+		numbers rather than names. The numbers in the tree string start at 1 (like other NEXUS numbering),
+		but they are simply 1 + the taxon index.
+
+	In previous versions of NCL (before v2.1), the client code would have to use the translate
+		table to convert the newick string into the taxon numbers.
+
+	As of v2.1, NCL now does this translation.
+
+*/
+class NxsTreesBlock
+  : public NxsTreesBlockAPI, public NxsTaxaBlockSurrogate
+	{
+ 	public:
+							NxsTreesBlock(NxsTaxaBlockAPI *tb);
+		virtual				~NxsTreesBlock();
+
+		void		ReplaceTaxaBlockPtr(NxsTaxaBlockAPI *tb);
+		unsigned GetIndexSet(const std::string &label, NxsUnsignedSet * toFill) const
+			{
+			return NxsLabelToIndicesMapper::GetIndicesFromSets(label, toFill, treeSets);
+			}
+
+		/*! \returns the index of the default tree (the last tree in the TREES block with a * before its name)
+				if no default tree was specified than the first index (0) will be returned
+		*/
+		unsigned	GetNumDefaultTree();
+		/*! \returns the number of trees stored */
+		unsigned	GetNumTrees();
+		/*! \returns the number of trees stored */
+		unsigned	GetNumTrees() const;
+		/*! \returns the NxsFullTreeDescription for tree with index `i`
+		`i` should be in the range [0, num_trees)
+
+		If the NxsFullTreeDescription is processed (see NxsFullTreeDescription::IsProcessed())
+			then its newick string will have numbers rather than names. The numbers in the tree
+			string start at 1 (like other NEXUS numbering), but they are simply 1 + the taxon index.
+
+		In previous versions of NCL (before v2.1), the client code would have to use the translate
+			table to convert the newick string into the taxon numbers.
+
+
+		*/
+		const NxsFullTreeDescription & GetFullTreeDescription(unsigned i) const;
+		/*! \returns a 1-based number for the last tree read that has the name `name` */
+		unsigned	TreeLabelToNumber(const std::string & name) const;
+		/*! \returns the tree name for the tree with index `i`
+		i should be in the range [0, ntrees)
+		*/
+		NxsString	GetTreeName(unsigned i);
+		/*! \returns the tree description object for the tree with index `i`
+		i should be in the range [0, ntrees)
+		*/
+		NxsString	GetTreeDescription(unsigned i);
+		/*! \returns the newick string for the tree with index i. The string will have
+			the taxon names rather than numbers (or other translate table keys) in it.
+		i should be in the range [0, ntrees)
+		*/
+		NxsString	GetTranslatedTreeDescription(unsigned i);
+		/*! \returns true if the tree with index i is the default tree
+		i should be in the range [0, ntrees)
+		*/
+		bool		IsDefaultTree(unsigned i);
+		/*! \returns true if the tree is thought to be rooted (could be rooted
+			because this is NCL's default, or it could indicate that a [&R]
+			comment was encountered.
+		i should be in the range [0, ntrees)
+		*/
+		bool		IsRootedTree(unsigned i);
+		virtual void		Report(std::ostream &out) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void		BriefReport(NxsString &s) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void		Reset();
+		void				SetNexus(NxsReader *nxsptr)
+			{
+			NxsBlock::SetNexus(nxsptr);
+			NxsTaxaBlockSurrogate::SetNexusReader(nxsptr);
+			}
+		/*! \ref BlockTypeIDDiscussion */
+        virtual const std::string & GetBlockName() const
+            {
+            return NCL_BLOCKTYPE_ATTR_NAME;
+            }
+
+		void WriteAsNexus(std::ostream &out) const;
+
+		virtual VecBlockPtr	GetImpliedBlocks()
+			{
+			return GetCreatedTaxaBlocks();
+			}
+
+		/*only used it the linkAPI is enabled*/
+		virtual void		HandleLinkCommand(NxsToken & token)
+			{
+			HandleLinkTaxaCommand(token);
+			}
+		virtual void		WriteLinkCommand(std::ostream &out) const
+			{
+			WriteLinkTaxaCommand(out);
+			}
+
+		unsigned GetMaxIndex() const;
+		unsigned GetIndicesForLabel(const std::string &label, NxsUnsignedSet *inds) const;
+		bool AddNewIndexSet(const std::string &label, const NxsUnsignedSet & inds);
+		bool AddNewPartition(const std::string &label, const NxsPartition & inds);
+
+		bool GetAllowImplicitNames() const
+			{
+			return allowImplicitNames;
+			}
+		bool GetUseNewickTokenizingDuringParse() const 
+		    {
+		    return useNewickTokenizingDuringParse;
+		    }
+		/*! \returns true if the block uses the v2.1 style of parsing in which the tree is interpretted and converted into
+				a newick string with standard taxon numbering
+			If false, then the NxsTreesBlock uses the v2.0 API in which the tree reader simply stores the tree string
+				as written in the file (so the client code has to check the translate table in order to interpret
+				the newick stream).
+			true by default.
+		*/
+		bool GetProcessAllTreesDuringParse() const
+			{
+			return processAllTreesDuringParse;
+			}
+		void SetAllowImplicitNames(bool s)
+			{
+			allowImplicitNames = s;
+			}
+		void SetUseNewickTokenizingDuringParse(bool v) 
+		    {
+		    useNewickTokenizingDuringParse = v; 
+		    }
+		void SetTreatIntegerLabelsAsNumbers(bool s) 
+		    {
+		    treatIntegerLabelsAsNumbers = s;
+		    }
+		/*! If true then the block will use the v2.1 style of parsing in which the tree is interpretted and converted into
+				a newick string with standard taxon numbering
+			If false, then the NxsTreesBlock will use the v2.0 API in which the tree reader simply stores the tree string
+				as written in the file (so the client code has to check the translate table in order to interpret
+				the newick stream).
+			true by default.
+		*/
+		void SetProcessAllTreesDuringParse(bool s)
+			{
+			processAllTreesDuringParse = s;
+			}
+		/* Interprets the newick string as a tree. This converts the newick string
+			into one in which 1-based numbers are used for taxon labels (raw newick
+			strings can contain numbers, taxon labels, tax set names or translate
+			table keys as taxon identifiers).
+
+			\raises NxsException
+			This function builds trees as in memory. It may  reveal illegal newick strings that were not
+			detected as illegal on the parse, so NxsExceptions may  be raised.
+
+			Explicitly calling this function is not necessary unless
+			processAllTreesDuringParse is false (because of a previous call to
+			SetProcessAllTreesDuringParse()).
+		*/
+		void ProcessTree(NxsFullTreeDescription &treeDesc) const;
+		/* Convenience function that calls ProcessTree() one each stored
+			NxsFullTreeDescription instance.
+
+			\raises NxsException
+			This function builds trees as in memory. It may  reveal illegal newick strings that were not
+			detected as illegal on the parse, so NxsExceptions may  be raised.
+
+			Explicitly calling this function is not necessary unless
+			processAllTreesDuringParse is false (because of a previous call to
+			SetProcessAllTreesDuringParse()).
+		*/
+		void ProcessAllTrees() const
+			{
+			std::vector<NxsFullTreeDescription>::iterator trIt = trees.begin();
+			for (; trIt != trees.end(); ++trIt)
+				ProcessTree(*trIt);
+			}
+
+
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, assumptionsBlock blocks!
+		*/
+		NxsTreesBlock & operator=(const NxsTreesBlock &other)
+			{
+			Reset();
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			CopyTaxaBlockSurrogateContents(other);
+			CopyTreesBlockContents(other);
+			return *this;
+			}
+
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, assumptionsBlock blocks!
+		*/
+		virtual void CopyTreesBlockContents(const NxsTreesBlock &other)
+			{
+			allowImplicitNames = other.allowImplicitNames;
+			useNewickTokenizingDuringParse = other.useNewickTokenizingDuringParse;
+			treatIntegerLabelsAsNumbers = other.treatIntegerLabelsAsNumbers;
+			processAllTreesDuringParse = other.processAllTreesDuringParse;
+			writeFromNodeEdgeDataStructure = other.writeFromNodeEdgeDataStructure;
+			validateInternalNodeLabels = other.validateInternalNodeLabels;
+			allowNumericInterpretationOfTaxLabels = other.allowNumericInterpretationOfTaxLabels;
+			constructingTaxaBlock = other.constructingTaxaBlock;
+			newtaxa = other.newtaxa;
+			trees = other.trees;
+			capNameToInd = other.capNameToInd;
+			defaultTreeInd = other.defaultTreeInd;
+			writeTranslateTable = other.writeTranslateTable;
+			treeSets = other.treeSets;
+			treePartitions = other.treePartitions;
+			processedTreeValidationFunction = other.processedTreeValidationFunction;
+			ptvArg = other.ptvArg;
+			treatAsRootedByDefault = other.treatAsRootedByDefault;
+			}
+        bool GetTreatAsRootedByDefault() const {
+            return treatAsRootedByDefault;
+        }
+        void SetTreatAsRootedByDefault(bool v) {
+            this->treatAsRootedByDefault = v;
+        }
+		virtual NxsTreesBlock * Clone() const
+			{
+			NxsTreesBlock * a = new NxsTreesBlock(taxa);
+			*a = *this;
+			return a;
+			}
+		static void ProcessTokenVecIntoTree(const ProcessedNxsCommand & token, 
+		                                    NxsFullTreeDescription & ftd,
+		                                    NxsLabelToIndicesMapper *,
+		                                    std::map<std::string, unsigned> &capNameToInd,
+		                                    bool allowNewTaxa,
+		                                    NxsReader * nexusReader,
+		                                    const bool respectCase=false,
+		                                    const bool validateInternalNodeLabels=true,
+		                                    const bool treatIntegerLabelsAsNumbers=false,
+		                                    const bool allowNumericInterpretationOfTaxLabels=true);
+		static void ProcessTokenStreamIntoTree(NxsToken & token, NxsFullTreeDescription & ftd,
+		                                      NxsLabelToIndicesMapper *,
+		                                      std::map<std::string, unsigned> &capNameToInd,
+		                                      bool allowNewTaxa,
+		                                      NxsReader * nexusReader,
+		                                      const bool respectCase=false,
+		                                      const bool validateInternalNodeLabels=true,
+		                                      const bool treatIntegerLabelsAsNumbers=false,
+		                                      const bool allowNumericInterpretationOfTaxLabels=true);
+
+		void SetWriteFromNodeEdgeDataStructure(bool v)
+			{
+			writeFromNodeEdgeDataStructure = v;
+			}
+		/* 	Processes all trees and then
+			Provides lowlevel access to the "raw" vector of trees stored in the trees block
+		*/
+		std::vector<NxsFullTreeDescription> & GetProcessedTrees()
+			{
+			ProcessAllTrees();
+			return trees;
+			}
+
+		/*! This function allows you to register a callback function that is called after each tree is parsed.
+
+			The signature of your function should be:\n
+				\code
+				bool someFunctionName(NxsFullTreeDescription &treeDesc, void * blob, NxsTreesBlock * treesB);
+				\endcode
+			where:
+				- treeDesc is the NxsFullTreeDescription for the tree that was just read.
+				- blob is pointer to any object or 0L. You supply this blob of data as an argument in
+					setValidationCallbacks and the NxsTreesBlock passes it every time that it calls the callback.
+					By passing in your own object, you can do bookkeeping between calls without using global variables
+					(though you will have to cast the pointer to the blob of data, of course).
+				- treesB is a pointer to the block that is conducting the parse.
+
+			If your function returns false, then the trees block will not store.
+			If your callback function returns true, then the tree will be stored.
+			In either case the NxsTreesBlock will continue parsing after your function returns.
+
+			This Callback hook is convenient for rejecting unwanted trees to save on memory, but it can also
+			be used as an optimization.
+
+			See the example executable in example/splitsinfile.  This NCL client, uses this callback to store
+			the splits from a trees as the TREES block is being parsed.  It returns false in each case, so that
+			the trees are not stored after they are used.
+		*/
+
+		void setValidationCallbacks(
+			ProcessedTreeValidationFunction func, /*!< your pointer to your callback function */
+			void * blob) /*!< pointer to any object that you would like to access during parse */
+			{
+			this->processedTreeValidationFunction = func;
+			this->ptvArg = blob;
+			}
+		bool 		SwapEquivalentTaxaBlock(NxsTaxaBlockAPI * tb)
+		{
+			return SurrogateSwapEquivalentTaxaBlock(tb);
+		}
+		void ReadPhylipTreeFile(NxsToken & token);
+		void setWriteTranslateTable(bool wtt)
+		{
+			this->writeTranslateTable = wtt;
+		}
+		void setAllowNumericInterpretationOfTaxLabels(bool x) {
+			this->allowNumericInterpretationOfTaxLabels = x; 
+		}
+		/*! Sets the boolean field that determines whether or not the trees
+			block will validate treat internal node labels
+			as taxon labels during the parse. In this case the labels will
+			checked against the taxa block (true is the default).
+
+			This can cause problems if the internal node names are integers that
+			are not intended to be taxon labels (eg. support statements for the
+			subtending branches).
+		*/
+		void setValidateInternalNodeLabels(bool x) {
+			this->validateInternalNodeLabels = x; /** if true then labels that occur for internal nodes will be validated via the taxa block (true is the default).  This can cause problems if the internal node names are integer that are not intended to be taxon labels. */
+		}
+		/*! \returns true if the block will validate treat internal node labels
+			as taxon labels during the parse. In this case the labels will
+			checked against the taxa block (true is the default).
+
+			This can cause problems if the internal node names are integers that
+			are not intended to be taxon labels (eg. support statements for the
+			subtending branches).
+		*/
+		bool getValidateInternalNodeLabels() const {
+			return this->validateInternalNodeLabels;
+		}
+		void WriteTranslateCommand(std::ostream & out) const;
+	protected :
+		void ReadTreeFromOpenParensToken(NxsFullTreeDescription &td, NxsToken & token);
+
+		void WriteTreesCommand(std::ostream & out) const;
+		void ConstructDefaultTranslateTable(NxsToken &token, const char * cmd);
+
+		bool allowImplicitNames; /** false by default, true causes the trees block to create a taxa block from the labels found in the trees. */
+		bool useNewickTokenizingDuringParse; /** false by default */
+		bool treatIntegerLabelsAsNumbers; // if true and allowImplicitNames is true, then new taxon labels that are integers will be treated as the taxon number (rather than arbitrary labels)
+		bool processAllTreesDuringParse; /** true by default, false speeds processing but disables detection of errors*/
+		bool constructingTaxaBlock; /** true if new names are being tolerated */
+		bool writeFromNodeEdgeDataStructure; /**this will probably only ever be set to true in testing code. If true the WriteTrees function will convert each tree to NxsSimpleTree object to write the newick*/
+		bool validateInternalNodeLabels; /** if true then labels that occur for internal nodes will be validated via the taxa block (true is the default).  This can cause problems if the internal node names are integer that are not intended to be taxon labels. */
+		bool allowNumericInterpretationOfTaxLabels;
+
+		mutable std::vector<NxsFullTreeDescription> trees;
+		mutable std::map<std::string, unsigned> capNameToInd;
+		unsigned			defaultTreeInd;		/* 0-offset index of default tree specified by user, or 0 if user failed to specify a default tree using an asterisk in the NEXUS data file */
+		NxsUnsignedSetMap 	treeSets;
+		NxsPartitionsByName treePartitions;
+
+		bool writeTranslateTable ; // only affects writing to NEXUS. Default is true
+
+		ProcessedTreeValidationFunction processedTreeValidationFunction;
+		void * ptvArg;
+        bool treatAsRootedByDefault; /* true by default */
+		virtual	void		Read(NxsToken &token);
+		void				HandleTranslateCommand(NxsToken &token);
+		void				HandleTreeCommand(NxsToken &token, bool rooted);
+
+		friend class PublicNexusReader;
+	};
+
+typedef NxsTreesBlock TreesBlock;
+class NxsTreesBlockFactory
+	:public NxsBlockFactory
+	{
+	public:
+		virtual NxsTreesBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
+	};
+
+#endif
diff --git a/ncl/nxsunalignedblock.cpp b/ncl/nxsunalignedblock.cpp
new file mode 100644
index 0000000..7d8be95
--- /dev/null
+++ b/ncl/nxsunalignedblock.cpp
@@ -0,0 +1,917 @@
+//	Copyright (C) 2007 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#include <climits>
+#include "ncl/nxsunalignedblock.h"
+#include "ncl/nxsreader.h"
+using namespace std;
+
+//@POL Note: This file is not yet ready for use (Paul Lewis, 19-May-2007)
+
+/*!
+	Initializes `NCL_BLOCKTYPE_ATTR_NAME' to "UNALIGNED", `taxa' to `tb', `assumptionsBlock' to `ab', `ntax' and `ntaxTotal' to 0, `newtaxa'
+	and `respectingCase' to false, `labels' to true, `datatype' to `NxsUnalignedBlock::standard', `missing' to '?', and
+	`taxonPos' and `activeTaxon' to NULL. The `equates' map and `uMatrix' vector are both cleared. The ResetSymbols
+	function is called to reset the `symbols' data member.
+*/
+NxsUnalignedBlock::NxsUnalignedBlock(
+  NxsTaxaBlockAPI * tb)			/* is the taxa block object to consult for taxon labels */
+  : NxsBlock(),
+  NxsTaxaBlockSurrogate(tb, NULL)
+	{
+	NCL_BLOCKTYPE_ATTR_NAME = "UNALIGNED";
+	Reset();
+	}
+
+/*!
+	Deletes any memory allocated to the arrays `symbols', `taxonPos' and `activeTaxon'. Flushes the containers
+	`equates', and `uMatrix'.
+*/
+NxsUnalignedBlock::~NxsUnalignedBlock()
+	{
+	Reset();
+	}
+
+/*!
+	Returns NxsUnalignedBlock object to the state it was in when first created. See NxsUnalignedBlock constructor for
+	details.
+*/
+void NxsUnalignedBlock::Reset()
+	{
+	NxsBlock::Reset();
+	ResetSurrogate();
+	nTaxWithData = 0;
+	newtaxa = false;
+	respectingCase = false;
+	labels = true;
+	originalDatatype = datatype = NxsCharactersBlock::standard;
+	missing = '?';
+	gap = '\0';
+	ResetSymbols();	// also resets equates
+	nChar = 0;
+	uMatrix.clear();
+	}
+
+bool NxsUnalignedBlock::TaxonIndHasData(
+  unsigned taxInd) const /* the character in question, in the range [0..`nchar') */
+	{
+	return (taxInd < uMatrix.size() && !uMatrix[taxInd].empty());
+	}
+
+std::string NxsUnalignedBlock::GetMatrixRowAsStr(const unsigned rowIndex) const /* output stream on which to print matrix */
+	{
+	if (!this->TaxonIndHasData(rowIndex))
+		return std::string();
+	std::ostringstream o;
+	WriteStatesForMatrixRow(o, rowIndex);
+	return o.str();
+	}
+
+
+void NxsUnalignedBlock::ResetDatatypeMapper()
+	{
+	mapper = NxsDiscreteDatatypeMapper(datatype, symbols, missing, gap, matchchar, respectingCase, equates);
+	datatype = mapper.GetDatatype();
+	}
+/*!
+	Resets standard symbol set after a change in `datatype' is made. Also flushes equates list and installs standard
+	equate macros for the current `datatype'.
+*/
+void NxsUnalignedBlock::ResetSymbols()
+	{
+	switch(datatype)
+		{
+		case NxsCharactersBlock::nucleotide:
+		case NxsCharactersBlock::dna:
+			symbols =  "ACGT";
+			break;
+
+		case NxsCharactersBlock::rna:
+			symbols = "ACGU";
+			break;
+
+		case NxsCharactersBlock::protein:
+			symbols =  "ACDEFGHIKLMNPQRSTVWY*";
+			break;
+
+		default:
+			symbols = "01";
+		}
+
+	equates.clear();
+	this->equates = NxsCharactersBlock::GetDefaultEquates(datatype);
+	ResetDatatypeMapper();
+	}
+/*!
+	Provides a dump of the contents of the `uMatrix' variable. Useful for testing whether data is being read as
+	expected. If `marginText' is NULL, output is flush left. If each line of output should be prefaced with
+	a tab character, specify "\t" for `marginText'.
+*/
+void NxsUnalignedBlock::DebugShowMatrix(
+  std::ostream & out,		/* is the output stream on which to print */
+  const char * marginText) NCL_COULD_BE_CONST /* is text printed first on each line */ /*v2.1to2.2 1 */
+	{
+	if (!taxa)
+		return;
+	unsigned width = taxa->GetMaxTaxonLabelLength();
+	const unsigned ntt = GetNTaxTotal();
+	NCL_ASSERT(uMatrix.size() >= ntt);
+	for (unsigned i = 0; i < ntt; i++)
+		{
+		const NxsDiscreteStateRow * row = GetDiscreteMatrixRow(i);
+		if (row && !(row->empty()))
+			{
+			if (marginText != NULL)
+				out << marginText;
+			const NxsString currTaxonLabel = taxa->GetTaxonLabel(i); /*v2.1to2.2 4 */
+			out << currTaxonLabel;
+			unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+			unsigned diff = width - currTaxonLabelLen;
+			std::string spacer(diff+5, ' ');
+			out << spacer;
+			mapper.WriteStateCodeRowAsNexus(out, *row);
+			}
+		}
+	}
+
+/*!
+	Returns a string containing a formatted representation of the state `x'.
+*/
+std::string NxsUnalignedBlock::FormatState(
+  NxsDiscreteDatum d)		/* is the element of `uMatrix' to format */
+  const
+	{
+	if (d.taxInd >= GetNTaxTotal())
+		throw NxsNCLAPIException("Taxon out of range in NxsUnalignedBlock::FormatState");
+	const NxsDiscreteStateRow & row = uMatrix[d.taxInd];
+	if (d.charInd >= row.size())
+		return std::string(1, missing);
+	return mapper.StateCodeToNexusString(row[d.charInd]);
+	}
+
+/*!
+	Returns true if `ch' can be found in the `symbols' array. The value of `respectingCase' is used to determine
+	whether or not the search should be case sensitive. Assumes `symbols' is non-NULL.
+*/
+bool NxsUnalignedBlock::IsInSymbols(
+  char ch)	/* the symbol character to search for */
+	{
+	char char_in_question = (respectingCase ? ch : (char)toupper(ch));
+	for (std::string::const_iterator sIt = symbols.begin(); sIt != symbols.end(); ++sIt)
+		{
+		const char char_in_symbols = (respectingCase ? *sIt : (char)toupper(*sIt));
+		if (char_in_symbols == char_in_question)
+			return true;
+		}
+	return false;
+	}
+
+/*!
+	Called when DIMENSIONS command needs to be parsed from within the UNALIGNED block. Deals with everything after the
+	token DIMENSIONS up to and including the semicolon that terminates the DIMENSIONS command.
+*/
+void NxsUnalignedBlock::HandleDimensions(
+  NxsToken & token)			/* the token used to read from `in' */
+	{
+	unsigned ntaxRead = 0;
+	for (;;)
+		{
+		token.GetNextToken();
+		if (token.Equals("NEWTAXA"))
+			newtaxa = true;
+		else if (token.Equals("NTAX"))
+			{
+			DemandEquals(token, "after NTAX in DIMENSIONS command");
+			ntaxRead = DemandPositiveInt(token, "NTAX");
+			}
+		else if (token.Equals(";"))
+			break;
+		}
+	if (newtaxa)
+		{
+		if (ntaxRead == 0)
+			{
+			errormsg = "DIMENSIONS command must have an NTAX subcommand when the NEWTAXA option is in effect.";
+			throw NxsException(errormsg, token);
+			}
+		AssureTaxaBlock(createImpliedBlock, token, "Dimensions");
+		if (!createImpliedBlock)
+			{
+			taxa->Reset();
+			if (nexusReader)
+				nexusReader->RemoveBlockFromUsedBlockList(taxa);
+			}
+		taxa->SetNtax(ntaxRead);
+		nTaxWithData = ntaxRead;
+		}
+	else
+		{
+		AssureTaxaBlock(false, token, "Dimensions");
+		const unsigned ntaxinblock = taxa->GetNTax();
+		if (ntaxinblock == 0)
+			{
+			errormsg = "A TAXA block must be read before character data, or the DIMENSIONS command must use the NEWTAXA.";
+			throw NxsException(errormsg, token);
+			}
+		if (ntaxinblock < ntaxRead)
+			{
+			errormsg = "NTAX in UNALIGNED block must be less than or equal to NTAX in TAXA block\nNote: one circumstance that can cause this error is \nforgetting to specify NTAX in DIMENSIONS command when \na TAXA block has not been provided";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		nTaxWithData = (ntaxRead == 0 ? ntaxinblock : ntaxRead);
+		}
+	}
+
+/*!
+	Called when the END or ENDBLOCK command needs to be parsed from within the UNALIGNED block. Does two things:
+~
+	o checks to make sure the next token in the data file is a semicolon
+	o eliminates character labels and character state labels for characters that have been eliminated
+~
+*/
+void NxsUnalignedBlock::HandleEndblock(
+  NxsToken & token)		/* the token used to read from `in' */
+	{
+	DemandEndSemicolon(token, "END or ENDBLOCK");
+	}
+
+/*!
+	Called when FORMAT command needs to be parsed from within the DIMENSIONS block. Deals with everything after the
+	token FORMAT up to and including the semicolon that terminates the FORMAT command.
+*/
+void NxsUnalignedBlock::HandleFormat(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	bool standardDataTypeAssumed = false;
+	bool ignoreCaseAssumed = false;
+
+	for (;;)
+		{
+		token.GetNextToken();
+
+		if (token.Equals("DATATYPE"))
+			{
+			DemandEquals(token, "after keyword DATATYPE");
+			// This should be one of the following: STANDARD, DNA, RNA, NUCLEOTIDE or PROTEIN
+			token.GetNextToken();
+
+			if (token.Equals("STANDARD"))
+				datatype = NxsCharactersBlock::standard;
+			else if (token.Equals("DNA"))
+				datatype = NxsCharactersBlock::dna;
+			else if (token.Equals("RNA"))
+				datatype = NxsCharactersBlock::rna;
+			else if (token.Equals("NUCLEOTIDE"))
+				datatype = NxsCharactersBlock::nucleotide;
+			else if (token.Equals("PROTEIN"))
+				datatype = NxsCharactersBlock::protein;
+			else
+				{
+				errormsg = token.GetToken();
+				errormsg += " is not a valid DATATYPE within a ";
+				errormsg += NCL_BLOCKTYPE_ATTR_NAME;
+				errormsg += " block";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			if (standardDataTypeAssumed && datatype != NxsCharactersBlock::standard)
+				{
+				errormsg = "DATATYPE must be specified first in FORMAT command";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			originalDatatype = datatype;
+			ResetSymbols();
+			}
+		else if (token.Equals("RESPECTCASE"))
+			{
+			if (ignoreCaseAssumed)
+				{
+				errormsg = "RESPECTCASE must be specified before MISSING and SYMBOLS in FORMAT command";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			standardDataTypeAssumed = true;
+			respectingCase = true;
+			}
+		else if (token.Equals("MISSING"))
+			{
+			DemandEquals(token, "after keyword MISSING");
+			// This should be the missing data symbol (single character)
+			token.GetNextToken();
+
+			if (token.GetTokenLength() != 1)
+				{
+				errormsg = "MISSING symbol should be a single character, but ";
+				errormsg += token.GetToken();
+				errormsg += " was specified";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			else if (token.IsPunctuationToken() && !token.IsPlusMinusToken())
+				{
+				errormsg = "MISSING symbol specified cannot be a punctuation token (";
+				errormsg += token.GetToken();
+				errormsg += " was specified)";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+			else if (token.IsWhitespaceToken())
+				{
+				errormsg = "MISSING symbol specified cannot be a whitespace character (";
+				errormsg += token.GetToken();
+				errormsg += " was specified)";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+
+			missing = token.GetToken()[0];
+
+			ignoreCaseAssumed = true;
+			standardDataTypeAssumed = true;
+			}
+		else if (token.Equals("SYMBOLS") || token.Equals("SYMBOL"))
+			{
+			NxsDiscreteStateCell numDefStates;
+			unsigned maxNewStates;
+			switch(datatype)
+				{
+				case NxsCharactersBlock::dna:
+				case NxsCharactersBlock::rna:
+				case NxsCharactersBlock::nucleotide:
+					numDefStates = 4;
+					maxNewStates = NCL_MAX_STATES-4;
+					break;
+				case NxsCharactersBlock::protein:
+					numDefStates = 21;
+					maxNewStates = NCL_MAX_STATES-21;
+					break;
+				default:
+					numDefStates = 0; // replace symbols list for standard datatype
+					symbols[0] = '\0';
+					maxNewStates = NCL_MAX_STATES;
+				}
+			DemandEquals(token, "after keyword SYMBOLS");
+
+			// This should be the symbols list
+			token.SetLabileFlagBit(NxsToken::doubleQuotedToken);
+			token.GetNextToken();
+
+			token.StripWhitespace();
+			unsigned numNewSymbols = token.GetTokenLength();
+
+			if (numNewSymbols > maxNewStates)
+				{
+				errormsg = "SYMBOLS defines ";
+				errormsg += numNewSymbols;
+				errormsg += " new states but only ";
+				errormsg += maxNewStates;
+				errormsg += " new states allowed for this DATATYPE";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+
+			NxsString to = token.GetToken();
+			unsigned tlen = (unsigned)to.size();
+			NxsString processedS;
+			// Check to make sure user has not used any symbols already in the
+			// default symbols list for this data type
+			for (unsigned i = 0; i < tlen; i++)
+				{
+				if (IsInSymbols(to[i]))
+					{
+					errormsg = "The character ";
+					errormsg << to[i] << " defined in SYMBOLS is predefined for this DATATYPE and shoud not occur in a SYMBOLS subcommand of a FORMAT command.";
+					if (nexusReader)
+						{
+						nexusReader->NexusWarnToken(errormsg, NxsReader::SKIPPING_CONTENT_WARNING, token);
+						errormsg.clear();
+						}
+					}
+				else
+					processedS += to[i];
+				}
+
+			// If we've made it this far, go ahead and add the user-defined
+			// symbols to the end of the list of predefined symbols
+			symbols.append(processedS);
+
+			ignoreCaseAssumed = true;
+			standardDataTypeAssumed = true;
+			}
+
+		else if (token.Equals("EQUATE"))
+			{
+			DemandEquals(token, "after keyword EQUATE");
+
+			// This should be a double-quote character
+			token.GetNextToken();
+
+			if (!token.Equals("\""))
+				{
+				errormsg = "Expecting '\"' after keyword EQUATE but found ";
+				errormsg += token.GetToken();
+				errormsg += " instead";
+				throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+				}
+
+			// Loop until second double-quote character is encountered
+			for (;;)
+				{
+				token.GetNextToken();
+				if (token.Equals("\""))
+					break;
+
+				// If token is not a double-quote character, then it must be the equate symbol (i.e., the
+				// character to be replaced in the data matrix)
+				if (token.GetTokenLength() != 1)
+					{
+					errormsg = "Expecting single-character EQUATE symbol but found ";
+					errormsg += token.GetToken();
+					errormsg += " instead";
+					throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+					}
+
+				// Check for bad choice of equate symbol
+				NxsString t = token.GetToken();
+				const char ch = t[0];
+				bool badEquateSymbol = false;
+
+				// The character '^' cannot be an equate symbol
+				if (ch == '^')
+					badEquateSymbol = true;
+
+				// Equate symbols cannot be punctuation (except for + and -)
+				if (token.IsPunctuationToken() && !token.IsPlusMinusToken())
+					badEquateSymbol = true;
+
+				// Equate symbols cannot be same as matchchar, missing, or gap
+				if (ch == missing || ch == gap)
+					badEquateSymbol = true;
+
+				// Equate symbols cannot be one of the state symbols currently defined
+				if (IsInSymbols(ch))
+					badEquateSymbol = true;
+
+				if (badEquateSymbol)
+					{
+					errormsg = "EQUATE symbol specified (";
+					errormsg += token.GetToken();
+					errormsg += ") is not valid; must not be same as missing, \nmatchchar, gap, state symbols, or any of the following: ()[]{}/\\,;:=*'\"`<>^";
+					throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+					}
+
+				NxsString k = token.GetToken();
+
+				DemandEquals(token, "in EQUATE definition");
+
+				// This should be the token to be substituted in for the equate symbol
+				token.SetLabileFlagBit(NxsToken::parentheticalToken);
+				token.SetLabileFlagBit(NxsToken::curlyBracketedToken);
+				token.GetNextToken();
+				NxsString v = token.GetToken();
+
+				// Add the new equate association to the equates list
+				equates[ch] = v;
+				}
+
+			standardDataTypeAssumed = true;
+			}
+		else if (token.Equals("LABELS"))
+			{
+			labels = true;
+			standardDataTypeAssumed = true;
+			}
+		else if (token.Equals("NOLABELS"))
+			{
+			labels = false;
+			standardDataTypeAssumed = true;
+			}
+		else if (token.Equals(";"))
+			{
+			break;
+			}
+		}
+	ResetDatatypeMapper();
+	}
+
+/*!
+	Called from HandleMatrix function to read in the next state. Returns true if next token encountered is a comma,
+	false otherwise. A comma signals the end of data for the current taxon in an UNALIGNED block.
+*/
+bool NxsUnalignedBlock::HandleNextState(
+  NxsToken & token,			/* is the token used to read from `in' */
+  unsigned taxNum,				/* is the row in range [0..ntax) (used for error reporting only) */
+  unsigned charNum,				/* is the column (used for error reporting only) */
+  NxsDiscreteStateRow & row, const NxsString &nameStr)	/* is the container for storing new state */
+	{
+	token.SetLabileFlagBit(NxsToken::parentheticalToken);
+	token.SetLabileFlagBit(NxsToken::curlyBracketedToken);
+	token.SetLabileFlagBit(NxsToken::singleCharacterToken);
+
+	token.GetNextToken();
+
+	if (token.Equals(",") || token.Equals(";"))
+		return false;
+	const NxsString stateAsNexus = token.GetToken();
+	const NxsDiscreteStateCell stateCode = mapper.EncodeNexusStateString(stateAsNexus, token, taxNum, charNum, NULL, nameStr);
+	if (charNum < row.size())
+		row[charNum] = stateCode;
+	else
+		{
+		while (charNum < row.size())
+			row.push_back(NXS_INVALID_STATE_CODE);
+		row.push_back(stateCode);
+		}
+	return true;
+	}
+
+/*!
+	Called when MATRIX command needs to be parsed from within the UNALIGNED block. Deals with everything after the
+	token MATRIX up to and including the semicolon that terminates the MATRIX command.
+*/
+void NxsUnalignedBlock::HandleMatrix(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	if (taxa == NULL)
+		{
+		AssureTaxaBlock(false, token, "Matrix");
+		unsigned ntax = taxa->GetNTax();
+		if (ntax == 0)
+			{
+			errormsg = "Must precede ";
+			errormsg += NCL_BLOCKTYPE_ATTR_NAME;
+			errormsg += " block with a TAXA block or specify NEWTAXA and NTAX in the DIMENSIONS command";
+			throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+			}
+		}
+	const unsigned ntax = taxa->GetNTax();
+	uMatrix.clear();
+	uMatrix.resize(ntax);
+	unsigned indOfTaxInMemory = 0;
+	std::vector<unsigned> toInMem(nTaxWithData, UINT_MAX);
+	const unsigned ntlabels = taxa->GetNumTaxonLabels();
+	errormsg.clear();
+	bool taxaBlockNeedsLabels = (ntlabels == 0);
+	if (!taxaBlockNeedsLabels && ntlabels < nTaxWithData)
+		{
+		errormsg << "Not enough taxlabels are known to read characters for " << nTaxWithData << " taxa in the Matrix command.";
+		throw NxsException(errormsg, token);
+		}
+	for (unsigned indOfTaxInCommand = 0; indOfTaxInCommand < nTaxWithData; indOfTaxInCommand++)
+		{
+		NxsString nameStr;
+		if (labels)
+			{
+			token.GetNextToken();
+			nameStr = token.GetToken();
+			if (taxaBlockNeedsLabels)
+				{
+				if (taxa->IsAlreadyDefined(nameStr))
+					{
+					errormsg << "Data for this taxon (" << nameStr << ") has already been saved";
+					throw NxsException(errormsg, token);
+					}
+				try {
+					indOfTaxInMemory = taxa->AddTaxonLabel(nameStr);
+					}
+				catch (NxsException &x)
+					{
+					if (nameStr == ";")
+						{
+						errormsg << "Unexpected ; after only " << indOfTaxInCommand << " taxa were read (expecting characters for " << nTaxWithData << " taxa).";
+						throw NxsException(errormsg, token);
+						}
+					x.addPositionInfo(token);
+					throw x;
+					}
+				}
+			else
+				{
+				unsigned numOfTaxInMemory = taxa->TaxLabelToNumber(nameStr);
+				if (numOfTaxInMemory == 0)
+					{
+					if (token.Equals(";"))
+						errormsg << "Unexpected ;";
+					else
+						errormsg << "Could not find taxon named " << nameStr << " among stored taxon labels";
+					throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+					}
+				indOfTaxInMemory = numOfTaxInMemory - 1;
+				}
+			}
+		else
+			{
+			indOfTaxInMemory = indOfTaxInCommand;
+			nameStr << 1+indOfTaxInMemory;
+			}
+		if (toInMem[indOfTaxInCommand] != UINT_MAX)
+			{
+			errormsg << "Characters for taxon " << indOfTaxInCommand << " (" << taxa->GetTaxonLabel(indOfTaxInMemory) << ") have already been stored";
+			throw NxsException(errormsg, token);
+			}
+		toInMem[indOfTaxInCommand] = indOfTaxInMemory;
+		NxsDiscreteStateRow * new_row = &uMatrix[indOfTaxInMemory];
+		unsigned charInd = 0;
+		while (HandleNextState(token, indOfTaxInMemory, charInd, *new_row, nameStr))
+			charInd++;
+		}
+	}
+
+
+/*!
+	This function provides the ability to read everything following the block name (which is read by the NxsReader
+	object) to the END or ENDBLOCK statement. Characters are read from the input stream `in'. Overrides the abstract
+	virtual function in the base class.
+*/
+void NxsUnalignedBlock::Read(
+  NxsToken & token)	/* is the token used to read from `in' */
+	{
+	isEmpty = false;
+	isUserSupplied = true;
+
+	// This should be the semicolon after the block name
+	token.GetNextToken();
+	if (!token.Equals(";"))
+		{
+		errormsg = "Expecting ';' after ";
+		errormsg += NCL_BLOCKTYPE_ATTR_NAME;
+		errormsg += " block name, but found ";
+		errormsg += token.GetToken();
+		errormsg += " instead";
+		throw NxsException(errormsg, token.GetFilePosition(), token.GetFileLine(), token.GetFileColumn());
+		}
+	nTaxWithData = 0;
+
+	for (;;)
+		{
+		token.GetNextToken();
+		NxsBlock::NxsCommandResult res = HandleBasicBlockCommands(token);
+		if (res == NxsBlock::NxsCommandResult(STOP_PARSING_BLOCK))
+			return;
+		if (res != NxsBlock::NxsCommandResult(HANDLED_COMMAND))
+			{
+			if (token.Equals("DIMENSIONS"))
+				HandleDimensions(token);
+			else if (token.Equals("FORMAT"))
+				HandleFormat(token);
+			else if (token.Equals("TAXLABELS"))
+				HandleTaxLabels(token);
+			else if (token.Equals("MATRIX"))
+				HandleMatrix(token);
+			else
+				SkipCommand(token);
+			}
+		}	// for (;;)
+	}
+
+/*!
+	This function outputs a brief report of the contents of this UNALIGNED block. Overrides the abstract virtual
+	function in the base class.
+*/
+void NxsUnalignedBlock::Report(
+  std::ostream & out) NCL_COULD_BE_CONST /* is the output stream to which to write the report */ /*v2.1to2.2 1 */
+	{
+	out << '\n' << NCL_BLOCKTYPE_ATTR_NAME << " block contains ";
+	if (nTaxWithData == 0)
+		out << "no taxa";
+	else if (nTaxWithData == 1)
+		out << "one taxon";
+	else
+		out << nTaxWithData << " taxa";
+
+	out << "\n  Data type is \"" << this->GetDatatypeName() << "\"" << endl;
+
+	if (respectingCase)
+		out << "  Respecting case" << endl;
+	else
+		out << "  Ignoring case" << endl;
+
+	if (labels)
+		out << "  Taxon labels were provided on left side of matrix" << endl;
+	else
+		out << "  No taxon labels were provided on left side of matrix" << endl;
+
+	out << "  Missing data symbol is '" << missing << '\'' << endl;
+	out << "  Valid symbols are: " << symbols << endl;
+
+	int numEquateMacros = (int)equates.size();
+	if (numEquateMacros > 0)
+		{
+		out << "  Equate macros in effect:" << endl;
+		std::map<char, NxsString>::const_iterator i = equates.begin();
+		for (; i != equates.end(); ++i)
+			{
+			out << "    " << (*i).first << " = " << (*i).second << endl;
+			}
+		}
+	else
+		out << "  No equate macros have been defined" << endl;
+
+	out << "  Data matrix:" << endl;
+	DebugShowMatrix(out, "    ");
+	}
+
+/*!
+	Writes out the information in this block in NEXUS format to the specified std::ostream.
+*/
+void NxsUnalignedBlock::WriteAsNexus(
+  std::ostream & out)	/* is the output stream on which to write */
+  const
+	{
+	out << "BEGIN UNALIGNED;\n";
+	WriteBasicBlockCommands(out);
+	if (this->taxa && taxa->GetNumTaxonLabels() > this->nTaxWithData)
+		out << "    DIMENSIONS NTax=" << this->nTaxWithData << ";\n";
+
+	this->WriteFormatCommand(out);
+	this->WriteMatrixCommand(out);
+	WriteSkippedCommands(out);
+	out << "END;\n";
+	}
+
+/*!
+	Writes out the information in the MATRIX command in NEXUS format to the specified std::ostream.
+*/
+void NxsUnalignedBlock::WriteMatrixCommand(
+  std::ostream & out)	/* is the output stream on which to print the matrix */
+  const
+	{
+	NCL_ASSERT(taxa);
+	const unsigned ntax = taxa->GetNTax();
+	unsigned width = taxa->GetMaxTaxonLabelLength();
+	out << "Matrix";
+
+	//std::vector<unsigned> origIndexVec = this->GetOrigMatrixIndicesToWrite();
+	bool first = true;
+	for (unsigned i = 0; i < ntax; ++i)
+		{
+		if (!uMatrix[i].empty())
+			{
+			if (first)
+				out << "\n";
+			else
+				out << ",\n";
+			first = false;
+			NxsString nm = taxa->GetTaxonLabel(i); /*v2.1to2.2 4 */
+			std::string s = nm.c_str();
+			const std::string currTaxonLabel = NxsString::GetEscaped(taxa->GetTaxonLabel(i));
+			out << currTaxonLabel;
+
+			// Print out enough spaces to even up the left edge of the matrix output
+			unsigned currTaxonLabelLen = (unsigned)currTaxonLabel.size();
+			unsigned diff = width - currTaxonLabelLen;
+			for (unsigned k = 0; k < diff + 5; k++)
+				out << ' ';
+
+			WriteStatesForMatrixRow(out, i);
+			}
+		}
+	out << "\n;\n";
+	}
+
+void NxsUnalignedBlock::WriteStatesForMatrixRow(
+  std::ostream &out,				/* the output stream on which to write */
+  unsigned currTaxonIndex) const	/* the taxon, in range [0..`ntax') */
+	{
+	const NxsDiscreteStateRow & row = uMatrix[currTaxonIndex];
+	for (NxsDiscreteStateRow::const_iterator rIt = row.begin(); rIt != row.end(); ++rIt)
+		mapper.WriteStateCodeAsNexusString(out, *rIt);
+	}
+
+
+/*!
+	Writes out the information in the FORMAT command in NEXUS format to the specified std::ostream.
+*/
+void NxsUnalignedBlock::WriteFormatCommand(std::ostream &out) const
+	{
+	mapper.WriteStartOfFormatCommand(out);
+	if (this->respectingCase)
+		out << " RespectCase";
+	// Output terminating semicolon
+	out << ";\n";
+	}
+
+NxsUnalignedBlock *NxsUnalignedBlockFactory::GetBlockReaderForID(const std::string & idneeded, NxsReader *reader, NxsToken *)
+	{
+	if (reader == NULL || idneeded != "UNALIGNED")
+		return NULL;
+	NxsUnalignedBlock * nb  = new NxsUnalignedBlock(NULL);
+	nb->SetCreateImpliedBlock(true);
+	nb->SetImplementsLinkAPI(true);
+	return nb;
+	}
+
+/*!
+	Returns internal representation of the state for taxon `i', character `j', as a vector of integer values. In the
+	normal situation, there is only one state with no uncertainty or polymorphism and the vector returned will contain
+	only a single, positive integer value. If there are multiple states, the vector will contain k values, where k
+	equals the number of states plus 1. The first value in the vector will be either 0 (indicating ambiguity) or 1
+	(meaning polymorphism), and the remaining values will be positive integers each of which is an index into the
+	symbols array. In the case of missing data, an empty vector will be returned. In an UNALIGNED block, there are a
+	different number of characters for each taxon. Use NumCharsForTaxon before calling this function to make sure you
+	do not ask for a character beyond the end. If that happens, a NxsUnalignedBlock::NxsX_NoSuchCharacter exception
+	will be thrown. If no data is stored for taxon `i' in this UNALIGNED block, a NxsUnalignedBlock::NxsX_NoDataForTaxon
+	exception will be thrown, with the exception object storing the offending taxon index in its public data member
+	`taxon_index'.
+*/
+NxsDiscreteStateRow NxsUnalignedBlock::GetInternalRepresentation(
+  unsigned taxInd,	/* is the index of the taxon in the TAXA block in range [0..`ntaxTotal') */
+  unsigned charInd)	/* is the character index (greater than or equal to 0) */
+	{
+	if (taxInd >= uMatrix.size())
+		throw NxsUnalignedBlock::NxsX_NoDataForTaxon(taxInd);
+	NxsDiscreteStateRow & row = uMatrix[taxInd];
+	if (charInd >= (unsigned)row.size())
+		return NxsDiscreteStateRow();
+	return mapper.GetStateVectorForCode(row[charInd]);
+	}
+
+/*!
+	Returns number of characters stored for taxon whose index in the TAXA block is `i'. In an UNALIGNED block,
+	each taxon can have a different number of characters, and this function can be used to find out how many characters
+	are stored for any particular taxon. Note that `i' should be the index of the taxon of interest as it appears in
+	the TAXA block. Because there may be fewer taxa in this UNALIGNED block (`ntax') than there are in the TAXA block
+	(`ntaxTotal'), it is possible that no data were stored for the taxon having index `i', in which case a
+	NxsUnalignedBlock::NxsX_NoDataForTaxon exception is thrown.
+*/
+unsigned NxsUnalignedBlock::NumCharsForTaxon(
+  unsigned taxInd)	/* is the index of the taxon in range [0..`ntaxTotal') */
+	{
+	if (taxInd >= uMatrix.size())
+		throw NxsUnalignedBlock::NxsX_NoDataForTaxon(taxInd);
+	return (unsigned)uMatrix[taxInd].size();
+	}
+
+
+/*!
+	Returns the number of states for taxon `i', character `j'. If `j' is equal to or greater than the number of
+	characters for taxon `i', returns UINT_MAX. If there is missing data, the return value is 0, otherwise a positive
+	integer will be returned. An alternative is to use the function GetInternalRepresentation to obtain a vector of all
+	states, and the size of that vector could be used to determine both the number and the identity of the states. If
+	no data was stored for the taxon having index i in the UNALIGNED block, a NxsUnalignedBlock::NxsX_NoDataForTaxon
+	exception is thrown.
+*/
+unsigned NxsUnalignedBlock::GetNumStates(
+  unsigned taxInd,	/* the taxon in range [0..`ntaxTotal') */
+  unsigned charInd)	/* the character in range [0..`nchar') */
+	{
+	if (taxInd >= uMatrix.size())
+		throw NxsUnalignedBlock::NxsX_NoDataForTaxon(taxInd);
+	NxsDiscreteStateRow & row = uMatrix[taxInd];
+	if (charInd >= (unsigned)row.size())
+		return UINT_MAX;
+	return mapper.GetNumStatesInStateCode(row[charInd]);
+	}
+
+/*!
+	Returns true if the state at taxon `taxInd', character `j' is the missing state, false otherwise. Throws NxsException if
+	`j' is too large (i.e. specifies a character beyond the last character for `uMatrix' row `taxInd'). Calls
+	NxsUnalignedBlock::GetInternalRepresentation, so unless all you need is information about missing data, it is more
+	efficient to simply call GetInternalRepresentation and see if the returned vector is empty. Note that `taxInd' should be
+	the index of the taxon in the TAXA block. If data for that taxon has not been stored in this UNALIGNED block, then
+	a NxsUnalignedBlock::NxsX_NoDataForTaxon exception will be thrown by GetInternalRepresentation.
+*/
+bool NxsUnalignedBlock::IsMissingState(
+  unsigned taxInd,	/* the taxon, in range [0..`ntaxTotal') */
+  unsigned charInd)	/* the character, in range [0..infinity) */
+	{
+	if (taxInd >= uMatrix.size())
+		throw NxsNCLAPIException("Taxon index out of range of NxsUnalignedBlock::IsMissingState");
+	NxsDiscreteStateRow & row = uMatrix[taxInd];
+	if (charInd >= (unsigned)row.size())
+		throw NxsNCLAPIException("Character index out of range of NxsUnalignedBlock::IsMissingState");
+	return mapper.GetNumStates()  == (unsigned) row[charInd];
+	}
+
+/*!
+	Returns true if taxon `taxInd' is polymorphic for character `j', false otherwise. Throws NxsException if `j' is too large
+	(i.e. specifies a character beyond the last character for `uMatrix' row `taxInd'). Calls
+	NxsUnalignedBlock::GetInternalRepresentation, so unless all you need is information about polymorphism, it is more
+	efficient to simply call GetInternalRepresentation and extract the information you need from the returned vector.
+	Note that `taxInd' should be the index of the taxon in the TAXA block. If data for that taxon has not been stored in this
+	UNALIGNED block, then a NxsUnalignedBlock::NxsX_NoDataForTaxon exception will be thrown by
+	GetInternalRepresentation.
+*/
+bool NxsUnalignedBlock::IsPolymorphic(
+  unsigned taxInd,	/* the taxon in range [0..`ntaxTotal') */
+  unsigned charInd)	/* the character in range [0..infinity) */
+	{
+	if (taxInd >= uMatrix.size())
+		throw NxsNCLAPIException("Taxon index out of range of NxsUnalignedBlock::IsMissingState");
+	NxsDiscreteStateRow & row = uMatrix[taxInd];
+	if (charInd >= (unsigned)row.size())
+		throw NxsNCLAPIException("Character index out of range of NxsUnalignedBlock::IsMissingState");
+	return mapper.IsPolymorphic(row[charInd]);
+	}
+
+
diff --git a/ncl/nxsunalignedblock.h b/ncl/nxsunalignedblock.h
new file mode 100644
index 0000000..9826c41
--- /dev/null
+++ b/ncl/nxsunalignedblock.h
@@ -0,0 +1,332 @@
+//	Copyright (C) 2007 Paul O. Lewis
+//
+//	This file is part of NCL (Nexus Class Library) version 2.0.
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+#ifndef NCL_NXSUNALIGNEDBLOCK_H
+#define NCL_NXSUNALIGNEDBLOCK_H
+
+#include "ncl/nxsdefs.h"
+#include "ncl/nxstaxablock.h"
+#include "ncl/nxscharactersblock.h"
+//@POL Note: This file is not yet ready for use (Paul Lewis, 19-May-2007)
+
+class NxsTaxaBlockAPI;
+
+/*!
+	This class handles reading and storage for the NEXUS block UNALIGNED. It overrides the member functions Read and
+	Reset, which are abstract virtual functions in the base class NxsBlock.
+>
+	Below is a table showing the correspondence between the elements of an UNALIGNED block in a NEXUS file and the
+	variables and member functions of the NxsUnalignedBlock class that can be used to access each piece of information
+	stored. Items in parenthesis should be viewed as "see also" items.
+>
+	NEXUS		  Command		 Data			Member
+	Command		  Atribute		 Member			Functions
+	---------------------------------------------------------------------
+	DIMENSIONS	  NEWTAXA		 newtaxa
+
+				  NTAX			 ntax			GetNTax
+
+	FORMAT		  DATATYPE		 datatype		GetDataType
+
+				  RESPECTCASE	 respectingCase IsRespectCase
+
+				  MISSING		 missing		GetMissingSymbol
+
+				  SYMBOLS		 symbols		GetSymbols
+
+				  EQUATE		 equates		GetEquateKey
+												GetEquateValue
+												GetNumEquates
+
+				  (NO)LABELS	 labels			IsLabels
+
+	TAXLABELS					 taxonLabels	GetTaxonLabels
+
+	MATRIX						 matrix			GetState
+												GetInternalRepresentation
+												GetNumStates
+												GetNumMatrixRows
+												IsPolymorphic
+>
+*/
+class NxsUnalignedBlock
+  : public NxsBlock, public NxsTaxaBlockSurrogate
+	{
+	public:
+
+		class NxsX_NoDataForTaxon
+			{
+			public:
+				NxsX_NoDataForTaxon(unsigned i) : taxon_index(i) {}
+				unsigned taxon_index;
+			};	/* thrown if a function is called with an index to a taxon for which no data is stored */
+
+								NxsUnalignedBlock(NxsTaxaBlockAPI * tb);
+		virtual					~NxsUnalignedBlock();
+
+		void					ShowStateLabels(std::ostream & out, NxsDiscreteDatum s);
+		NxsCharactersBlock::DataTypesEnum	GetDataType() const ;
+		NxsCharactersBlock::DataTypesEnum	GetOriginalDataType() const ;
+		const NxsDiscreteStateRow * GetDiscreteMatrixRow(unsigned taxInd) const
+			{
+			if (taxInd >= uMatrix.size())
+				return NULL;
+			return &uMatrix[taxInd];
+			}
+		NxsDiscreteStateRow		GetInternalRepresentation(unsigned i, unsigned j);
+		unsigned				GetNTaxWithData();
+		unsigned				GetNTaxTotal();
+		unsigned				GetNTaxTotal() const;
+		unsigned				GetNumEquates();
+		unsigned				GetNumMatrixRows();
+		unsigned				GetNumStates(unsigned i, unsigned j);
+		unsigned				NumCharsForTaxon(unsigned i);
+		char					GetMissingSymbol();
+		bool					IsLabels();
+		bool					IsMissingState(unsigned i, unsigned j);
+		bool					IsPolymorphic(unsigned i, unsigned j);
+		bool					IsRespectCase();
+		unsigned				GetStateSymbolIndex(unsigned i, unsigned j, unsigned k = 0);	// added by mth for standard data types
+		const char *			GetSymbols();
+		virtual void			DebugShowMatrix(std::ostream & out, const char * marginText = NULL) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void			Report(std::ostream & out) NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
+		virtual void			Reset();
+		void					SetNexus(NxsReader *nxsptr)
+			{
+			NxsBlock::SetNexus(nxsptr);
+			NxsTaxaBlockSurrogate::SetNexusReader(nxsptr);
+			}
+		virtual const std::string & GetBlockName() const
+			{
+			return NCL_BLOCKTYPE_ATTR_NAME;
+			}
+
+		void					WriteAsNexus(std::ostream & out) const;
+		void					WriteFormatCommand(std::ostream & out) const;
+		void					WriteMatrixCommand(std::ostream & out) const;
+		const char *			GetDatatypeName() const
+			{
+			return NxsCharactersBlock::GetNameOfDatatype(datatype);
+			}
+
+		virtual VecBlockPtr		GetImpliedBlocks()
+			{
+			return GetCreatedTaxaBlocks();
+			}
+
+		/*only used it the linkAPI is enabled*/
+		virtual void		HandleLinkCommand(NxsToken & token)
+			{
+			HandleLinkTaxaCommand(token);
+			}
+		virtual void		WriteLinkCommand(std::ostream &out) const
+			{
+			WriteLinkTaxaCommand(out);
+			}
+
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, assumptionsBlock blocks!
+		*/
+		NxsUnalignedBlock & operator=(const NxsUnalignedBlock &other)
+			{
+			Reset();
+			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
+			CopyTaxaBlockSurrogateContents(other);
+			CopyUnalignedBlockContents(other);
+			return *this;
+			}
+
+		/*---------------------------------------------------------------------------------------
+		| Results in aliasing of the taxa, assumptionsBlock blocks!
+		*/
+		virtual void CopyUnalignedBlockContents(const NxsUnalignedBlock &other)
+			{
+			nChar = other.nChar;
+			nTaxWithData = other.nTaxWithData;
+			matchchar = other.matchchar;
+			respectingCase = other.respectingCase;
+			transposing = other.transposing;
+			labels = other.labels;
+			missing = other.missing;
+			gap = other.gap;
+			symbols = other.symbols;
+			equates = other.equates;
+			mapper = other.mapper;
+			uMatrix = other.uMatrix;
+			datatype = other.datatype;
+			statesFormat = other.statesFormat;
+			}
+
+		virtual NxsUnalignedBlock * Clone() const
+			{
+			NxsUnalignedBlock * a = new NxsUnalignedBlock(taxa);
+			*a = *this;
+			return a;
+			}
+		bool 		SwapEquivalentTaxaBlock(NxsTaxaBlockAPI * tb)
+		{
+			return SurrogateSwapEquivalentTaxaBlock(tb);
+		}
+        std::string GetMatrixRowAsStr(const unsigned rowIndex) const;
+	protected:
+		bool					IsInSymbols(char ch);
+		void					HandleDimensions(NxsToken & token);
+		void					HandleEndblock(NxsToken & token);
+		virtual void			HandleFormat(NxsToken & token);
+		virtual void			HandleMatrix(NxsToken & token);
+		virtual bool			HandleNextState(NxsToken & token, unsigned taxInd, unsigned charInd, NxsDiscreteStateRow & new_row, const NxsString &);
+		virtual void			Read(NxsToken & token);
+		void					ResetSymbols();
+		std::string				FormatState(NxsDiscreteDatum x) const;
+
+		void					WriteStatesForMatrixRow(std::ostream &out, unsigned currTaxonIndex) const;
+
+		unsigned				nChar;				/* number of columns in matrix	*/
+		unsigned				nTaxWithData;		/* number of non empty rows in the matrix*/
+
+		char					matchchar;			/* match symbol to use in matrix */
+		bool					respectingCase;		/* if true, RESPECTCASE keyword specified in FORMAT command */
+		bool					transposing;		/* indicates matrix will be in transposed format */
+		bool					labels;				/* indicates whether or not labels will appear on left side of matrix */
+
+		char					missing;			/* missing data symbol */
+		char                    gap; /* gap symbol, will often be \0, but can be - */
+
+		std::string				symbols;			/* list of valid character state symbols */
+		std::map<char, NxsString> equates;			/* list of associations defined by EQUATE attribute of FORMAT command */
+
+		NxsDiscreteDatatypeMapper mapper;
+		NxsDiscreteStateMatrix	uMatrix;		/* storage for unaligned data */
+
+	private:
+		NxsCharactersBlock::DataTypesEnum			datatype;			/* flag variable (see datatypes enum) */
+		NxsCharactersBlock::DataTypesEnum			originalDatatype;			/* flag variable (see datatypes enum) */
+		NxsCharactersBlock::StatesFormatEnum		statesFormat;
+
+		NxsDiscreteStateCell						GetStateIndex(unsigned i, unsigned j, unsigned k);
+		void					ResetDatatypeMapper();
+		bool					TaxonIndHasData(const unsigned ind) const;
+		friend class PublicNexusReader;
+		friend class MultiFormatReader;
+	};
+
+class NxsUnalignedBlockFactory
+	:public NxsBlockFactory
+	{
+	public:
+		virtual NxsUnalignedBlock  *GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
+	};
+
+/*!
+	Returns datatype listed in the CHARACTERS block.
+	The original datatype can differ from the current datatype if the symbols list of a built in type was augmented
+	(thus converting it to standard).
+*/
+inline NxsCharactersBlock::DataTypesEnum NxsUnalignedBlock::GetOriginalDataType() const
+	{
+	return originalDatatype;
+	}
+
+
+/*!
+	Returns value of `datatype' as an unsigned integer. If you want the name of the datatype, you should call
+	NxsUnalignedBlock::GetDatatypeName instead.
+*/
+inline NxsCharactersBlock::DataTypesEnum NxsUnalignedBlock::GetDataType() const
+	{
+	return datatype;
+	}
+
+
+/*!
+	Returns the missing data symbol currently in effect. If no missing data symbol specified, returns '\0'.
+*/
+inline char NxsUnalignedBlock::GetMissingSymbol()
+	{
+	return missing;
+	}
+
+/*!
+	Returns the number of taxa that have data (or will have data according to the Dimensions command, if the matrix
+		has not been read.
+*/
+inline unsigned NxsUnalignedBlock::GetNTaxWithData()
+	{
+	return nTaxWithData;
+	}
+
+/*!
+	Returns the number of taxa in the taxa block associated with the unaligned block.
+*/
+inline unsigned NxsUnalignedBlock::GetNTaxTotal()
+	{
+	return (unsigned)uMatrix.size();
+	}
+
+/*!
+	Returns the number of taxa in the taxa block associated with the unaligned block.
+*/
+inline unsigned NxsUnalignedBlock::GetNTaxTotal() const
+	{
+	return (unsigned)uMatrix.size();
+	}
+
+/*!
+	Returns the number of stored equate associations.
+*/
+inline unsigned NxsUnalignedBlock::GetNumEquates()
+	{
+	return (unsigned)equates.size();
+	}
+
+/*!
+	Returns the number of actual rows in `matrix'. This number is equal to `ntax', and hence this function is identical
+	to GetNTax. Note that `ntax' can be smaller than `ntaxTotal' since the user did not have to provide data for all
+	taxa specified in the TAXA block.
+*/
+inline unsigned NxsUnalignedBlock::GetNumMatrixRows()
+	{
+	return (unsigned)uMatrix.size();
+	}
+
+/*!
+	Returns data member `symbols'. Warning: returned value may be NULL.
+*/
+inline const char * NxsUnalignedBlock::GetSymbols()
+	{
+	return symbols.c_str();
+	}
+
+/*!
+	Returns true if LABELS was specified in the FORMAT command, false otherwise.
+*/
+inline bool NxsUnalignedBlock::IsLabels()
+	{
+	return labels;
+	}
+
+/*!
+	Returns true if RESPECTCASE was specified in the FORMAT command, false otherwise.
+*/
+inline bool NxsUnalignedBlock::IsRespectCase()
+	{
+	return respectingCase;
+	}
+
+#endif
diff --git a/ncl/nxsutilcopy.h b/ncl/nxsutilcopy.h
new file mode 100644
index 0000000..eee67e3
--- /dev/null
+++ b/ncl/nxsutilcopy.h
@@ -0,0 +1,264 @@
+//	Copyright (C) 2008 Mark Holder
+//
+//	This file is part of NCL (Nexus Class Library) version 2.1
+//
+//	NCL 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.
+//
+//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
+//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+
+// This code is based on code developed by Mark Holder for the CIPRES project
+// Much of this file comes from Andrei Alexandrescu "Modern C++ Design"
+
+#if !defined NXS_UTIL_COPY_H
+#define NXS_UTIL_COPY_H
+#include <algorithm>
+#include <cstring>
+
+#if defined(_MSC_VER)
+#	undef	HAVE_COMPILE_TIME_DISPATCH
+#else
+#	define HAVE_COMPILE_TIME_DISPATCH
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+///	Int2Type<compile time constant integer> defines a unique (and stateless)
+///		class associated with a given integer.  Used for compile time dispatching
+///		of function calls or creation of appropriate templated classes.
+///
+///	defines an unnamed enum "value" that is equal to the integer used to
+///		define the class.
+///	\author	Andrei Alexandrescu "Modern C++ Design"
+//////////
+
+template<int v>
+class Int2Type
+	{
+		public:
+			enum {value = v};
+	};
+
+typedef Int2Type<true>  TrueAsAType;
+typedef Int2Type<false> FalseAsAType;
+
+////////////////////////////////////////////////////////////////////////////////
+///	Type2Type<typename> defines a unique (and stateless) class for each type
+///		that is specified as the template argument.
+///	This is useful in controlling the return type of templated functions in
+///		lieu of partial template specialization of templated functions (which is
+///		not allowed by the C++ standard)
+///	Defines the typedef OriginalType which corresponds to the template argument
+///	\author	Andrei Alexandrescu "Modern C++ Design"
+//////////
+
+template<typename T>
+class Type2Type
+	{
+		public:
+			typedef T OriginalType;
+	};
+
+
+namespace ncl
+{
+namespace hidden
+{
+// used by #COMPILE_TIME_ASSERT
+template<bool> struct CompileTimeChecker
+	{
+	CompileTimeChecker(...); //default
+	};
+// used by #COMPILE_TIME_ASSERT
+template<> struct CompileTimeChecker<false>{};
+}
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///	\def COMPILE_TIME_ASSERT(condition, msg)
+///	\brief A error-detection macro for asserting that conditions are true at compile time.
+///
+///	Usage:
+///
+///		COMPILE_TIME_ASSERT(condition to test, error_clue)
+///
+///	\note	The error_clue must be one alphanumeric word (no spaces of punctaution).
+///	The condition to test must be known at compile time (if not a cryptic message such as "illegal non-type template argument"
+///	error will be generated.
+///	If the compile time assertion evaluates to false, a message such as "Illegal conversion
+///		from ERROR_error_clue to CompileTimeChecker<false> ..." will be generated.
+///
+///	Implementation Details:
+///
+///		ncl::hidden::CompileTimeChecker is a boolean-templated class.
+///		The constructor of ncl::hidden::CompileTimeChecker<true> accepts any type
+///		The the only constructor for ncl::hidden::CompileTimeChecker<false> is the default constructor
+///		The macro COMPILE_TIME_ASSERT(condition, msg):
+///			1	Declares a dummy class ERROR_msg
+///			2	checks if it can instantiate CompileTimeChecker<condition> from an ERROR_msg type object.
+///		If the condition is true, the construction will succeed, if not the error message will be generated
+///		Note that while the  CompileTimeChecker exists in ncl::hidden:: namespace.  The macro is visible
+///		by any file that includes compile_assert.h and the class such as ERROR_msg will be added to the global
+///		namespace.
+///		The resultign code is not affected by the insertion of COMPILE_TIME_ASSERT because the entire construction
+///		is inside a sizeof() so no objects are really instantiated.
+///
+///	\author	Andrei Alexandrescu "Modern C++ Design"
+///
+//////////
+#define COMPILE_TIME_ASSERT(condition, msg) {class ERROR_##msg {}; (void)sizeof(ncl::hidden::CompileTimeChecker<(condition)>(ERROR_##msg()));}
+
+#if defined(HAVE_COMPILE_TIME_DISPATCH)
+template<typename T> struct SupportsBitwiseCopy { enum {kResult = false};	};
+template<typename T> struct SupportsBitwiseCopy<T*> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<short int> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<int> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<char> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<long int> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<double> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<unsigned short int> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<unsigned int> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<unsigned char> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<unsigned long int> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<bool> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<wchar_t> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<float> {	enum {kResult = true}; 	};
+template<> struct SupportsBitwiseCopy<long double> {	enum {kResult = true}; 	};
+
+
+//	This file uses tricks discussed in Andrei Alexandrescu's book to
+//	implement a call to memcpy for primitive types or any class which
+//  has the statement template<> struct SupportsBitwiseCopy<CLASS> {	enum {kResult = true}; 	};
+//	because of potential portability issues with TypeList, primitive types are
+//	have SupportsBitwiseCopy specialized here by brute force enumeration
+
+
+class NullType {};
+
+template <typename T>
+class TypeTraits
+	{
+	private :
+		template <class U> struct PointerTraits
+			{
+				enum {kResult = false};
+				enum {kCopyWithMemCopy = false};	// only allowing memcpy on bare pointers
+				enum {kSizeOfPointee = 0};	// only allowing memcpy on bare pointers
+			};
+		template <class U> struct PointerTraits<U*>
+			{
+				enum {kResult = true};
+				enum {kCopyWithMemCopy = SupportsBitwiseCopy<U>::kResult};
+				enum {kSizeOfPointee = sizeof(U)};
+			};
+		template <class U> struct PointerTraits<const U*>
+			{
+				enum {kResult = true};
+				enum {kCopyWithMemCopy = SupportsBitwiseCopy<U>::kResult};
+				enum {kSizeOfPointee = sizeof(U)};
+			};
+	public:
+		enum {kIsPointer = PointerTraits<T>::kResult};
+		enum {kCanUseMemCpyOnPointee = PointerTraits<T>::kCopyWithMemCopy};
+		enum {kPointeeSize = PointerTraits<T>::kSizeOfPointee}; //only valid if kIsPointer !!
+	//	typedef PointerTraits<T>::PointeeType  PointeeType;
+	};
+
+template<class T, class U>
+class Conversion
+	{
+	public:
+		enum {kSameType = false};
+	};
+
+template<class T>
+class Conversion<T,T>
+	{
+	public:
+		enum {kSameType = true};
+	};
+
+template<class T>
+class Conversion<const T*,T*>
+	{
+	public:
+		enum {kSameType = true};
+	};
+
+template<class T>
+class Conversion<T*, const T*>
+	{
+	public:
+		enum {kSameType = true};
+	};
+
+enum CopyAlgoSeclector
+	{
+		kConservative,
+		kFast
+	};
+
+template <typename InIt, typename OutIt>
+inline OutIt CopyImpl(InIt first, InIt last, OutIt resultP, Int2Type<kConservative>)
+	{
+	return std::copy(first, last, resultP);
+	}
+
+template <typename InIt, typename OutIt>
+inline OutIt CopyImpl(InIt first, InIt last, OutIt resultP, Int2Type<kFast>)
+	{
+	return (OutIt) std::memcpy(resultP, first,  ((std::size_t) (last - first)) * sizeof(*first));
+	}
+
+template <typename InIt, typename OutIt>
+OutIt ncl_copy(InIt first, InIt last, OutIt resultP)
+	{
+		enum { kUseMemCpy =(TypeTraits<InIt>::kIsPointer &&
+							TypeTraits<OutIt>::kIsPointer &&
+							TypeTraits<InIt>::kCanUseMemCpyOnPointee &&
+							TypeTraits<OutIt>::kCanUseMemCpyOnPointee &&
+							int(TypeTraits<InIt>::kPointeeSize) == int(TypeTraits<OutIt>::kPointeeSize)) ? kFast : kConservative};
+		return CopyImpl(first, last, resultP, Int2Type<kUseMemCpy>());
+	}
+
+#else //HAVE_COMPILE_TIME_DISPATCH
+
+template <typename InIt, typename OutIt>
+inline OutIt ncl_copy(InIt first, InIt last, OutIt resultP)
+	{
+	return std::copy(first, last, resultP);
+	}
+
+#endif //HAVE_COMPILE_TIME_DISPATCH
+
+
+//adds an element from the first -> last array to the corresponding element in the result array
+template <typename InIt, typename OutIt>
+inline OutIt ncl_iadd(InIt first, InIt last, OutIt resultP)
+	{
+	for (; first != last; ++first, ++resultP)
+		*resultP += *first;
+	return resultP;
+	}
+
+//adds each element in resultP array with the correcpsonding element from the first -> last array
+template <typename InIt, typename OutIt>
+inline OutIt ncl_imult(InIt first, InIt last, OutIt resultP)
+	{
+	for (; first != last; ++first, ++resultP)
+		*resultP *= *first;
+	return resultP;
+	}
+
+
+#endif
+
diff --git a/nclv2.1.pc.in b/nclv2.1.pc.in
new file mode 100644
index 0000000..d409f8d
--- /dev/null
+++ b/nclv2.1.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: NCL
+Description: NCL is a general purpose library for handling Nexus and other common formats used in phyloinformatics.
+Version: 2.1
+Libs: -L${libdir}/ncl -llibncl.la
+Cflags: -I${includedir}/ncl
+
+
diff --git a/swig/Makefile.am b/swig/Makefile.am
new file mode 100644
index 0000000..aa30951
--- /dev/null
+++ b/swig/Makefile.am
@@ -0,0 +1,12 @@
+BUILT_SOURCES = $(srcdir)/ncl_wrap.cpp
+SWIG_FILES = ncl.i
+
+pkgpython_PYTHON = nclwrapper.py
+pkgpyexec_LTLIBRARIES = _nclwrapper.la
+_nclwrap_la_SOURCES = $(srcdir)/ncl_wrap.cpp $(SWIG_SOURCES)
+_nclwrap_la_CPPFLAGS = $(SWIG_PYTHON_CPPFLAGS) -I$(top_srcdir)/ncl
+_nclwrap_la_LDFLAGS = -module
+_nclwrap_la_LIBADD = ../ncl/libncl.la
+
+ncl_wrap.cpp : $(SWIG_FILES)
+	 $(SWIG) $(SWIG_PYTHON_OPT) -DNCL_COULD_BE_CONST=const -DNCL_CONST_FUNCS -I$(top_srcdir) -I$(top_srcdir)/ncl -o $@ $<
diff --git a/swig/ncl.i b/swig/ncl.i
new file mode 100644
index 0000000..a37b170
--- /dev/null
+++ b/swig/ncl.i
@@ -0,0 +1,91 @@
+// minimal wrapper around NCL
+/* Setting modulename to "ncl" with directors enabled */
+%module(directors="1") nclwrapper
+%{
+ #include "ncl.h"
+ #include "nxstreestream.h"
+%}
+
+#if defined(SWIGPERL) /* Perl-specific customizations because the SWIG (language-generic) exception handling wasn't working */
+
+%exception {
+	try {
+		$action
+	} catch (NxsException & e) {
+		croak(PyExc_ValueError, e.nxs_what());
+	}
+	catch (...) {
+		croak("unknown exception");
+	}
+}
+#elif defined(SWIGPYTHON) /* Python-specific customizations because the SWIG (language-generic) exception handling wasn't working */
+
+%exception {
+	try {
+		$action
+	} catch (NxsException & e) {
+		PyErr_SetString(PyExc_ValueError, e.nxs_what());
+		return NULL;
+	}
+	catch (...) {
+		PyErr_SetString(PyExc_ValueError, "unknown exception");
+		return NULL;
+	}
+}
+
+#endif // defined (SWIGPYTHON)
+
+%feature("director") NxsTreeStream;
+
+
+/* Allowing synonymous employment of certain STL classes */
+typedef std::string string;
+typedef std::ostream ostream;
+typedef std::istream istream;
+typedef long file_pos;
+
+/* Enabling default typemaps for std::strings */
+%include std_string.i
+
+/* Ignored members of NCL */
+%ignore NxsBlock::CloneBlock;
+%ignore	NxsCharactersBlock::GetStateSymbolIndex;
+
+
+/* Conditional processing based on language of wrappers being produced */
+
+
+%include "std_vector.i"
+
+namespace std {
+   %template(vectori) vector< int >;
+   %template(vectorvi) vector< vector<int> >;
+   %template(vectord) vector< double >;
+   %template(vectorst) vector< string >;
+   %template(vectoru) vector< unsigned >;
+
+class exception {
+	public:
+		exception();
+		exception(const exception& rhs);
+		virtual ~exception();
+		virtual const char *what(void);
+};
+
+};
+
+
+%include nxsexception.h
+%include nxstoken.h
+%include nxsblock.h
+%include nxsreader.h
+%include nxstaxablock.h
+%include nxstreesblock.h
+%include nxscharactersblock.h
+%include nxsassumptionsblock.h
+%include nxsdatablock.h
+%include nxsdistancesblock.h
+%include nxssetreader.h
+%include nxspublicblocks.h
+%include nxsmultiformat.h
+
diff --git a/test/.DS_Store b/test/.DS_Store
new file mode 100644
index 0000000..480ebe4
Binary files /dev/null and b/test/.DS_Store differ
diff --git a/test/ExternalInvalidIn/aarelaxedphylip_rana.phy b/test/ExternalInvalidIn/aarelaxedphylip_rana.phy
new file mode 100644
index 0000000..5d7b4bf
--- /dev/null
+++ b/test/ExternalInvalidIn/aarelaxedphylip_rana.phy
@@ -0,0 +1,65 @@
+64 1976
+temporariaDMH84R1         CCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAGTGTAC [...]
+boyliiMVZ148929           GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_MT_MVZ191016 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_WA_MVZ225749 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+muscosaMVZ149006          GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+auroraMVZ13957            GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+cascadaeMVZ148946         GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaMVZ137426        GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaDMH84R43         GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+septentrionalesDCC3588    GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+grylioMVZ175945           ???????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+virgatipesMVZ175944       ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+okaloosae                 GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+clamitansJSF1118          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+heckscheriMVZ164908       GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaX12841          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaDMH84R2         GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+maculataKU195258          GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAGTGTA [...]
+vibicariaMVZ11035         GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+warszewitshiiJSF1127      GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACCAGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGGAAAGCAATGGGCTACAATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesVenAMNHA118801    ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesEcuKU204425       ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+bwanaQCAZ13964            ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+Sp_1_ecuadorQCAZ13219     ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAGTGTA [...]
+vaillantiKU195299         ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+julianiTNHC60324          ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sierramadrensisKU195181   GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+psilonotaKU195119         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+tarahumaraeKU194596       GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+zweifeliJAC7514           ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+pustulosaJAC10555         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAGTGTA [...]
+pipiensJSF1119            ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+pipiensY10945             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+dunniJSF1017              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+montezumaeJAC8836         GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_2_mex_JSF1106          GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1063     ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1092     GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+subaquavocalis            GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGCGTA [...]
+palustrisJSF1110          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+areolataJSF1111           GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sevosaUSC8236             GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+capitoSLU003              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+spectabilisJAC8622        GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+forreriJSF1065            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+tlalociJSF1083            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+berlandieriJSF1136        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+neovolcanicaJSF960        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+blairiJSF830              GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+omiltemanaJAC7413         ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+magnaocularisJSF1073      ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAATTGTA [...]
+yavapaiensisJSF1085       ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_7_JaliscoJSF1000       GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJAC10472       ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJSF7933        ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+taylori286                ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_4_Panama               ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_5_CostaRichDMH86_210   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_6_CostaRicaDMH86_225   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAGCGTA [...]
+sp_8_PueblaJAC9467        ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+oncaLVT3542               ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_3_MichoacanJSF955      GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sphenocephalaUSC7448      GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+utriculariaJSF845         GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
diff --git a/test/ExternalInvalidIn/dnarelaxedphylip_rana.phy b/test/ExternalInvalidIn/dnarelaxedphylip_rana.phy
new file mode 100644
index 0000000..0d81270
--- /dev/null
+++ b/test/ExternalInvalidIn/dnarelaxedphylip_rana.phy
@@ -0,0 +1,65 @@
+64 1976
+temporariaDMH84R1         GCCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAGTGTA [...]
+boyliiMVZ148929           GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_MT_MVZ191016 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_WA_MVZ225749 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+muscosaMVZ149006          GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+auroraMVZ13957            GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+cascadaeMVZ148946         GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaMVZ137426        GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaDMH84R43         GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+septentrionalesDCC3588    GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+grylioMVZ175945           ?q?????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+virgatipesMVZ175944       ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+okaloosae                 GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+clamitansJSF1118          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+heckscheriMVZ164908       GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaX12841          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaDMH84R2         GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+maculataKU195258          GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAGTGTA [...]
+vibicariaMVZ11035         GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+warszewitshiiJSF1127      GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACCAGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGGAAAGCAATGGGCTACAATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesVenAMNHA118801    ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesEcuKU204425       ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+bwanaQCAZ13964            ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+Sp_1_ecuadorQCAZ13219     ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAGTGTA [...]
+vaillantiKU195299         ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+julianiTNHC60324          ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sierramadrensisKU195181   GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+psilonotaKU195119         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+tarahumaraeKU194596       GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+zweifeliJAC7514           ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+pustulosaJAC10555         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAGTGTA [...]
+pipiensJSF1119            ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+pipiensY10945             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+dunniJSF1017              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+montezumaeJAC8836         GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_2_mex_JSF1106          GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1063     ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1092     GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+subaquavocalis            GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGCGTA [...]
+palustrisJSF1110          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+areolataJSF1111           GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sevosaUSC8236             GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+capitoSLU003              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+spectabilisJAC8622        GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+forreriJSF1065            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+tlalociJSF1083            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+berlandieriJSF1136        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+neovolcanicaJSF960        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+blairiJSF830              GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+omiltemanaJAC7413         ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+magnaocularisJSF1073      ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAATTGTA [...]
+yavapaiensisJSF1085       ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_7_JaliscoJSF1000       GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJAC10472       ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJSF7933        ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+taylori286                ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_4_Panama               ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_5_CostaRichDMH86_210   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_6_CostaRicaDMH86_225   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAGCGTA [...]
+sp_8_PueblaJAC9467        ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+oncaLVT3542               ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_3_MichoacanJSF955      GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sphenocephalaUSC7448      GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+utriculariaJSF845         GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
diff --git a/test/ExternalValidIn/aaaln_twoprot.aln b/test/ExternalValidIn/aaaln_twoprot.aln
new file mode 100644
index 0000000..203ff4b
--- /dev/null
+++ b/test/ExternalValidIn/aaaln_twoprot.aln
@@ -0,0 +1,26 @@
+CLUSTAL W (1.82) multiple sequence alignment
+
+
+FOSB_MOUSE      MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTA 60
+FOSB_HUMAN      MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTA 60
+                ************************************************************
+
+FOSB_MOUSE      ITTSQDLQWLVQPTLISSMAQSQGQPLASQPPAVDPYDMPGTSYSTPGLSAYSTGGASGS 120
+FOSB_HUMAN      ITTSQDLQWLVQPTLISSMAQSQGQPLASQPPVVDPYDMPGTSYSTPGMSGYSSGGASGS 120
+                ********************************.***************:*.**:******
+
+FOSB_MOUSE      GGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELT 180
+FOSB_HUMAN      GGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELT 180
+                ****** ***** .**********************************************
+
+FOSB_MOUSE      DRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRD 240
+FOSB_HUMAN      DRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRD 240
+                ************************************************************
+
+FOSB_MOUSE      LPGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTASLFTHSEVQVLGDPFPVVSPSY 300
+FOSB_HUMAN      LPGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTASLFTHSEVQVLGDPFPVVNPSY 300
+                ****:.******.**************:*:**************************.***
+
+FOSB_MOUSE      TSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL 338
+FOSB_HUMAN      TSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL 338
+                ***********************:**************
diff --git a/test/ExternalValidIn/aaaln_twoprot_undec.aln b/test/ExternalValidIn/aaaln_twoprot_undec.aln
new file mode 100644
index 0000000..903a0c2
--- /dev/null
+++ b/test/ExternalValidIn/aaaln_twoprot_undec.aln
@@ -0,0 +1,29 @@
+CLUSTAL W (1.82) multiple sequence alignment
+
+
+FOSB_MOUSE      MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTA
+FOSB_HUMAN      MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTA
+
+FOSB_MOUSE      ITTSQDLQWLVQPTLISSMAQSQGQPLASQPPAVDPYDMPGTSYSTPGLSAYSTGGASGS
+FOSB_HUMAN      ITTSQDLQWLVQPTLISSMAQSQGQPLASQPPVVDPYDMPGTSYSTPGMSGYSSGGASGS 
+
+FOSB_MOUSE      GGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELT
+FOSB_HUMAN      GGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELT
+
+
+
+ 
+
+FOSB_MOUSE      DRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRD
+FOSB_HUMAN      DRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRD
+
+
+	
+
+FOSB_MOUSE      LPGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTASLFTHSEVQVLGDPFPVVSPSY
+FOSB_HUMAN      LPGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTASLFTHSEVQVLGDPFPVVNPSY
+
+FOSB_MOUSE      TSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL
+FOSB_HUMAN      TSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL
+
+
diff --git a/test/ExternalValidIn/aafasta_twoprot.fas b/test/ExternalValidIn/aafasta_twoprot.fas
new file mode 100644
index 0000000..655d6c8
--- /dev/null
+++ b/test/ExternalValidIn/aafasta_twoprot.fas
@@ -0,0 +1,14 @@
+>FOSB_MO USE
+MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTA
+ITTSQDLQWLVQPTLISSMAQSQGQPLASQPPAVDPYDMPGTSYSTPGLSAYSTGGASGS
+GGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELT
+DRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRD
+LPGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTASLFTHSEVQVLGDPFPVVSPSY
+TSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL
+>FOSB_HUMAN      
+MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTA 
+ITTSQDLQWLVQPTLISSMAQSQGQPLASQPPVVDPYDMPGTSYSTPGMSGYSSGGASGS 
+GGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELT 
+DRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRD 
+LPGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTASLFTHSEVQVLGDPFPVVNPSY 
+TSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL
diff --git a/test/ExternalValidIn/aaphylip_emboss.phy b/test/ExternalValidIn/aaphylip_emboss.phy
new file mode 100644
index 0000000..84e3ea6
--- /dev/null
+++ b/test/ExternalValidIn/aaphylip_emboss.phy
@@ -0,0 +1,13 @@
+4 131
+IXI_234   TSPASIRPPA GPSSRPAMVS SRRTRPSPPG PRRPTGRPCC SAAPRRPQAT
+          GGWKTCSGTC TTSTSTRHRG RSGWSARTTT AACLRASRKS MRAACSRSAG
+          SRPNRFAPTL MSSCITSTTG PPAWAGDRSH E
+IXI_235   TSPASIRPPA GPSSR----- ----RPSPPG PRRPTGRPCC SAAPRRPQAT
+          GGWKTCSGTC TTSTSTRHRG RSGW------ ----RASRKS MRAACSRSAG
+          SRPNRFAPTL MSSCITSTTG PPAWAGDRSH E
+IXI_236   TSPASIRPPA GPSSRPAMVS SR--RPSPPP PRRPPGRPCC SAAPPRPQAT
+          GGWKTCSGTC TTSTSTRHRG RSGWSARTTT AACLRASRKS MRAACSR--G
+          SRPPRFAPPL MSSCITSTTG PPPPAGDRSH E
+IXI_237   TSPASLRPPA GPSSRPAMVS SRR-RPSPPG PRRPT----C SAAPRRPQAT
+          GGYKTCSGTC TTSTSTRHRG RSGYSARTTT AACLRASRKS MRAACSR--G
+          SRPNRFAPTL MSSCLTSTTG PPAYAGDRSH E
diff --git a/test/ExternalValidIn/aaphylipinterleaved_emboss.phy b/test/ExternalValidIn/aaphylipinterleaved_emboss.phy
new file mode 100644
index 0000000..f831c03
--- /dev/null
+++ b/test/ExternalValidIn/aaphylipinterleaved_emboss.phy
@@ -0,0 +1,15 @@
+ 4 131
+IXI_234   TSPASIRPPA GPSSRPAMVS SRRTRPSPPG PRRPTGRPCC SAAPRRPQAT
+IXI_235   TSPASIRPPA GPSSR----- ----RPSPPG PRRPTGRPCC SAAPRRPQAT
+IXI_236   TSPASIRPPA GPSSRPAMVS SR--RPSPPP PRRPPGRPCC SAAPPRPQAT
+IXI_237   TSPASLRPPA GPSSRPAMVS SRR-RPSPPG PRRPT----C SAAPRRPQAT
+
+          GGWKTCSGTC TTSTSTRHRG RSGWSARTTT AACLRASRKS MRAACSRSAG
+          GGWKTCSGTC TTSTSTRHRG RSGW------ ----RASRKS MRAACSRSAG
+          GGWKTCSGTC TTSTSTRHRG RSGWSARTTT AACLRASRKS MRAACSR--G
+          GGYKTCSGTC TTSTSTRHRG RSGYSARTTT AACLRASRKS MRAACSR--G
+
+          SRPNRFAPTL MSSCITSTTG PPAWAGDRSH E
+          SRPNRFAPTL MSSCITSTTG PPAWAGDRSH E
+          SRPPRFAPPL MSSCITSTTG PPPPAGDRSH E
+          SRPNRFAPTL MSSCLTSTTG PPAYAGDRSH E
diff --git a/test/ExternalValidIn/aarelaxedphylip_rana.phy b/test/ExternalValidIn/aarelaxedphylip_rana.phy
new file mode 100644
index 0000000..16e9ca9
--- /dev/null
+++ b/test/ExternalValidIn/aarelaxedphylip_rana.phy
@@ -0,0 +1,65 @@
+64 1976
+temporariaDMH84R1         qCCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAGTGTA [...]
+boyliiMVZ148929           GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_MT_MVZ191016 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_WA_MVZ225749 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+muscosaMVZ149006          GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+auroraMVZ13957            GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+cascadaeMVZ148946         GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaMVZ137426        GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaDMH84R43         GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+septentrionalesDCC3588    GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+grylioMVZ175945           ???????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+virgatipesMVZ175944       ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+okaloosae                 GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+clamitansJSF1118          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+heckscheriMVZ164908       GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaX12841          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaDMH84R2         GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+maculataKU195258          GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAGTGTA [...]
+vibicariaMVZ11035         GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+warszewitshiiJSF1127      GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACCAGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGGAAAGCAATGGGCTACAATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesVenAMNHA118801    ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesEcuKU204425       ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+bwanaQCAZ13964            ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+Sp_1_ecuadorQCAZ13219     ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAGTGTA [...]
+vaillantiKU195299         ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+julianiTNHC60324          ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sierramadrensisKU195181   GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+psilonotaKU195119         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+tarahumaraeKU194596       GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+zweifeliJAC7514           ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+pustulosaJAC10555         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAGTGTA [...]
+pipiensJSF1119            ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+pipiensY10945             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+dunniJSF1017              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+montezumaeJAC8836         GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_2_mex_JSF1106          GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1063     ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1092     GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+subaquavocalis            GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGCGTA [...]
+palustrisJSF1110          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+areolataJSF1111           GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sevosaUSC8236             GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+capitoSLU003              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+spectabilisJAC8622        GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+forreriJSF1065            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+tlalociJSF1083            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+berlandieriJSF1136        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+neovolcanicaJSF960        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+blairiJSF830              GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+omiltemanaJAC7413         ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+magnaocularisJSF1073      ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAATTGTA [...]
+yavapaiensisJSF1085       ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_7_JaliscoJSF1000       GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJAC10472       ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJSF7933        ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+taylori286                ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_4_Panama               ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_5_CostaRichDMH86_210   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_6_CostaRicaDMH86_225   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAGCGTA [...]
+sp_8_PueblaJAC9467        ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+oncaLVT3542               ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_3_MichoacanJSF955      GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sphenocephalaUSC7448      GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+utriculariaJSF845         GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
diff --git a/test/ExternalValidIn/dnarelaxedphylip_brana.phy b/test/ExternalValidIn/dnarelaxedphylip_brana.phy
new file mode 100644
index 0000000..ac8a201
--- /dev/null
+++ b/test/ExternalValidIn/dnarelaxedphylip_brana.phy
@@ -0,0 +1,82 @@
+64 1976
+temporariaDMH84R1         GCCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTT
+CACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAGTGTACTGGAAAGTGCACTTGGTATA-CTACAAAATGTAGCTTAACAAAAGCCCCTCGCTTACACCTAGGAAATATCTGTTAAACCCGGATCATTTTGAGCCTAAAATCTAGCCCA-CTAATCCGTATGACCCCTCCAAAAAA-CAAAACATTTT [...]
+boyliiMVZ148929           GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_MT_MVZ191016 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_WA_MVZ225749 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+muscosaMVZ149006          GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+auroraMVZ13957            GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+cascadaeMVZ148946         GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGAC GGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGT [...]
+sylvaticaMVZ137426        GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaDMH84R43         GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCA   AAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAGT [...]
+septentrionalesDCC3588    GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+grylioMVZ175945           ???????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+virgatipesMVZ175944       ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+okaloosae                 GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+clamitansJSF1118          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+heckscheriMVZ164908       GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaX12841          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaDMH84R2         GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+maculataKU195258          GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAGTGTA [...]
+vibicariaMVZ11035         GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+warszewitshiiJSF1127      GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACC
+CAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACC
+AGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGG AAAGCAATGGGCTACA             				ATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTACTGGAAAGTGTACTTGGTTAA-TAACAAGATGTAGCTTAATAAAAACTCCTCGTTTACACCGAGGAAATATCTGTTTAAACCAGATCATCTTGAGCCTAAAATCTAGCCGT--ATATTCACACGAACCCCCCCCCAAA-TAAAACATTTTCTCAT [...]
+palmipesVenAMNHA118801    ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesEcuKU204425       ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+bwanaQCAZ13964            ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGA		
+TCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGT
+
+CAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTACTGGAAAGTGCACTTGGTAAA-TAACAAAATGTAGCTTAATAAAAGCCCTTCGCTTACACCGAAGAAATGTCTGTTAAAACCAGATCATTCTGAGCCTAAAATCTAGCCCATAATATTCAAATGGCCCCCTCTCCAAA-CAAAACATTTTCCTAGTTTAGTACAGGCGATCGAAAAA-TTTCTAAGCGCTTCAGATATAGTACCGCAAGGGAAAAATGAAATAGAACTGAAATAACCTTAAAGCCCC [...]
+
+
+
+Sp_1_ecuadorQCAZ13219     ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAGTGTA [...]
+vaillantiKU195299         
+
+ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAG
+GAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACG
+TCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAA
+CGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACAC
+ACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAGTGTACT
+GGAAAGTGCACTTGGCAAA-CAACAAAATGTAGCTTAACAAAAGCCCTCCGCTTACACCGAAAAAATGTCTGTTAAACCCGGATCATTCTGAGCCTAA
+AATCTAGTCCTTAATATTCATATGACCCTCTCTTCAAA-TAAAACATTTTCCTATCTTAGTACAGGCGATCGAAAAA-TTTCTAAGCACTTCAGATAAAGTACCGCAAGGGAAAAATGAAATAGAAATGAAATAACCTTAAAGCCCCAAACAGCAGAGACACTATCTCGTACCTTTTGCATCATGGTCTAGTAAGTCTACCC-AAGCAAAACGAAACTTTC-AGTTTGACATCCCGAAACTAAGCGAGCTACTTCAAAACAGCCCAAA-GAGCTAACCCGTCTCTGTTGCAAAAGAGTGGGAAGATTTTCAAGTAGAGGTGACAAGCCTATCGAGCTTAGAGATAGCTGGTTGTTCAGGAAAAGAGTTTTAGCTCTACCTTAAGTTTATTT-GTGAATCTT-AACAAACCCTTAAAACTTAAGAGCTATTCAAATAAGGCACAGCTTATTTGAAATAGGATACAACCTATTTTACTGGGT-AAATAATAACG [...]
+julianiTNHC60324          ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sierramadrensisKU195181   GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+psilonotaKU195119         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+tarahumaraeKU194596       GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+zweifeliJAC7514           ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+pustulosaJAC10555         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAGTGTA [...]
+pipiensJSF1119            ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+pipiensY10945             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+dunniJSF1017              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+montezumaeJAC8836         GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_2_mex_JSF1106          GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1063     ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1092     GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+subaquavocalis            GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGCGTA [...]
+palustrisJSF1110          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+areolataJSF1111           GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sevosaUSC8236             GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+capitoSLU003              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+spectabilisJAC8622        GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+forreriJSF1065            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+tlalociJSF1083            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+berlandieriJSF1136        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+neovolcanicaJSF960        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+blairiJSF830              GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+omiltemanaJAC7413         ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+magnaocularisJSF1073      ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAATTGTA [...]
+yavapaiensisJSF1085       ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_7_JaliscoJSF1000       GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJAC10472       ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJSF7933        ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+taylori286                ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_4_Panama               ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_5_CostaRichDMH86_210   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_6_CostaRicaDMH86_225   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAGCGTA [...]
+sp_8_PueblaJAC9467        ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+oncaLVT3542               ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_3_MichoacanJSF955      GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sphenocephalaUSC7448      GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+utriculariaJSF845         GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
diff --git a/test/ExternalValidIn/dnarelaxedphylip_rana.phy b/test/ExternalValidIn/dnarelaxedphylip_rana.phy
new file mode 100644
index 0000000..2f6f224
--- /dev/null
+++ b/test/ExternalValidIn/dnarelaxedphylip_rana.phy
@@ -0,0 +1,65 @@
+64 1976
+temporariaDMH84R1         GCCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAGTGTA [...]
+boyliiMVZ148929           GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_MT_MVZ191016 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_WA_MVZ225749 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+muscosaMVZ149006          GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+auroraMVZ13957            GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+cascadaeMVZ148946         GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaMVZ137426        GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaDMH84R43         GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+septentrionalesDCC3588    GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+grylioMVZ175945           ???????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+virgatipesMVZ175944       ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+okaloosae                 GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+clamitansJSF1118          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+heckscheriMVZ164908       GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaX12841          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaDMH84R2         GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+maculataKU195258          GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAGTGTA [...]
+vibicariaMVZ11035         GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+warszewitshiiJSF1127      GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACCAGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGGAAAGCAATGGGCTACAATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesVenAMNHA118801    ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesEcuKU204425       ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+bwanaQCAZ13964            ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+Sp_1_ecuadorQCAZ13219     ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAGTGTA [...]
+vaillantiKU195299         ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+julianiTNHC60324          ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sierramadrensisKU195181   GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+psilonotaKU195119         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+tarahumaraeKU194596       GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+zweifeliJAC7514           ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+pustulosaJAC10555         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAGTGTA [...]
+pipiensJSF1119            ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+pipiensY10945             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+dunniJSF1017              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+montezumaeJAC8836         GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_2_mex_JSF1106          GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1063     ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1092     GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+subaquavocalis            GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGCGTA [...]
+palustrisJSF1110          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+areolataJSF1111           GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sevosaUSC8236             GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+capitoSLU003              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+spectabilisJAC8622        GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+forreriJSF1065            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+tlalociJSF1083            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+berlandieriJSF1136        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+neovolcanicaJSF960        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+blairiJSF830              GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+omiltemanaJAC7413         ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+magnaocularisJSF1073      ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAATTGTA [...]
+yavapaiensisJSF1085       ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_7_JaliscoJSF1000       GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJAC10472       ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJSF7933        ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+taylori286                ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_4_Panama               ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_5_CostaRichDMH86_210   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_6_CostaRicaDMH86_225   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAGCGTA [...]
+sp_8_PueblaJAC9467        ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+oncaLVT3542               ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_3_MichoacanJSF955      GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sphenocephalaUSC7448      GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+utriculariaJSF845         GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
diff --git a/test/ExternalValidIn/phyliptree_simple.phy b/test/ExternalValidIn/phyliptree_simple.phy
new file mode 100644
index 0000000..e38c604
--- /dev/null
+++ b/test/ExternalValidIn/phyliptree_simple.phy
@@ -0,0 +1 @@
+(A,B,(C,D));
diff --git a/test/ExternalValidOut/.DS_Store b/test/ExternalValidOut/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/test/ExternalValidOut/.DS_Store differ
diff --git a/test/ExternalValidOut/aaaln_twoprot.aln b/test/ExternalValidOut/aaaln_twoprot.aln
new file mode 100644
index 0000000..aa43b00
--- /dev/null
+++ b/test/ExternalValidOut/aaaln_twoprot.aln
@@ -0,0 +1,16 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 2;
+    TAXLABELS 'FOSB_MOUSE' 'FOSB_HUMAN';
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=338;
+    FORMAT Datatype=Protein  Gap=-;
+Matrix
+'FOSB_MOUSE'   MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPAVDPYDMPGTSYSTPGLSAYSTGGASGSGGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTASLFTHSEVQVLGDPFPVVSPSYTSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL
+'FOSB_HUMAN'   MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPVVDPYDMPGTSYSTPGMSGYSSGGASGSGGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTASLFTHSEVQVLGDPFPVVNPSYTSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL
+;
+END;
diff --git a/test/ExternalValidOut/aaaln_twoprot_undec.aln b/test/ExternalValidOut/aaaln_twoprot_undec.aln
new file mode 100644
index 0000000..aa43b00
--- /dev/null
+++ b/test/ExternalValidOut/aaaln_twoprot_undec.aln
@@ -0,0 +1,16 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 2;
+    TAXLABELS 'FOSB_MOUSE' 'FOSB_HUMAN';
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=338;
+    FORMAT Datatype=Protein  Gap=-;
+Matrix
+'FOSB_MOUSE'   MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPAVDPYDMPGTSYSTPGLSAYSTGGASGSGGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTASLFTHSEVQVLGDPFPVVSPSYTSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL
+'FOSB_HUMAN'   MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPVVDPYDMPGTSYSTPGMSGYSSGGASGSGGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTASLFTHSEVQVLGDPFPVVNPSYTSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL
+;
+END;
diff --git a/test/ExternalValidOut/aafasta_twoprot.fas b/test/ExternalValidOut/aafasta_twoprot.fas
new file mode 100644
index 0000000..a0afde3
--- /dev/null
+++ b/test/ExternalValidOut/aafasta_twoprot.fas
@@ -0,0 +1,16 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 2;
+    TAXLABELS 'FOSB_MO USE' 'FOSB_HUMAN';
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=338;
+    FORMAT Datatype=Protein  Gap=-;
+Matrix
+'FOSB_MO USE'   MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPAVDPYDMPGTSYSTPGLSAYSTGGASGSGGPSTSTTTSGPVSARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSTSAKEDGFGWLLPPPPPPPLPFQSSRDAPPNLTASLFTHSEVQVLGDPFPVVSPSYTSSFVLTCPEVSAFAGAQRTSGSEQPSDPLNSPSLLAL
+'FOSB_HUMAN'    MFQAFPGDYDSGSRCSSSPSAESQYLSSVDSFGSPPTAAASQECAGLGEMPGSFVPTVTAITTSQDLQWLVQPTLISSMAQSQGQPLASQPPVVDPYDMPGTSYSTPGMSGYSSGGASGSGGPSTSGTTSGPGPARPARARPRRPREETLTPEEEEKRRVRRERNKLAAAKCRNRRRELTDRLQAETDQLEEEKAELESEIAELQKEKERLEFVLVAHKPGCKIPYEEGPGPGPLAEVRDLPGSAPAKEDGFSWLLPPPPPPPLPFQTSQDAPPNLTASLFTHSEVQVLGDPFPVVNPSYTSSFVLTCPEVSAFAGAQRTSGSDQPSDPLNSPSLLAL
+;
+END;
diff --git a/test/ExternalValidOut/aaphylip_emboss.phy b/test/ExternalValidOut/aaphylip_emboss.phy
new file mode 100644
index 0000000..de69564
--- /dev/null
+++ b/test/ExternalValidOut/aaphylip_emboss.phy
@@ -0,0 +1,18 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 4;
+    TAXLABELS 'IXI_234' 'IXI_235' 'IXI_236' 'IXI_237';
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=131;
+    FORMAT Datatype=Protein  Gap=-;
+Matrix
+'IXI_234'   TSPASIRPPAGPSSRPAMVSSRRTRPSPPGPRRPTGRPCCSAAPRRPQATGGWKTCSGTCTTSTSTRHRGRSGWSARTTTAACLRASRKSMRAACSRSAGSRPNRFAPTLMSSCITSTTGPPAWAGDRSHE
+'IXI_235'   TSPASIRPPAGPSSR---------RPSPPGPRRPTGRPCCSAAPRRPQATGGWKTCSGTCTTSTSTRHRGRSGW----------RASRKSMRAACSRSAGSRPNRFAPTLMSSCITSTTGPPAWAGDRSHE
+'IXI_236'   TSPASIRPPAGPSSRPAMVSSR--RPSPPPPRRPPGRPCCSAAPPRPQATGGWKTCSGTCTTSTSTRHRGRSGWSARTTTAACLRASRKSMRAACSR--GSRPPRFAPPLMSSCITSTTGPPPPAGDRSHE
+'IXI_237'   TSPASLRPPAGPSSRPAMVSSRR-RPSPPGPRRPT----CSAAPRRPQATGGYKTCSGTCTTSTSTRHRGRSGYSARTTTAACLRASRKSMRAACSR--GSRPNRFAPTLMSSCLTSTTGPPAYAGDRSHE
+;
+END;
diff --git a/test/ExternalValidOut/aaphylipinterleaved_emboss.phy b/test/ExternalValidOut/aaphylipinterleaved_emboss.phy
new file mode 100644
index 0000000..de69564
--- /dev/null
+++ b/test/ExternalValidOut/aaphylipinterleaved_emboss.phy
@@ -0,0 +1,18 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 4;
+    TAXLABELS 'IXI_234' 'IXI_235' 'IXI_236' 'IXI_237';
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=131;
+    FORMAT Datatype=Protein  Gap=-;
+Matrix
+'IXI_234'   TSPASIRPPAGPSSRPAMVSSRRTRPSPPGPRRPTGRPCCSAAPRRPQATGGWKTCSGTCTTSTSTRHRGRSGWSARTTTAACLRASRKSMRAACSRSAGSRPNRFAPTLMSSCITSTTGPPAWAGDRSHE
+'IXI_235'   TSPASIRPPAGPSSR---------RPSPPGPRRPTGRPCCSAAPRRPQATGGWKTCSGTCTTSTSTRHRGRSGW----------RASRKSMRAACSRSAGSRPNRFAPTLMSSCITSTTGPPAWAGDRSHE
+'IXI_236'   TSPASIRPPAGPSSRPAMVSSR--RPSPPPPRRPPGRPCCSAAPPRPQATGGWKTCSGTCTTSTSTRHRGRSGWSARTTTAACLRASRKSMRAACSR--GSRPPRFAPPLMSSCITSTTGPPPPAGDRSHE
+'IXI_237'   TSPASLRPPAGPSSRPAMVSSRR-RPSPPGPRRPT----CSAAPRRPQATGGYKTCSGTCTTSTSTRHRGRSGYSARTTTAACLRASRKSMRAACSR--GSRPNRFAPTLMSSCLTSTTGPPAYAGDRSHE
+;
+END;
diff --git a/test/ExternalValidOut/aarelaxedphylip_rana.phy b/test/ExternalValidOut/aarelaxedphylip_rana.phy
new file mode 100644
index 0000000..dadf66e
--- /dev/null
+++ b/test/ExternalValidOut/aarelaxedphylip_rana.phy
@@ -0,0 +1,78 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 64;
+    TAXLABELS temporariaDMH84R1 boyliiMVZ148929 'luteiventris_MT_MVZ191016' 'luteiventris_WA_MVZ225749' muscosaMVZ149006 auroraMVZ13957 cascadaeMVZ148946 sylvaticaMVZ137426 sylvaticaDMH84R43 septentrionalesDCC3588 grylioMVZ175945 virgatipesMVZ175944 okaloosae clamitansJSF1118 heckscheriMVZ164908 catesbianaX12841 catesbianaDMH84R2 maculataKU195258 vibicariaMVZ11035 warszewitshiiJSF1127 palmipesVenAMNHA118801 palmipesEcuKU204425 bwanaQCAZ13964 'Sp_1_ecuadorQCAZ13219' vaillantiKU195299 juli [...]
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=1976;
+    FORMAT Datatype=Protein  Gap=-;
+Matrix
+temporariaDMH84R1             QCCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAG [...]
+boyliiMVZ148929               GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+'luteiventris_MT_MVZ191016'   GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+'luteiventris_WA_MVZ225749'   GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+muscosaMVZ149006              GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+auroraMVZ13957                GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+cascadaeMVZ148946             GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sylvaticaMVZ137426            GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sylvaticaDMH84R43             GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAG [...]
+septentrionalesDCC3588        GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+grylioMVZ175945               ???????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+virgatipesMVZ175944           ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+okaloosae                     GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+clamitansJSF1118              GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+heckscheriMVZ164908           GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+catesbianaX12841              GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+catesbianaDMH84R2             GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+maculataKU195258              GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAG [...]
+vibicariaMVZ11035             GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+warszewitshiiJSF1127          GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACCAGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGGAAAGCAATGGGCTACAATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+palmipesVenAMNHA118801        ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+palmipesEcuKU204425           ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+bwanaQCAZ13964                ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+'Sp_1_ecuadorQCAZ13219'       ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAG [...]
+vaillantiKU195299             ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAG [...]
+julianiTNHC60324              ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sierramadrensisKU195181       GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+psilonotaKU195119             ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+tarahumaraeKU194596           GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+zweifeliJAC7514               ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+pustulosaJAC10555             ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAG [...]
+pipiensJSF1119                ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+pipiensY10945                 GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+dunniJSF1017                  GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+montezumaeJAC8836             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+'sp_2_mex_JSF1106'            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+chiricahuensisJSF1063         ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+chiricahuensisJSF1092         GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+subaquavocalis                GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+palustrisJSF1110              ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+areolataJSF1111               GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAG [...]
+sevosaUSC8236                 GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+capitoSLU003                  GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+spectabilisJAC8622            GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+forreriJSF1065                GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+tlalociJSF1083                GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+berlandieriJSF1136            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+neovolcanicaJSF960            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+blairiJSF830                  GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+omiltemanaJAC7413             ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+magnaocularisJSF1073          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAAT [...]
+yavapaiensisJSF1085           ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+'sp_7_JaliscoJSF1000'         GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAG [...]
+macroglossaJAC10472           ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+macroglossaJSF7933            ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+taylori286                    ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+'sp_4_Panama'                 ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+'sp_5_CostaRichDMH86_210'     ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAG [...]
+'sp_6_CostaRicaDMH86_225'     ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAG [...]
+'sp_8_PueblaJAC9467'          ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+oncaLVT3542                   ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+'sp_3_MichoacanJSF955'        GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+sphenocephalaUSC7448          GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+utriculariaJSF845             GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+;
+END;
diff --git a/test/ExternalValidOut/dnarelaxedphylip_brana.phy b/test/ExternalValidOut/dnarelaxedphylip_brana.phy
new file mode 100644
index 0000000..a954c29
--- /dev/null
+++ b/test/ExternalValidOut/dnarelaxedphylip_brana.phy
@@ -0,0 +1,78 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 64;
+    TAXLABELS temporariaDMH84R1 boyliiMVZ148929 'luteiventris_MT_MVZ191016' 'luteiventris_WA_MVZ225749' muscosaMVZ149006 auroraMVZ13957 cascadaeMVZ148946 sylvaticaMVZ137426 sylvaticaDMH84R43 septentrionalesDCC3588 grylioMVZ175945 virgatipesMVZ175944 okaloosae clamitansJSF1118 heckscheriMVZ164908 catesbianaX12841 catesbianaDMH84R2 maculataKU195258 vibicariaMVZ11035 warszewitshiiJSF1127 palmipesVenAMNHA118801 palmipesEcuKU204425 bwanaQCAZ13964 'Sp_1_ecuadorQCAZ13219' vaillantiKU195299 juli [...]
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=1976;
+    FORMAT Datatype=DNA  Gap=-;
+Matrix
+temporariaDMH84R1             GCCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAG [...]
+boyliiMVZ148929               GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+'luteiventris_MT_MVZ191016'   GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+'luteiventris_WA_MVZ225749'   GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+muscosaMVZ149006              GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+auroraMVZ13957                GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+cascadaeMVZ148946             GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sylvaticaMVZ137426            GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sylvaticaDMH84R43             GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAG [...]
+septentrionalesDCC3588        GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+grylioMVZ175945               ???????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+virgatipesMVZ175944           ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+okaloosae                     GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+clamitansJSF1118              GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+heckscheriMVZ164908           GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+catesbianaX12841              GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+catesbianaDMH84R2             GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+maculataKU195258              GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAG [...]
+vibicariaMVZ11035             GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+warszewitshiiJSF1127          GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACCAGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGGAAAGCAATGGGCTACAATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+palmipesVenAMNHA118801        ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+palmipesEcuKU204425           ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+bwanaQCAZ13964                ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+'Sp_1_ecuadorQCAZ13219'       ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAG [...]
+vaillantiKU195299             ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAG [...]
+julianiTNHC60324              ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sierramadrensisKU195181       GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+psilonotaKU195119             ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+tarahumaraeKU194596           GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+zweifeliJAC7514               ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+pustulosaJAC10555             ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAG [...]
+pipiensJSF1119                ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+pipiensY10945                 GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+dunniJSF1017                  GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+montezumaeJAC8836             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+'sp_2_mex_JSF1106'            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+chiricahuensisJSF1063         ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+chiricahuensisJSF1092         GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+subaquavocalis                GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+palustrisJSF1110              ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+areolataJSF1111               GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAG [...]
+sevosaUSC8236                 GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+capitoSLU003                  GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+spectabilisJAC8622            GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+forreriJSF1065                GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+tlalociJSF1083                GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+berlandieriJSF1136            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+neovolcanicaJSF960            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+blairiJSF830                  GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+omiltemanaJAC7413             ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+magnaocularisJSF1073          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAAT [...]
+yavapaiensisJSF1085           ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+'sp_7_JaliscoJSF1000'         GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAG [...]
+macroglossaJAC10472           ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+macroglossaJSF7933            ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+taylori286                    ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+'sp_4_Panama'                 ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+'sp_5_CostaRichDMH86_210'     ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAG [...]
+'sp_6_CostaRicaDMH86_225'     ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAG [...]
+'sp_8_PueblaJAC9467'          ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+oncaLVT3542                   ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+'sp_3_MichoacanJSF955'        GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+sphenocephalaUSC7448          GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+utriculariaJSF845             GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+;
+END;
diff --git a/test/ExternalValidOut/dnarelaxedphylip_rana.phy b/test/ExternalValidOut/dnarelaxedphylip_rana.phy
new file mode 100644
index 0000000..a954c29
--- /dev/null
+++ b/test/ExternalValidOut/dnarelaxedphylip_rana.phy
@@ -0,0 +1,78 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 64;
+    TAXLABELS temporariaDMH84R1 boyliiMVZ148929 'luteiventris_MT_MVZ191016' 'luteiventris_WA_MVZ225749' muscosaMVZ149006 auroraMVZ13957 cascadaeMVZ148946 sylvaticaMVZ137426 sylvaticaDMH84R43 septentrionalesDCC3588 grylioMVZ175945 virgatipesMVZ175944 okaloosae clamitansJSF1118 heckscheriMVZ164908 catesbianaX12841 catesbianaDMH84R2 maculataKU195258 vibicariaMVZ11035 warszewitshiiJSF1127 palmipesVenAMNHA118801 palmipesEcuKU204425 bwanaQCAZ13964 'Sp_1_ecuadorQCAZ13219' vaillantiKU195299 juli [...]
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=1976;
+    FORMAT Datatype=DNA  Gap=-;
+Matrix
+temporariaDMH84R1             GCCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAG [...]
+boyliiMVZ148929               GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+'luteiventris_MT_MVZ191016'   GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+'luteiventris_WA_MVZ225749'   GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+muscosaMVZ149006              GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+auroraMVZ13957                GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+cascadaeMVZ148946             GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sylvaticaMVZ137426            GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sylvaticaDMH84R43             GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAG [...]
+septentrionalesDCC3588        GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+grylioMVZ175945               ???????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+virgatipesMVZ175944           ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+okaloosae                     GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+clamitansJSF1118              GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+heckscheriMVZ164908           GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+catesbianaX12841              GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+catesbianaDMH84R2             GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+maculataKU195258              GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAG [...]
+vibicariaMVZ11035             GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+warszewitshiiJSF1127          GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACCAGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGGAAAGCAATGGGCTACAATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+palmipesVenAMNHA118801        ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+palmipesEcuKU204425           ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+bwanaQCAZ13964                ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+'Sp_1_ecuadorQCAZ13219'       ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAG [...]
+vaillantiKU195299             ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAG [...]
+julianiTNHC60324              ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAG [...]
+sierramadrensisKU195181       GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+psilonotaKU195119             ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+tarahumaraeKU194596           GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+zweifeliJAC7514               ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAG [...]
+pustulosaJAC10555             ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAG [...]
+pipiensJSF1119                ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+pipiensY10945                 GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+dunniJSF1017                  GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+montezumaeJAC8836             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+'sp_2_mex_JSF1106'            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+chiricahuensisJSF1063         ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+chiricahuensisJSF1092         GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+subaquavocalis                GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+palustrisJSF1110              ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+areolataJSF1111               GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAG [...]
+sevosaUSC8236                 GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+capitoSLU003                  GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+spectabilisJAC8622            GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+forreriJSF1065                GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAG [...]
+tlalociJSF1083                GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+berlandieriJSF1136            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+neovolcanicaJSF960            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+blairiJSF830                  GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+omiltemanaJAC7413             ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+magnaocularisJSF1073          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAAT [...]
+yavapaiensisJSF1085           ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+'sp_7_JaliscoJSF1000'         GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAG [...]
+macroglossaJAC10472           ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAG [...]
+macroglossaJSF7933            ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+taylori286                    ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAG [...]
+'sp_4_Panama'                 ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+'sp_5_CostaRichDMH86_210'     ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAG [...]
+'sp_6_CostaRicaDMH86_225'     ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAG [...]
+'sp_8_PueblaJAC9467'          ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+oncaLVT3542                   ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+'sp_3_MichoacanJSF955'        GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+sphenocephalaUSC7448          GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+utriculariaJSF845             GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAG [...]
+;
+END;
diff --git a/test/ExternalValidOut/phyliptree_simple.phy b/test/ExternalValidOut/phyliptree_simple.phy
new file mode 100644
index 0000000..9818417
--- /dev/null
+++ b/test/ExternalValidOut/phyliptree_simple.phy
@@ -0,0 +1,16 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 4;
+    TAXLABELS A B C D;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 A,
+        2 B,
+        3 C,
+        4 D;
+    TREE UnnamedTree = [&U](1,2,(3,4));
+END;
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
index 0000000..025b7ab
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,373 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# test/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+pkgdatadir = $(datadir)/ncl
+pkgincludedir = $(includedir)/ncl
+pkglibdir = $(libdir)/ncl
+pkglibexecdir = $(libexecdir)/ncl
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = x86_64-apple-darwin10.8.0
+host_triplet = x86_64-apple-darwin10.8.0
+subdir = test
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/config/missing --run aclocal-1.11
+AMTAR = ${SHELL} /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/config/missing --run tar
+AR = ar
+AUTOCONF = ${SHELL} /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/config/missing --run autoconf
+AUTOHEADER = ${SHELL} /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/config/missing --run autoheader
+AUTOMAKE = ${SHELL} /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/config/missing --run automake-1.11
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPP = gcc -E
+CPPFLAGS = -I$(top_srcdir) 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS =  -O3 -ffast-math 
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = dsymutil
+DUMPBIN = 
+ECHO_C = \c
+ECHO_N = 
+ECHO_T = 
+EGREP = /usr/bin/grep -E
+EXEEXT = 
+FGREP = /usr/bin/grep -F
+GREP = /usr/bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LD = /usr/libexec/gcc/i686-apple-darwin10/4.2.1/ld
+LDFLAGS = 
+LIBOBJS =  ${LIBOBJDIR}mktime$U.o
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = lipo
+LN_S = ln -s
+LTLIBOBJS =  ${LIBOBJDIR}mktime$U.lo
+MAKEINFO = ${SHELL} /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/config/missing --run makeinfo
+MANIFEST_TOOL = :
+MAYBE_SWIG_DIR = 
+MAYBE_TEST_DIR = test
+MKDIR_P = ../config/install-sh -c -d
+NM = /usr/bin/nm
+NMEDIT = nmedit
+OBJDUMP = false
+OBJEXT = o
+OTOOL = otool
+OTOOL64 = :
+PACKAGE = ncl
+PACKAGE_BUGREPORT = mtholder at gmail.com
+PACKAGE_NAME = NCL
+PACKAGE_STRING = NCL 2.1.18
+PACKAGE_TARNAME = ncl
+PACKAGE_URL = 
+PACKAGE_VERSION = 2.1.18
+PATH_SEPARATOR = :
+POW_LIB = 
+PYTHON = /Library/Frameworks/Python.framework/Versions/2.7/bin/python
+RANLIB = ranlib
+SED = /Users/mholder/bin/sed
+SET_MAKE = 
+SHELL = /bin/sh
+STRIP = strip
+VERSION = 2.1.18
+abs_builddir = /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/test
+abs_srcdir = /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/test
+abs_top_builddir = /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1
+abs_top_srcdir = /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = tar --format=ustar -chf - "$$tardir"
+am__untar = tar -xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-apple-darwin10.8.0
+build_alias = 
+build_cpu = x86_64
+build_os = darwin10.8.0
+build_vendor = apple
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-apple-darwin10.8.0
+host_alias = 
+host_cpu = x86_64
+host_os = darwin10.8.0
+host_vendor = apple
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /Users/mholder/Documents/projects/ncl/working/ncl/branches/v2.1/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(top_builddir)/config/install-sh -c -d
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am: installcheck-local
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installcheck-local installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am
+
+installcheck-local:
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -x $(bindir)/NEXUSnormalizer $(srcdir)/funkyValidIn $(srcdir)/funkyValidOut
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -e $(bindir)/NEXUSnormalizer $(srcdir)/ExternalValidIn $(srcdir)/ExternalValidOut
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -i -e $(bindir)/NEXUSnormalizer $(srcdir)/ExternalInvalidIn
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -a $(bindir)/NEXUSnormalizer
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(top_srcdir)/data/characters.nex $(srcdir)/data
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(top_srcdir)/data/sample.tre $(srcdir)/data
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(srcdir)/NTSValidIn $(srcdir)/NTSValidOut
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..f9f3542
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,8 @@
+installcheck-local:
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -x $(bindir)/NEXUSnormalizer $(srcdir)/funkyValidIn $(srcdir)/funkyValidOut
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -e $(bindir)/NEXUSnormalizer $(srcdir)/ExternalValidIn $(srcdir)/ExternalValidOut
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -i -e $(bindir)/NEXUSnormalizer $(srcdir)/ExternalInvalidIn
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -a $(bindir)/NEXUSnormalizer
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(top_srcdir)/data/characters.nex $(srcdir)/data
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(top_srcdir)/data/sample.tre $(srcdir)/data
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(srcdir)/NTSValidIn $(srcdir)/NTSValidOut
diff --git a/test/Makefile.in b/test/Makefile.in
new file mode 100644
index 0000000..7b6c25f
--- /dev/null
+++ b/test/Makefile.in
@@ -0,0 +1,373 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = test
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/config/ax_cxx_flags.m4 \
+	$(top_srcdir)/config/ax_python_module.m4 \
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAYBE_SWIG_DIR = @MAYBE_SWIG_DIR@
+MAYBE_TEST_DIR = @MAYBE_TEST_DIR@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POW_LIB = @POW_LIB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am: installcheck-local
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installcheck-local installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am
+
+installcheck-local:
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -x $(bindir)/NEXUSnormalizer $(srcdir)/funkyValidIn $(srcdir)/funkyValidOut
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -e $(bindir)/NEXUSnormalizer $(srcdir)/ExternalValidIn $(srcdir)/ExternalValidOut
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -i -e $(bindir)/NEXUSnormalizer $(srcdir)/ExternalInvalidIn
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py -a $(bindir)/NEXUSnormalizer
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(top_srcdir)/data/characters.nex $(srcdir)/data
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(top_srcdir)/data/sample.tre $(srcdir)/data
+	$(PYTHON) $(srcdir)/roundTripNCLTest.py $(bindir)/NEXUSnormalizer $(srcdir)/NTSValidIn $(srcdir)/NTSValidOut
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/NCLtreeBork/choke.tre b/test/NCLtreeBork/choke.tre
new file mode 100755
index 0000000..58b0fa4
--- /dev/null
+++ b/test/NCLtreeBork/choke.tre
@@ -0,0 +1,20 @@
+#NEXUS
+
+Begin trees;  [Treefile saved Thu Apr 01 14:20:40 CDT 2010]
+
+TREE rana_1 = [&R] [&C] ((((((((((CATESBIANADMH84R2:0.009341165670082321,CATESBIANAX12841:0.01670237442008101)1:0.02367784808488773[C=100%],HECKSCHERIMVZ164908:0.024302372055508326)2:0.0045459049779782825[C=70%],(CLAMITANSJSF1118:0.008264805550320975,OKALOOSAE:0.013235191158770237)3:0.008940535544490303[C=100%])4:0.021977070375380405[C=70%],(VIRGATIPESMVZ175944:0.04284830362694966,GRYLIOMVZ175945:0.06812934384157285)5:0.0019862651579835846[C=50%])6:0.0047254144276442055[C=50%],SEPTENTRIO [...]
+
+TREE rana = [&R] (OMILTEMANAJAC7413:0.05279027864290483,(SPECTABILISJAC8622:0.0424908377160199,(((TAYLORI286:0.05527269668494973,(MACROGLOSSAJSF7933:0.0062059300734275055,MACROGLOSSAJAC10472:0.010411319563575425)27:0.012469909096599542)5:0.012729555474823276,(SP_6_COSTARICADMH86_225:0.03107514027636416,(SP_5_COSTARICHDMH86_210:0.03495106213249873,SP_4_PANAMA:0.01414117337827914)34:0.005328810766310077)13:0.005532291072882051)42:0.006856109288283811,(((YAVAPAIENSISJSF1085:0.00652843973685 [...]
+
+[
+TREE rana = [&R] ((SP_4_PANAMA:0.021127779032296068,SP_5_COSTARICHDMH86_210:0.022179351531428602)13:1.0854920792310768E-4,((TAYLORI286:0.04890892173169566,(MACROGLOSSAJAC10472:0.010411319563575425,MACROGLOSSAJSF7933:0.011343727813813716)27:0.02570333862385187)26:0.003258001821749584,((FORRERIJSF1065:0.10230082201206815,((((SP_7_JALISCOJSF1000:0.05607791005990694,MAGNAOCULARISJSF1073:0.07567418994895206)2:0.006880489759192406,SP_8_PUEBLAJAC9467:0.0809317898280862)3:0.006508183319762974,(O [...]
+TREE rana = [&R] (SP_3_MICHOACANJSF955:0.028225397487292143,((SPECTABILISJAC8622:0.025289215188198287,(((FORRERIJSF1065:0.06734392551515846,((ONCALVT3542:0.010384842762018788,YAVAPAIENSISJSF1085:0.007749513009770538)1:0.009770475957002369,(SP_8_PUEBLAJAC9467:0.057412822306649985,(MAGNAOCULARISJSF1073:0.07462886276625352,SP_7_JALISCOJSF1000:0.06845668809712956)61:0.0046794878834765284)55:0.0046794878834765284)13:0.0031165705381667333)7:0.0031165705381667333,((PALUSTRISJSF1110:0.0194341044 [...]
+TREE rana [Rep_1] = [&R] ((BERLANDIERIJSF1136:0.017500204493313444,(NEOVOLCANICAJSF960:0.02103384061586339,TLALOCIJSF1083:0.005917459420145915)19:0.004052885775416705)20:0.007264904375006403,BLAIRIJSF830:0.009215174812490496,((SPHENOCEPHALAUSC7448:0.02080129435038587,UTRICULARIAJSF845:0.019663378430420188)1:0.011573117328478197,(SP_3_MICHOACANJSF955:0.02785686223631827,(OMILTEMANAJAC7413:0.08604274498575198,(SPECTABILISJAC8622:0.025289215188198287,((((YAVAPAIENSISJSF1085:0.00774951300977 [...]
+TREE rana [Rep_1] = [&R] (OMILTEMANAJAC7413:0.04940105797267924,(SPECTABILISJAC8622:0.025289215188198287,(((TAYLORI286:0.04890892173169566,(MACROGLOSSAJSF7933:0.011343727813813716,MACROGLOSSAJAC10472:0.010411319563575425)27:0.02570333862385187)5:0.003258001821749584,(SP_6_COSTARICADMH86_225:0.018542035718163527,(SP_4_PANAMA:0.02823698743155236,SP_5_COSTARICHDMH86_210:0.019178988101033363)34:0.009283183268353907)13:0.009589494050516682)42:0.004617483270304025,(((YAVAPAIENSISJSF1085:0.0077 [...]
+TREE rana [Rep_2] = [&R] (SP_8_PUEBLAJAC9467:0.05396664314854472,((((FORRERIJSF1065:0.05207894469535345,(((((MONTEZUMAEJAC8836:0.015308978041958238,DUNNIJSF1017:0.00969409710919037)7:0.015986330072827282,(SP_2_MEX_JSF1106:0.01969017517595023,(CHIRICAHUENSISJSF1092:0.010058301855385834,(CHIRICAHUENSISJSF1063:0.019433250804891302,SUBAQUAVOCALIS:0.007874436839582012)15:0.0010647538365773416)32:0.009842965719445386)30:0.0057172046230801205)20:0.023588000956833194,(PIPIENSY10945:0.00200292616 [...]
+TREE rana [Rep_2] = [&R] (SP_8_PUEBLAJAC9467:0.05160648914186107,((((FORRERIJSF1065:0.03443311716795429,(((((MONTEZUMAEJAC8836:0.018867383543759563,DUNNIJSF1017:0.02039490832759985)7:0.01801400921787201,(SP_2_MEX_JSF1106:0.03905244398257162,(CHIRICAHUENSISJSF1092:0.01786991616244638,(CHIRICAHUENSISJSF1063:0.023337398877442052,SUBAQUAVOCALIS:0.011175066000873332)15:0.005416486849212688)32:0.03384849743661879)30:0.007705550966073891)20:0.01019450679885723,(PIPIENSJSF1119:0.0078907347873196 [...]
+TREE rana [Rep_2] = [&R] ((SEPTENTRIONALESDCC3588:0.03203917323623255,((VIRGATIPESMVZ175944:0.050044969454344564,GRYLIOMVZ175945:0.07180503150589201)58:0.0012713761570590015,((HECKSCHERIMVZ164908:0.03273052459572119,(CATESBIANADMH84R2:0.01575134279964524,CATESBIANAX12841:0.02257656404265604)29:0.022971056898255144)55:0.005454613220996143,(CLAMITANSJSF1118:0.004470889400142231,OKALOOSAE:0.02437316748799989)48:0.008252440673483071)34:0.04203566926385222)16:0.007163599313917946)6:0.04259932 [...]
+TREE rana [Rep_2] = [&R] (((((SP_8_PUEBLAJAC9467:0.05160648914186107,(SP_7_JALISCOJSF1000:0.03920568489003077,MAGNAOCULARISJSF1073:0.09268135751752579)7:0.0023548520313426426)8:0.002275882370671741,(YAVAPAIENSISJSF1085:0.003277853601627391,ONCALVT3542:0.014456578245332273)43:0.011055904861201789)23:0.011072921188068241,(((SPECTABILISJAC8622:0.0697693437743549,((BLAIRIJSF830:0.010976487081875224,(BERLANDIERIJSF1136:0.01883219572437796,(NEOVOLCANICAJSF960:0.008991492730455611,TLALOCIJSF108 [...]
+TREE rana [Rep_2] = [&R] ((FORRERIJSF1065:0.05002414039045353,((PALUSTRISJSF1110:0.014444548785213724,(AREOLATAJSF1111:0.03274909623968698,(SEVOSAUSC8236:0.024604518182285703,CAPITOSLU003:0.02013177689769946)34:0.015323546707373775)1:0.014444548785213724)6:0.0015280953062097877,(((((MACULATAKU195258:0.03707871677848206,(WARSZEWITSHIIJSF1127:0.09393841368752218,VIBICARIAMVZ11035:0.19242016149693641)49:0.06752155695329196)32:0.03707871677848206,(((PALMIPESECUKU204425:0.0252065630079048,SP_ [...]
+]
+End;
diff --git a/test/NCLtreeBork/nextest.sh b/test/NCLtreeBork/nextest.sh
new file mode 100755
index 0000000..2365c02
--- /dev/null
+++ b/test/NCLtreeBork/nextest.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+VAL=/Users/zwickl/Desktop/GarliDEV/ncl/ncl-2.1/builds/gccNoDynamic/installed/bin/NEXUSvalidator  
+echo "########################################"
+echo OK1
+$VAL ok1.tre
+echo "########################################"
+echo OK2
+$VAL ok2.tre
+echo "########################################"
+echo BORK
+$VAL choke.tre
+echo "########################################"
diff --git a/test/NCLtreeBork/ok1.tre b/test/NCLtreeBork/ok1.tre
new file mode 100755
index 0000000..f5043ce
--- /dev/null
+++ b/test/NCLtreeBork/ok1.tre
@@ -0,0 +1,20 @@
+#NEXUS
+
+Begin trees;  [Treefile saved Thu Apr 01 14:20:40 CDT 2010]
+
+TREE rana_1 = [&R] [&C] ((((((((((CATESBIANADMH84R2:0.009341165670082321,CATESBIANAX12841:0.01670237442008101)1:0.02367784808488773[C=100%],HECKSCHERIMVZ164908:0.024302372055508326)2:0.0045459049779782825[C=70%],(CLAMITANSJSF1118:0.008264805550320975,OKALOOSAE:0.013235191158770237)3:0.008940535544490303[C=100%])4:0.021977070375380405[C=70%],(VIRGATIPESMVZ175944:0.04284830362694966,GRYLIOMVZ175945:0.06812934384157285)5:0.0019862651579835846[C=50%])6:0.0047254144276442055[C=50%],SEPTENTRIO [...]
+[
+TREE rana = [&R] (OMILTEMANAJAC7413:0.05279027864290483,(SPECTABILISJAC8622:0.0424908377160199,(((TAYLORI286:0.05527269668494973,(MACROGLOSSAJSF7933:0.0062059300734275055,MACROGLOSSAJAC10472:0.010411319563575425)27:0.012469909096599542)5:0.012729555474823276,(SP_6_COSTARICADMH86_225:0.03107514027636416,(SP_5_COSTARICHDMH86_210:0.03495106213249873,SP_4_PANAMA:0.01414117337827914)34:0.005328810766310077)13:0.005532291072882051)42:0.006856109288283811,(((YAVAPAIENSISJSF1085:0.00652843973685 [...]
+]
+[
+TREE rana = [&R] ((SP_4_PANAMA:0.021127779032296068,SP_5_COSTARICHDMH86_210:0.022179351531428602)13:1.0854920792310768E-4,((TAYLORI286:0.04890892173169566,(MACROGLOSSAJAC10472:0.010411319563575425,MACROGLOSSAJSF7933:0.011343727813813716)27:0.02570333862385187)26:0.003258001821749584,((FORRERIJSF1065:0.10230082201206815,((((SP_7_JALISCOJSF1000:0.05607791005990694,MAGNAOCULARISJSF1073:0.07567418994895206)2:0.006880489759192406,SP_8_PUEBLAJAC9467:0.0809317898280862)3:0.006508183319762974,(O [...]
+TREE rana = [&R] (SP_3_MICHOACANJSF955:0.028225397487292143,((SPECTABILISJAC8622:0.025289215188198287,(((FORRERIJSF1065:0.06734392551515846,((ONCALVT3542:0.010384842762018788,YAVAPAIENSISJSF1085:0.007749513009770538)1:0.009770475957002369,(SP_8_PUEBLAJAC9467:0.057412822306649985,(MAGNAOCULARISJSF1073:0.07462886276625352,SP_7_JALISCOJSF1000:0.06845668809712956)61:0.0046794878834765284)55:0.0046794878834765284)13:0.0031165705381667333)7:0.0031165705381667333,((PALUSTRISJSF1110:0.0194341044 [...]
+TREE rana [Rep_1] = [&R] ((BERLANDIERIJSF1136:0.017500204493313444,(NEOVOLCANICAJSF960:0.02103384061586339,TLALOCIJSF1083:0.005917459420145915)19:0.004052885775416705)20:0.007264904375006403,BLAIRIJSF830:0.009215174812490496,((SPHENOCEPHALAUSC7448:0.02080129435038587,UTRICULARIAJSF845:0.019663378430420188)1:0.011573117328478197,(SP_3_MICHOACANJSF955:0.02785686223631827,(OMILTEMANAJAC7413:0.08604274498575198,(SPECTABILISJAC8622:0.025289215188198287,((((YAVAPAIENSISJSF1085:0.00774951300977 [...]
+TREE rana [Rep_1] = [&R] (OMILTEMANAJAC7413:0.04940105797267924,(SPECTABILISJAC8622:0.025289215188198287,(((TAYLORI286:0.04890892173169566,(MACROGLOSSAJSF7933:0.011343727813813716,MACROGLOSSAJAC10472:0.010411319563575425)27:0.02570333862385187)5:0.003258001821749584,(SP_6_COSTARICADMH86_225:0.018542035718163527,(SP_4_PANAMA:0.02823698743155236,SP_5_COSTARICHDMH86_210:0.019178988101033363)34:0.009283183268353907)13:0.009589494050516682)42:0.004617483270304025,(((YAVAPAIENSISJSF1085:0.0077 [...]
+TREE rana [Rep_2] = [&R] (SP_8_PUEBLAJAC9467:0.05396664314854472,((((FORRERIJSF1065:0.05207894469535345,(((((MONTEZUMAEJAC8836:0.015308978041958238,DUNNIJSF1017:0.00969409710919037)7:0.015986330072827282,(SP_2_MEX_JSF1106:0.01969017517595023,(CHIRICAHUENSISJSF1092:0.010058301855385834,(CHIRICAHUENSISJSF1063:0.019433250804891302,SUBAQUAVOCALIS:0.007874436839582012)15:0.0010647538365773416)32:0.009842965719445386)30:0.0057172046230801205)20:0.023588000956833194,(PIPIENSY10945:0.00200292616 [...]
+TREE rana [Rep_2] = [&R] (SP_8_PUEBLAJAC9467:0.05160648914186107,((((FORRERIJSF1065:0.03443311716795429,(((((MONTEZUMAEJAC8836:0.018867383543759563,DUNNIJSF1017:0.02039490832759985)7:0.01801400921787201,(SP_2_MEX_JSF1106:0.03905244398257162,(CHIRICAHUENSISJSF1092:0.01786991616244638,(CHIRICAHUENSISJSF1063:0.023337398877442052,SUBAQUAVOCALIS:0.011175066000873332)15:0.005416486849212688)32:0.03384849743661879)30:0.007705550966073891)20:0.01019450679885723,(PIPIENSJSF1119:0.0078907347873196 [...]
+TREE rana [Rep_2] = [&R] ((SEPTENTRIONALESDCC3588:0.03203917323623255,((VIRGATIPESMVZ175944:0.050044969454344564,GRYLIOMVZ175945:0.07180503150589201)58:0.0012713761570590015,((HECKSCHERIMVZ164908:0.03273052459572119,(CATESBIANADMH84R2:0.01575134279964524,CATESBIANAX12841:0.02257656404265604)29:0.022971056898255144)55:0.005454613220996143,(CLAMITANSJSF1118:0.004470889400142231,OKALOOSAE:0.02437316748799989)48:0.008252440673483071)34:0.04203566926385222)16:0.007163599313917946)6:0.04259932 [...]
+TREE rana [Rep_2] = [&R] (((((SP_8_PUEBLAJAC9467:0.05160648914186107,(SP_7_JALISCOJSF1000:0.03920568489003077,MAGNAOCULARISJSF1073:0.09268135751752579)7:0.0023548520313426426)8:0.002275882370671741,(YAVAPAIENSISJSF1085:0.003277853601627391,ONCALVT3542:0.014456578245332273)43:0.011055904861201789)23:0.011072921188068241,(((SPECTABILISJAC8622:0.0697693437743549,((BLAIRIJSF830:0.010976487081875224,(BERLANDIERIJSF1136:0.01883219572437796,(NEOVOLCANICAJSF960:0.008991492730455611,TLALOCIJSF108 [...]
+TREE rana [Rep_2] = [&R] ((FORRERIJSF1065:0.05002414039045353,((PALUSTRISJSF1110:0.014444548785213724,(AREOLATAJSF1111:0.03274909623968698,(SEVOSAUSC8236:0.024604518182285703,CAPITOSLU003:0.02013177689769946)34:0.015323546707373775)1:0.014444548785213724)6:0.0015280953062097877,(((((MACULATAKU195258:0.03707871677848206,(WARSZEWITSHIIJSF1127:0.09393841368752218,VIBICARIAMVZ11035:0.19242016149693641)49:0.06752155695329196)32:0.03707871677848206,(((PALMIPESECUKU204425:0.0252065630079048,SP_ [...]
+]
+End;
diff --git a/test/NCLtreeBork/ok2.tre b/test/NCLtreeBork/ok2.tre
new file mode 100755
index 0000000..c9d93f4
--- /dev/null
+++ b/test/NCLtreeBork/ok2.tre
@@ -0,0 +1,20 @@
+#NEXUS
+
+Begin trees;  [Treefile saved Thu Apr 01 14:20:40 CDT 2010]
+[
+TREE rana_1 = [&R] [&C] ((((((((((CATESBIANADMH84R2:0.009341165670082321,CATESBIANAX12841:0.01670237442008101)1:0.02367784808488773[C=100%],HECKSCHERIMVZ164908:0.024302372055508326)2:0.0045459049779782825[C=70%],(CLAMITANSJSF1118:0.008264805550320975,OKALOOSAE:0.013235191158770237)3:0.008940535544490303[C=100%])4:0.021977070375380405[C=70%],(VIRGATIPESMVZ175944:0.04284830362694966,GRYLIOMVZ175945:0.06812934384157285)5:0.0019862651579835846[C=50%])6:0.0047254144276442055[C=50%],SEPTENTRIO [...]
+]
+TREE rana = [&R] (OMILTEMANAJAC7413:0.05279027864290483,(SPECTABILISJAC8622:0.0424908377160199,(((TAYLORI286:0.05527269668494973,(MACROGLOSSAJSF7933:0.0062059300734275055,MACROGLOSSAJAC10472:0.010411319563575425)27:0.012469909096599542)5:0.012729555474823276,(SP_6_COSTARICADMH86_225:0.03107514027636416,(SP_5_COSTARICHDMH86_210:0.03495106213249873,SP_4_PANAMA:0.01414117337827914)34:0.005328810766310077)13:0.005532291072882051)42:0.006856109288283811,(((YAVAPAIENSISJSF1085:0.00652843973685 [...]
+
+[
+TREE rana = [&R] ((SP_4_PANAMA:0.021127779032296068,SP_5_COSTARICHDMH86_210:0.022179351531428602)13:1.0854920792310768E-4,((TAYLORI286:0.04890892173169566,(MACROGLOSSAJAC10472:0.010411319563575425,MACROGLOSSAJSF7933:0.011343727813813716)27:0.02570333862385187)26:0.003258001821749584,((FORRERIJSF1065:0.10230082201206815,((((SP_7_JALISCOJSF1000:0.05607791005990694,MAGNAOCULARISJSF1073:0.07567418994895206)2:0.006880489759192406,SP_8_PUEBLAJAC9467:0.0809317898280862)3:0.006508183319762974,(O [...]
+TREE rana = [&R] (SP_3_MICHOACANJSF955:0.028225397487292143,((SPECTABILISJAC8622:0.025289215188198287,(((FORRERIJSF1065:0.06734392551515846,((ONCALVT3542:0.010384842762018788,YAVAPAIENSISJSF1085:0.007749513009770538)1:0.009770475957002369,(SP_8_PUEBLAJAC9467:0.057412822306649985,(MAGNAOCULARISJSF1073:0.07462886276625352,SP_7_JALISCOJSF1000:0.06845668809712956)61:0.0046794878834765284)55:0.0046794878834765284)13:0.0031165705381667333)7:0.0031165705381667333,((PALUSTRISJSF1110:0.0194341044 [...]
+TREE rana [Rep_1] = [&R] ((BERLANDIERIJSF1136:0.017500204493313444,(NEOVOLCANICAJSF960:0.02103384061586339,TLALOCIJSF1083:0.005917459420145915)19:0.004052885775416705)20:0.007264904375006403,BLAIRIJSF830:0.009215174812490496,((SPHENOCEPHALAUSC7448:0.02080129435038587,UTRICULARIAJSF845:0.019663378430420188)1:0.011573117328478197,(SP_3_MICHOACANJSF955:0.02785686223631827,(OMILTEMANAJAC7413:0.08604274498575198,(SPECTABILISJAC8622:0.025289215188198287,((((YAVAPAIENSISJSF1085:0.00774951300977 [...]
+TREE rana [Rep_1] = [&R] (OMILTEMANAJAC7413:0.04940105797267924,(SPECTABILISJAC8622:0.025289215188198287,(((TAYLORI286:0.04890892173169566,(MACROGLOSSAJSF7933:0.011343727813813716,MACROGLOSSAJAC10472:0.010411319563575425)27:0.02570333862385187)5:0.003258001821749584,(SP_6_COSTARICADMH86_225:0.018542035718163527,(SP_4_PANAMA:0.02823698743155236,SP_5_COSTARICHDMH86_210:0.019178988101033363)34:0.009283183268353907)13:0.009589494050516682)42:0.004617483270304025,(((YAVAPAIENSISJSF1085:0.0077 [...]
+TREE rana [Rep_2] = [&R] (SP_8_PUEBLAJAC9467:0.05396664314854472,((((FORRERIJSF1065:0.05207894469535345,(((((MONTEZUMAEJAC8836:0.015308978041958238,DUNNIJSF1017:0.00969409710919037)7:0.015986330072827282,(SP_2_MEX_JSF1106:0.01969017517595023,(CHIRICAHUENSISJSF1092:0.010058301855385834,(CHIRICAHUENSISJSF1063:0.019433250804891302,SUBAQUAVOCALIS:0.007874436839582012)15:0.0010647538365773416)32:0.009842965719445386)30:0.0057172046230801205)20:0.023588000956833194,(PIPIENSY10945:0.00200292616 [...]
+TREE rana [Rep_2] = [&R] (SP_8_PUEBLAJAC9467:0.05160648914186107,((((FORRERIJSF1065:0.03443311716795429,(((((MONTEZUMAEJAC8836:0.018867383543759563,DUNNIJSF1017:0.02039490832759985)7:0.01801400921787201,(SP_2_MEX_JSF1106:0.03905244398257162,(CHIRICAHUENSISJSF1092:0.01786991616244638,(CHIRICAHUENSISJSF1063:0.023337398877442052,SUBAQUAVOCALIS:0.011175066000873332)15:0.005416486849212688)32:0.03384849743661879)30:0.007705550966073891)20:0.01019450679885723,(PIPIENSJSF1119:0.0078907347873196 [...]
+TREE rana [Rep_2] = [&R] ((SEPTENTRIONALESDCC3588:0.03203917323623255,((VIRGATIPESMVZ175944:0.050044969454344564,GRYLIOMVZ175945:0.07180503150589201)58:0.0012713761570590015,((HECKSCHERIMVZ164908:0.03273052459572119,(CATESBIANADMH84R2:0.01575134279964524,CATESBIANAX12841:0.02257656404265604)29:0.022971056898255144)55:0.005454613220996143,(CLAMITANSJSF1118:0.004470889400142231,OKALOOSAE:0.02437316748799989)48:0.008252440673483071)34:0.04203566926385222)16:0.007163599313917946)6:0.04259932 [...]
+TREE rana [Rep_2] = [&R] (((((SP_8_PUEBLAJAC9467:0.05160648914186107,(SP_7_JALISCOJSF1000:0.03920568489003077,MAGNAOCULARISJSF1073:0.09268135751752579)7:0.0023548520313426426)8:0.002275882370671741,(YAVAPAIENSISJSF1085:0.003277853601627391,ONCALVT3542:0.014456578245332273)43:0.011055904861201789)23:0.011072921188068241,(((SPECTABILISJAC8622:0.0697693437743549,((BLAIRIJSF830:0.010976487081875224,(BERLANDIERIJSF1136:0.01883219572437796,(NEOVOLCANICAJSF960:0.008991492730455611,TLALOCIJSF108 [...]
+TREE rana [Rep_2] = [&R] ((FORRERIJSF1065:0.05002414039045353,((PALUSTRISJSF1110:0.014444548785213724,(AREOLATAJSF1111:0.03274909623968698,(SEVOSAUSC8236:0.024604518182285703,CAPITOSLU003:0.02013177689769946)34:0.015323546707373775)1:0.014444548785213724)6:0.0015280953062097877,(((((MACULATAKU195258:0.03707871677848206,(WARSZEWITSHIIJSF1127:0.09393841368752218,VIBICARIAMVZ11035:0.19242016149693641)49:0.06752155695329196)32:0.03707871677848206,(((PALMIPESECUKU204425:0.0252065630079048,SP_ [...]
+]
+End;
diff --git a/test/NCLtreeBork/rana.nex b/test/NCLtreeBork/rana.nex
new file mode 100755
index 0000000..1e7984c
--- /dev/null
+++ b/test/NCLtreeBork/rana.nex
@@ -0,0 +1,76 @@
+#NEXUS 
+
+[this dataset is from:
+Hillis and Wilcox. 2005. Phylogeny of the New World true frogs (Rana). Mol Phylogenet Evol. 34(2):299-314. 	
+]
+
+Begin data;
+	Dimensions ntax=64 nchar=1976;
+	Format datatype=dna gap=-;
+	Matrix
+temporariaDMH84R1         GCCGTAAACAATTAACTCACATCCACA-CCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTAACCATCCCTCGCCTACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGGACGGAAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-C-CCCGTATGTTCCTAACCC-AACAC-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTGAGTGTA [...]
+boyliiMVZ148929           GCCGTAAACAATTAACTCACACC-TCCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-ACAGTAAGCCCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAGGGAAATAGAGTGTTCCTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTT-TTTC-TCATGTCCTTAACCC-CCGCG-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_MT_MVZ191016 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+luteiventris_WA_MVZ225749 GCCGTAAACAATTAACTTACATT-TCCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCTGACCACTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAAGCCTAATGATATCAACACGTCAGGTCAAGGTGCAGCTCAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TTTTGTTCCTAACCC-CCTACACACGTCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+muscosaMVZ149006          GCCGTAAACAATTAATTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CTTT-TCCTGTTCCTAACCC-ACACG-CACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+auroraMVZ13957            GCCGTAAACAATTAACTTACACC-TCCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCCTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-GCAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATATAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TTT-TCCTGTCCCTAACCC-CCTTA-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+cascadaeMVZ148946         GCCGTTTACAATTAACTTACACC-TCCAACGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCGTTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCA-ACAGTAAGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAACGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCCTAATCATGAAGGTGGATTTAGTAGTAAAAAGGAAATAGAGTGTCCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTT-TTCTGTCCCTAACCC-CCCTCGCACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaMVZ137426        GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sylvaticaDMH84R43         GCCGTAAACAATTAATTTACACCCACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTTCACCCGACCACTCCTTG-CTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-AAAGTAGGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGGGTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATGTGAAATACTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACTCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-ATTTATCCTGTTTCTAACCC-ACTAC-TACGTTTT-AAAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+septentrionalesDCC3588    GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCC-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCTAGTTCCTAACCT-ATTAC-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+grylioMVZ175945           ???????????????TTCACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAACAGTT-TACCATCCCGTTTCTAACCC-ATCAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+virgatipesMVZ175944       ACCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAACGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-GCAGTAGGCTTAATGATGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTGTGAAATCACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTATTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCATATTCAGTTCTTAACCC-ATCAT-TACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+okaloosae                 GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAGTACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ACCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+clamitansJSF1118          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAACTTAGAACAAACGAAAGACTGTATGAAATTACAATCATGAAGGTGGATTTAGTAGTAAAAAAAAAGTATAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACCC-ATCAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+heckscheriMVZ164908       GCCGTAAACAATTAACTCACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCTAACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAACTTAAGAAGTGGAAAGTAATGGGCTACAATTTCTATCTTAGAACAAACGAAAGACTGTATGAAATTACAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTTATCCCGTTCCTAACTC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaX12841          GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+catesbianaDMH84R2         GCCGTAAACAATTAATTTACACCAATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATATACCCGACCATTTCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTT-GCAGTAGGCTTAATGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGAAAGACTATATGAAATTATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TCTCACCCCGTTCCTAACCC-ACTAT-TACATTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+maculataKU195258          GCCGTAAACAATTAATTTACACCAATCACCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCGACCATTCCTCGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTATGCTTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTGATGGGCTACAATTTCTAATCTAAAACAAACGGAAAGCTATGTGAAATCTTAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAGTATAGTGTTCTTTGTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TCTT-CTATGTTCCTAACCT-ATTAT-TACACCTT-AAAAAAGGCAAGTCGTAACATGGTAAGTGTA [...]
+vibicariaMVZ11035         GCCGTAAACAATTAATTCACAACCAACAACGCCTGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCATCCTACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCACTCCTCGCTTTTCAGCCTGTATACCTCCGTCGAAAGCTTACCGCGTGAACGTTT-GCAGTGTGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATGGGAAGTAACTGGCTACAATCTCTAATTTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACACACCGCCCGTCACCCTCTTCGAAAATATTTTTTTTATGTTCCTAACCC-GTTAA-CACATTAT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+warszewitshiiJSF1127      GCCGTAAACAATTAATTTACAACCAACAACGCCTGGGAACTACGAGCCATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCCCCTAGAGGAGCCTGTTCTATAATCGATAACCCCCGCTACACCTTACCACTCCTCGCTTACCAGTCTGTATACCTCCGTCGAAAGCTTACCGTGTGAACGCCT-ACAGTATGCTTAATGATACCAATACGTCAGGTCAAGGTGCAACTTAAGGAGCGGAAAGCAATGGGCTACAATTTCTAACCTAGAACAAACGAAAGACTGCATGAAATACAAGTCATGAAGGTGGATCTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACAAGTACATACCGCCCGTCACCCTCTTCGACAGTATTTTTCCCTAGTCCTTAACCC-GCTAT-CACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesVenAMNHA118801    ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ACAAT-CACGTTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+palmipesEcuKU204425       ACCGTAAACAATTGATTTACACCTACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAACTCAAGGACTGGGAAGTAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTTGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TACTATTAGTTCTTAACCC-ATAAT-CACGTTTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+bwanaQCAZ13964            ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCTCAAGGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TAATATCAGTTCTTAACCC-ACTAT-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+Sp_1_ecuadorQCAZ13219     ACCGTAAACAATTGACTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GAAGTAAGCTCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAGTTTAGAACAAACGGAAGACTATGTGAAATCTTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TATTACTAGTTCTTAACCC-ACTAT-CACGTCTT-AGAAGAGGCAAGTCGTA-CATGGTAAGTGTA [...]
+vaillantiKU195299         ACCGTAAACAATTGATTTACACCCACAAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCCATCAGTCTGTTTACCTCCGTCGAAAGCTTACCATGTGAACGTCT-GCAGTAAGCCCAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAATTTCTAATCTAGAACAAACGGAAGACTATGTGAAACCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--TCTCCTCAGTTCCTAACCC-ACTAT-TACGTCTT-AAAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+julianiTNHC60324          ??CGTA?ACAATTGAT?TACACCCATA??CGCCA?GGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTC?CACCCAACTATAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCACTCCTTGCCTAT?A?TCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTATGCCCAATGAC?TCAACACGTCAGGTCAAGGTGCAGCTTAAGGACTGGGAAGTAATGGGCTACAGTTTCTAATTTAGAACAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAGAAGAAAATAGAGTGTTCTTTTTAACTCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCAATAGTA--?CTTTTTAGTT?TTAACAC-ACTAC-CACGCCTT-AGAAGAGGCAAGTCGTAACATGGTAAGTGTA [...]
+sierramadrensisKU195181   GCCATAAACAATTAATTTACACTTATCAACGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTATACCTCACCATTCCTCGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-ACAGTAGGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGGAATAGGAAGAAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACC-TAGTCATGAAGGCGGATTTAGCAGTAAAAAGGAAATA?AGTGTTCTTTTTAATCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-ACTTTATTTGTTTCTAACCT-ATTAT-TACATTTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+psilonotaKU195119         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCAACCATTTCTCGCTC-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAGGCCCAAGGACGTCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGACTATGTGAAACCATAATC-TGAAGGTGGATTTAGCAGTAAAAAGGAAATATAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CTCCCATTTGTTCCTAACTT-ATTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+tarahumaraeKU194596       GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTAACCATTCCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATGGGCTACAATTTCTAATTTAGAATAAACGGAAGACTATGTGAAATCCTAGTCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-TTTTTCTCCGTTCCTAACTC-ACTAT-CACGTCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+zweifeliJAC7514           ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGACTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCCGACCATTTCTTGCTT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCT-ACAGTAAGCCCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAGTGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGAAAGATTATGTGAAATCATATTC-TGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AAATACTCTGTTCCTAACTC-ACTAT-TACGCCTT-AGAAGAAGCAAGTCGTAACATGGTAAGTGTA [...]
+pustulosaJAC10555         ACCGTAAACAATTAATTTACACCAATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGCCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATAATCCCCGCTACACCTGACCATTTCTCGCCT-TCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTT-ACAGTAAGCCTAATGACGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATGGGCTACAATTTCTAATTTAGAACAAACGGAAGACTATGTGAAACCCTAGTC-TCAAGGTGGATTTAGTAGTAAAAAGAAAATAAAGTGTTCTTTTTAACCTGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-TATTCTTCTGTTCCTAACTA-ACTACTCACGTTTT-AGAAAAGGTAAGTCGTAACATGGTAAGTGTA [...]
+pipiensJSF1119            ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACCATTTCTAATATAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+pipiensY10945             GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCT-TCAGTAGGCTCAATGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATATAGAACAA-CGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATATTATCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+dunniJSF1017              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCC-ATTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+montezumaeJAC8836         GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTAACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAGTGGGAAGTAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTTCCTAACCC-ATTAT-AGCGTTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_2_mex_JSF1106          GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAACCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAACAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCCTAACCT-AATAT-CACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1063     ????????????????????????ATCACCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+chiricahuensisJSF1092     GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+subaquavocalis            GCCGTAAACAATTAACTTACATCCATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTTTAATCGATGATCCCCGCTACACCTGACCATTTCTTGCTCACCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTCC-TCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAGCAGCGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-AATAATTCTGTCCTTAACCT-AATAT-AACGTCTT-AGAAGAGGCAAGTCGAAACATGGTAAGCGTA [...]
+palustrisJSF1110          ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATTTTGTCCCTAACCA-ATTTT-CACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+areolataJSF1111           GCCGTAAACAATTTATTTACACCTATAAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAACTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAACCATAACCATGAAGGTGGATTTAGTAGTAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGATGCGTACACACCGCCCGTCACCCTCTTCGATAGTA-CACAATATTGTCCGTAACCA-ATTTT-TACATTTTTAGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sevosaUSC8236             GCCGTAAACAATTAATTTACACCCATCAGCGCCTGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGCGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+capitoSLU003              GCCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAACTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTCGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTCTAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAGCCATGAAGGTGGATTTAGCAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCAATAGTA-CACAATATTGTCCATAACCA-ATTCT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+spectabilisJAC8622        GCCGTAAACAATTAATTTACATCTATCAGCGCCAGGGGACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCCACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAACTTACCATGTGAACGCCCTTCAGTAGGTTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTAACAA-ATTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+forreriJSF1065            GCCGTAAACAATTAACTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTTATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTCTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTTGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACATGGTAAGTGTA [...]
+tlalociJSF1083            GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+berlandieriJSF1136        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+neovolcanicaJSF960        GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CCTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+blairiJSF830              GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCTATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CTTAATACTGTCCCTAACCC-ATTAT-TACATTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+omiltemanaJAC7413         ACCGTAAACAATTAATTTACACCTATCAGCGCCCGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGATACACCCGACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAAGGATATCAATACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGTAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGTTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-ATTAATATTGTTCCTAACCC-CCTAT-TACGTCTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+magnaocularisJSF1073      ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTCTAGCTCATCATTCTGTATACCTCCGTCAAAAGCTTACCATGTGAACCCTCTTCAGTAGGCTCAAAGATATCATCACGTCAGGTCGAGGTGCAACTTAAGAGATGGGAAGTGATTGGCTACCTTTTCTAAATTAAAACAAACAAAAGGTTATGTCAAATCCTGGCCGTGAAGGTGGATTTAGTAATAAAAAAAAATTTTATTGTTCTTTTTAACCCGGGTCTGGGACGTGTACCCCCCGCCCCTCCCCCTCTTCGATTGTC-CATGATCCTGTCCCCAACCC-TTTAT-TATTTTTA-AGAAAATGCAAGTCGAAACACTGTAATTGTA [...]
+yavapaiensisJSF1085       ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_7_JaliscoJSF1000       GCCGTAAACAATTAATTTACACATATCAGCGCCAGGGAATTACGAGCGATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAACCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAAAAATGGGAAGTAATTGGCTACAATTTCTAACTTAAAACAAACGAAAGGCTATGTGAAATCATGGCCACGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATTGTC-CATGATACTGTCCCTAACCC-TTTAT-TATTTTTT-AGAAAAGGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJAC10472       ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCCTTT-AGAAGAAGCAAGTCGAAACACGGTAAGTGTA [...]
+macroglossaJSF7933        ACCGTAAACAATTTATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCCACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAATTTAAAACAAACGAAAGGCTATGTGAAATCATAACCGTGAAGGTGGATTTAGTAGTAAAAAAAAAATATATTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACT-CATGATACTGTCCCTAACCCCATTAT-TACCTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+taylori286                ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTATACCCAACCATTTCTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGAAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAATGATATGTGAAATCATAATCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAACC-CATAATACTGTTCCTAACCCCATTAT-TTCATTTT-AGAAGAAGCAAGTCGAAACATGGTAAGTGTA [...]
+sp_4_Panama               ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTTTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGTTATGTGAAATCATGACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_5_CostaRichDMH86_210   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAAATACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGTTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTA-TTTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAAAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATGATACTGTCCCTAACCC-TTTAT-TACGTTTT-AGAAAAAGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_6_CostaRicaDMH86_225   ACCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCTTGTTCTATAATCGATGATCCCCGTTACACCTAACCATTTTTAGCTAATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTTAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTCCCTTACCC-TTTAT-TACATTTT-AGAAGAAGCAAGTCCAAACACGGTAAGCGTA [...]
+sp_8_PueblaJAC9467        ACCGTAAACAATTAACTCACACCTATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCAGCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCCGCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAATGCCCTTCAGTAGGCTCAATGATATCG-TACGTCAGGTCAAGGTGCAGCTCAAGAAATGGAAAGTAATTGGCTACAATTTCTAGTTTAGAACAAACGAAAGGCTGTGTGAAATCACGGCCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGAGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTCCCTAACCC-TTTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+oncaLVT3542               ACCGTAAACAATTAATTTACACCCATCAGCGCCAGGGAATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCCCAATGA-GTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAACTTAGAACAAACGAAAGGCTATGTGAAACCATAACCACGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CAAAATACTGTCCCTAACCC-TTTAT-CACGTTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sp_3_MichoacanJSF955      GCCGTAAACAATTAATTCACACCTATCAGCGCCAGGGGATTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGTTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCTCTTCAGTAGGCTCAATGATGTCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCTCGAAGGTGGATTTAGTAGTAAAAAGAAAGTAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTC-CATGATACTGTTCCTAACCC-AATAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+sphenocephalaUSC7448      GCCGTAAACAATTAATTTACACCTATCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTCAAGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAGAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAGTAAAAAGAAAATAGAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCC-ATTGT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+utriculariaJSF845         GCCGTAAACAATTAATTTACACCTACCAGCGCCAGGGAACTACGAGCAATGCTTAAAACCCAAAGGATTTGACGGTGTCCCACCCAGCTAGAGGAGCCTGTTCTATAATCGATGATCCCCGCTACACCCGACCATTTTTAGCTCATCAGTCTGTATACCTCCGTCGAAAGCTTACCATGTGAACGCCCTTCAGTAGGCTCAATGATATCAACACGTCAGGTC?AGGTGCAGCTTAAGAAATGGGAAGCAATTGGCTACAATTTCTAATCTAAAACAAACGAAAGGCTATGTGAAATCATAACCATGAAGGTGGATTTAGTAATAAAAAGAAAATATAGTGTTCTTTTTAACCCGGCTCTGGGACGTGTACACACCGCCCGTCACCCTCTTCGATAGTT-CATAATACTGTTCCTAACCT-ATTAT-TACATTTT-AGAAGAGGCAAGTCGAAACACGGTAAGTGTA [...]
+	;
+End;
diff --git a/test/NTSInvalidIn/associates.nex b/test/NTSInvalidIn/associates.nex
new file mode 100644
index 0000000..65a4cf2
--- /dev/null
+++ b/test/NTSInvalidIn/associates.nex
@@ -0,0 +1,30 @@
+#NEXUS
+BEGIN TAXA;
+	TITLE Taxa;
+	DIMENSIONS NTAX=3;
+	TAXLABELS
+		taxon_1 'taxon '' & 2' taxon_3 
+	;
+END;
+
+
+
+BEGIN TAXA;
+	TITLE Taxa2;
+	DIMENSIONS NTAX=3;
+	TAXLABELS
+		t1 t2 t3 
+	;
+END;
+
+
+BEGIN TaxaAssociation;
+    TITLE rename;
+    TAXA Taxa ,  Taxa2;
+    ASSOCIATES 
+        taxon_1 /  t1 , 
+        'taxon '' & 2' /  t1 , 
+        taxon_3 /  t3
+    ;
+END;
+
diff --git a/test/NTSInvalidIn/multitax.nex b/test/NTSInvalidIn/multitax.nex
new file mode 100644
index 0000000..7198a8c
--- /dev/null
+++ b/test/NTSInvalidIn/multitax.nex
@@ -0,0 +1,12 @@
+#NEXUS
+begin taxa;
+	dimensions ntax = 4;
+	taxlabels  A B C D;
+end;
+begin taxa;
+	dimensions ntax = 4;
+	taxlabels  A B C D;
+end;
+begin trees;
+	tree a = [&U] (A,B,(C,D));
+end;
diff --git a/test/NTSValidIn/71ac973b-9e2c-414a-b8d2-7eee9f5e0c74 b/test/NTSValidIn/71ac973b-9e2c-414a-b8d2-7eee9f5e0c74
new file mode 100644
index 0000000..40ec226
--- /dev/null
+++ b/test/NTSValidIn/71ac973b-9e2c-414a-b8d2-7eee9f5e0c74
@@ -0,0 +1,109 @@
+
+<!DOCTYPE html 
+     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <title>
+results for converter
+</title>
+        <style type="text/css">
+            body {
+                font-family: arial, helvetica, sans-serif;
+                background-color: #0EC1F0;
+                background-image: url(/bg.png);
+                background-repeat: repeat-x;
+                width:100%;
+                height:100%;
+                margin-right:10px;
+                max-height: 100%;
+                border:none;
+                line-height:1.4;
+                min-width=2000px;
+            }
+            #container {
+                color:black;
+                background-color:#EDEDD0;
+                position: absolute;
+                margin-top:50px;
+                margin-bottom:50px;
+                left:10%;
+                right:10%;
+                height:100%;
+                min-width=1600px;
+            }
+            #header {
+            	position: top;
+            }
+            #footer {
+            	position: bottom;
+            }
+            h1 {
+                text-align:center;
+                font-size:xx-large;
+                font-weight:normal;
+                margin: 0 0 20px 0;
+                border:none;
+                padding:0;
+                letter-spacing: 5px;
+            }
+            h2 {
+                font-size:xx-large;
+                font-weight:normal;
+                margin: 0 0 20px 0;
+                border:none;
+                padding:0;
+            }
+            hr {
+                margin-bottom:30px;
+                border: 1px solid #222;
+                background-color: #222;
+                padding: 2px;
+            }
+            #main {
+                float:left;
+                width:90%; 
+                margin-bottom: 10px;
+                border:none;
+                padding-left: 60px;
+                padding-right: 100px;
+                padding-bottom: 100px;
+                padding-top:30px;
+            }
+            #menubar {
+            	float:left;
+                margin-top:20;
+                border:none;
+                padding-top:30px;
+                padding-left:10;
+                padding-right:40;
+            }
+            ul {
+                list-style:none;
+                margin:0;
+                border:none;
+                padding:0;
+            }
+          </style>
+</head>
+
+<body>
+	<div id="container">
+		<div id="main">
+		
+Results for conversion of the NEXUS formatted file "charsets.nex" to nexml format...
+
+<h3>Run completed:</h3>
+<table border="1">
+	<td><b>Description</b></td><td><b>File</b></td><td><b>Size</b></td>
+        
+    <tr>
+        <td>nexml representation of the data</td>        <td><a href="/results/view/71ac973b-9e2c-414a-b8d2-7eee9f5e0c74/charsets.xml">charsets.xml</a></td>        <td>5.787 kB</td>    </tr>
+
+</table>
+
+		</div>
+	</div>
+</body>
+</html>
+
diff --git a/test/NTSValidIn/Untitled b/test/NTSValidIn/Untitled
new file mode 100644
index 0000000..5bc9118
--- /dev/null
+++ b/test/NTSValidIn/Untitled
@@ -0,0 +1,157 @@
+#NEXUS
+[written Tue Apr 12 06:17:56 CDT 2011 by Mesquite  version 2.74 (build 550) at hans.local/10.0.1.3]
+
+BEGIN TAXA;
+	TITLE Taxa;
+	DIMENSIONS NTAX=3;
+	TAXLABELS
+		taxon_1 'taxon '' & 2' taxon_3 
+	;
+
+END;
+
+
+
+BEGIN TAXA;
+	TITLE Taxa2;
+	DIMENSIONS NTAX=3;
+	TAXLABELS
+		t1 t2 t3 
+	;
+
+END;
+
+
+BEGIN TaxaAssociation;
+TITLE rename;
+TAXA Taxa ,  Taxa2;
+ASSOCIATES 
+
+	'taxon '' & 2' /  t1 , 
+	taxon_3 /  t3
+
+;
+
+END;
+
+
+Begin MESQUITE;
+		MESQUITESCRIPTVERSION 2;
+		TITLE AUTO;
+		tell ProjectCoordinator;
+		timeSaved 1302607076246;
+		getEmployee #mesquite.minimal.ManageTaxa.ManageTaxa;
+		tell It;
+			setID 0 1269556059297144220;
+			setID 1 4309779946205285979;
+			tell It;
+				setSelected  1;
+				attachments ;
+			endTell;
+		endTell;
+		getWindow;
+		tell It;
+			suppress;
+			setResourcesState false false 100;
+			setPopoutState 400;
+			setExplanationSize 0;
+			setAnnotationSize 0;
+			setFontIncAnnot 0;
+			setFontIncExp 0;
+			setSize 856 559;
+			setLocation 189 95;
+			setFont SanSerif;
+			setFontSize 10;
+			getToolPalette;
+			tell It;
+			endTell;
+			desuppress;
+		endTell;
+		getEmployee  #mesquite.minimal.ManageTaxa.ManageTaxa;
+		tell It;
+			showTaxa #1269556059297144220 #mesquite.lists.TaxonList.TaxonList;
+			tell It;
+				setTaxa #1269556059297144220;
+				getWindow;
+				tell It;
+					newAssistant  #mesquite.lists.DefaultTaxaOrder.DefaultTaxaOrder;
+					newAssistant  #mesquite.lists.TaxonListCurrPartition.TaxonListCurrPartition;
+					newAssistant  #mesquite.assoc.TaxonListAssoc.TaxonListAssoc;
+				tell It;
+					getAssociationsTask Stored Taxa Associations (id# 830);
+					resetAssociation;
+					getEmployee #mesquite.assoc.StoredAssociations.StoredAssociations;
+					tell It;
+						setCurrentAssociation 0;
+					endTell;
+				endTell;
+					setExplanationSize 30;
+					setAnnotationSize 20;
+					setFontIncAnnot 0;
+					setFontIncExp 0;
+					setSize 756 492;
+					setLocation 189 95;
+					setFont SanSerif;
+					setFontSize 10;
+					getToolPalette;
+					tell It;
+						setTool mesquite.lists.TaxonList.TaxonListWindow.ibeam;
+					endTell;
+				endTell;
+				showWindow;
+				getEmployee #mesquite.lists.ColorTaxon.ColorTaxon;
+				tell It;
+					setColor Red;
+					removeColor off;
+				endTell;
+				getEmployee #mesquite.lists.TaxonListAnnotPanel.TaxonListAnnotPanel;
+				tell It;
+					togglePanel off;
+				endTell;
+			endTell;
+			showTaxa #4309779946205285979 #mesquite.lists.TaxonList.TaxonList;
+			tell It;
+				setTaxa #4309779946205285979;
+				getWindow;
+				tell It;
+					newAssistant  #mesquite.lists.DefaultTaxaOrder.DefaultTaxaOrder;
+					newAssistant  #mesquite.lists.TaxonListCurrPartition.TaxonListCurrPartition;
+					newAssistant  #mesquite.assoc.TaxonListAssoc.TaxonListAssoc;
+				tell It;
+					getAssociationsTask Stored Taxa Associations (id# 840);
+					resetAssociation;
+					getEmployee #mesquite.assoc.StoredAssociations.StoredAssociations;
+					tell It;
+						setCurrentAssociation 0;
+					endTell;
+				endTell;
+					setExplanationSize 30;
+					setAnnotationSize 20;
+					setFontIncAnnot 0;
+					setFontIncExp 0;
+					setSize 756 492;
+					setLocation 189 95;
+					setFont SanSerif;
+					setFontSize 10;
+					getToolPalette;
+					tell It;
+						setTool mesquite.lists.TaxonList.TaxonListWindow.ibeam;
+					endTell;
+					setActive;
+				endTell;
+				showWindow;
+				getEmployee #mesquite.lists.ColorTaxon.ColorTaxon;
+				tell It;
+					setColor Red;
+					removeColor off;
+				endTell;
+				getEmployee #mesquite.lists.TaxonListAnnotPanel.TaxonListAnnotPanel;
+				tell It;
+					togglePanel off;
+				endTell;
+			endTell;
+		endTell;
+		endTell;
+end;
+
+
diff --git a/test/NTSValidIn/adh.nex b/test/NTSValidIn/adh.nex
new file mode 100644
index 0000000..9ee2b8a
--- /dev/null
+++ b/test/NTSValidIn/adh.nex
@@ -0,0 +1,88 @@
+#NEXUS
+
+begin data;
+	dimensions ntax=54 nchar=771;
+	format datatype=dna missing=? gap=-;
+	matrix
+	D.persimilis         ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAA [...]
+	D.pseudoobscura1     ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAA [...]
+	D.pseudoobscura2     ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAA [...]
+	D.miranda            ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTATCCCTACGATGTGACTGTGCCCATCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGCTGAAGACTATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAA [...]
+	D.ambigua            ATGTCA------CTGACCAACAAGAATGTGATTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGCTGGTTAAGCGTGATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAGCTGAAGGCCATCAATCCCAAGGTGACGGTCACCTTCTATCCGTACGATGTGACGGTGCCCATCAGCGAGACGACCAAGCTGCTGAAGACCATCTTTGCCCAGCTGAAGACCGTCGATGTGCTGATCAACGGTGCCGGCATCCTGGACGATTATCAGATTGAGCGCACCATTGCCGTTAACTACACGGGTCTGGTCAACACCACCACCGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCTGGCAGCAA [...]
+	D.subobscura         ATGTCA------CTTACAAACAAGAATGTTGTTTTCGTGGCTGGTCTGGGAGGTATTGGCCTGGACACCAGTCGGGAGTTGGTTAAGCGAGATCTGAAGAATCTGGTCATCCTGGATCGCATTGACAATGCAGCGGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTACCCTTATGATGTGACTGTACCTGTCGCAGAGACCACCAAACTCCTGAAGACCATCTTTGCCCAGATCAAGACCATCGATGTCCTGATAAACGGTGCTGGCATCCTCGACGATCATCAGATTGAGCGTACTATTGCCGTTAACTACTCTGGCCTGGTCAACACCACCACAGCCATTCTGGACTTTTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATCATTTGCAACATTGGCTCCGTTACCGGTTTTAATGCCATCTACCAGGTGCCCGTTTACTCTGGCAGCAA [...]
+	D.madeirensis        ATGTCA------CTAACAAACAAGAATGTTGTTTTCGTGGCTGGTCTGGGAGGTATTGGCCTGGACACCAGTCGGGAGTTGGTTAAGCGAGATCTGAAGAATCTGGTCATCCTGGATCGCATTGACAATCCAGCGGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTACCCTTATGATGTGACTGTACCTGTCGCAGAGACCACCAAACTCCTGAAGACCATCTTTGCCCAGATCAAGACCATCGATGTCCTGATAAACGGTGCTGGCATCCTCGACGATCATCAGATTGAGCGTACTATTGCCGTTAACTACACTGGCCTGGTCAACACCACCACAGCCATTCTGGACTTTTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATCATTTGCAACATTGGCTCCGTTACCGGTTTTAATGCCATCTACCAGGTGCCTGTTTACTCTGGCAGCAA [...]
+	D.willistoni         ATGGCT------CTCACCAACAAGAACATCATCTTTGTGGCCGGTCTGGGCGGCATTGGTCTGGACACCAGTCGCGAATTGGTCAAACGGGATCTCAAGAACTTGGTGATCCTGGATCGTATTGACAATCCTGCTGCCATTGCTGAACTGAAGGCAATCAATCCCAAAGTGACAGTTACCTTCTATCCCTATGATGTTACCACACCCTTGACAGAGACTACCAAATTGTTGAAGACCATTTTCGCCCAATTGAAGACTGTCGATGTCCTGATCAATGGAGCTGGCATTTTGGATGATCATCAGATCGAGCGTACCATTGCTGTGAACTTCACTGGTTTGGTCAATACCACCACAGCCATTTTGGACTTCTGGGATAAGCGTAAGGGTGGACCAGGTGGCGTCATCTGCAACATTGGCTCTGTGACCGGTTTCAATGCCATCTACCAGGTCCCTGTCTATTCCGCATCCAA [...]
+	D.lebanonensis       ATGGAT------TTGACCAACAAGAACGTTATTTTCGTTGCCGCTCTGGGCGGTATTGGTCTCGACACGAGTCGGGAGCTCGTCAAGCGTAATCTGAAGAATTTTGTCATCTTGGACAGAGTTGAGAACCCGACTGCTCTTGCTGAGCTGAAGGCAATAAATCCCAAGGTGAACATCACCTTCCATACCTACGATGTGACCGTACCCGTTGCTGAGTCGAAGAAGCTGCTGAAGAAGATTTTCGATCAGCTGAAAACCGTTGACATTCTGATCAATGGTGCTGGTATTTTGGATGACCATCAGATTGAGCGCACCATTGCCATCAACTTCACTGGTCTGGTCAACACCACCACCGCTATTTTGGACTTTTGGGACAAGCGTAAGGGCGGTCCTGGTGGCATCATTGCCAACATTTGCTCCGTTACTGGCTTCAATGCCATCCACCAGGTGCCTGTCTACTCGGCATCCAA [...]
+	D.melanogaster       ATGTCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGATCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGATTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAA [...]
+	D.simulans           ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATCGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGACCTGAAGAACCTGGTAATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAA [...]
+	D.mauritiana         ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGCCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGCGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCTGCTGCCATTGCCGAGCTGCAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAA [...]
+	D.teissieri          ATGGCGTTTACCTTGACCAACAAGAACGTGGTTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGGGACCTCAAGAACCTGGTCATCCTCGACCGCATTGAGAACCCGGCTGCCATCGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCATCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATCGCCGTCAACTACACCGGCCTGGTGAACACCACGACCGCCATCCTGGACTTCTGGGACAAGCGCAAGGGTGGACCCGGTGGCATCATCTGCAACATTGGATCCGTGACTGGATTCAACGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAA [...]
+	D.orena              ATGGCATTCACCTTGACCAACAAGAACGTCATTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGTGATCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTATCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGACGACCGTCGATGTCCTGATCAACGGAGCTGGCATCCTGGACGATTACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGATTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGCATTATCTGCAACATTGGCTCCGTAACTGGATTCAATGCCATCTACCAGGTGCCCGTCTACTCTGGCACCAA [...]
+	D.sechellia          ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCTGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAA [...]
+	D.yakuba             ATGGCGTTTACCTTGACCAACAAGAACGTGGTTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGGGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATCGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCATCGATGTCCTGATCAACGGAGCTGGCATCCTGGACGATCACCAGATCGAGCGCACCATCGCCGTCAACTACACCGGCCTGGTGAACACCACGACGGCCATCCTGGACTTCTGGGACAAGCGCAAGGGTGGACCCGGTGGTATCATCTGCAACATTGGATCCGTGACTGGATTCAACGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAA [...]
+	D.tsacasi            ATGTCGACGACACTCACCAACAAGAACGTCATTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCAAGGAGCTGGTCAAGCGCGACCTCAAGAACCTTGTGATCCTGGACCGCATTGACAACCCGGCGGCCATTGCCGAGCTGAAGGCAATCAATCCGAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCGATTACTGAGACCACCAAGCTGCTGAAGACCATTTTCGCCAAGGTTAAGACCGTGGACATTCTGATCAACGGAGCTGGCATCCTGGACGACCATCAGATCGAGCGCACCATCGCCGTCAACTACACGGGGCTGGTCAACACGACGACGGCCATCCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCGGGCGGCATTATCTGCAACATTGGATCGGTGACGGGCTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAA [...]
+	D.crassifemur        ATG---TTC---ATCGCTGGCAAGAACATCATCTTTGTCGCTGGTCTCGGCGGCATTGGACTGGAGACGAGTCGCGAGATTGTCAAGAGCGGTCCCAAGAACCTAGTGATCCTTGATCGTGCGCCGAATCCGGCTGCCATTGCTGAGCTGCAGGCGCTTAATCCCAAGGTGACCGTATCCTTTTATCTCTACGATGTGACAGTACCGCAGTCCGAAACTGTCAAGCTGCTGAAGACAATCTTCGCGAAGCTGAAGACCATCGATTTGCTCATCAATGGCGCCGGCATTCTGGACGATCATCAGATCGAGCGTACCATTGCGGTGAATTTCACTGGTACGGTGAACACCACGACCGCCATCATGGAGTTCTGGGACAAGCGCAAGGGTGGACCAGGTGGCGTTGTTGCCAACATTTGCTCGGTGACTGGATTCAATTCCATTTACCAGGTGCCTGTCTACTCTGCCTCGAA [...]
+	D.montana            ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGGATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACGGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGACCAGGCGGAGTCATTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+	D.buzzatii_1         ATGGCC------ATCGCTAATAAGAACATCATCTTTGTCGCTGGACTCGGTGGCATTGGACTCGACACCAGTCGGGAGATTGTCAAGAGCGGCCCTAAGAACCTGGTGATCCTTGATCGCATCGAAAACCCAGCTGCCATTGCTGAGCTGAAGGCCCTCAATCCAAATGTGACCGTCACGTTCTATACCTATGATGTGACCGTTTCGGTAGCAGAGTCCACAAAACTCCTGAAGACAATCTTCGACCAGCTGAAGACAGTGGATCTGCTCATCAATGGAGCCGGCATCCTGGATGAAGATCAAGTCGAGCGAACCATTGCGGTGAACTTTGCGGGCACAGTGAACACCACCACTGCCATAATGTCATTCTGGGACAAGCGTAAGGGCGGTCCAGGTGGTGTCATTGCGAACATTTGCTCGGTGACTGGATTCAATGCCCTCTACCAGGCACCCGTCTATTCCGCCTCAAA [...]
+	D.buzzatii_2         ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGGGAAATTGTCAAGAGCGGCCCAAAGAACCTGGTGATCCTTGATCGCATTGAAAACCCAGCTGCCATTGCTGAGCTGAAGGCCCTCAACCCAAAGGTGACCGTCACTTTCTATCCCTATGATGTGACCGTTCCGGTAGCAGAGACCACAAAACTCCTGAAGACAATCTTCGACAAGCTGAAGACAGTGGATCTGCTCATCAATGGAGCTGGCATCCTAGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTTACAGGCACAGTGAACACCACCACTGCCATCATGGCATTCTGGGACAAGCGTAAGGGCGGTCCAGGTGGTGTCATTGCGAACATTTGCTCGGTGACTGGCTTCAATTCCATCTACCAGGTGCCCGTTTATTCCGCCTCTAA [...]
+	D.texana             ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTAACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGTGGTCCAGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+	D.lummei             ATGGCG------ATCGCTAACAAGAACATTATTTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGACCGGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+	D.lacicola           ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTAAAAACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGCACTATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGTAAGGGCGGACCAGGCGGAGTCGTTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+	D.borealis           ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGCGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGTTGGCAGAAACCACGAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGCCCAGGCGGAGTCGTTGCAAACATCTGCTCCGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+	D.flavomontana       ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGCCCAGGCGGAGTCATTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+	D.americana          ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATAGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATTGAGAACCCGACAGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGTGGCCCAGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+	Sc.albovittata       ATGTGT------ATCGCTGGCAAGAATATCATCTTTGTCGCTGGTCTCGGTGGCATTGGACTGGACACCAATCGCGAGATTGTCAAGAGCGGTCCCAAGAACCTAGTGATCCTTGATCGCATTGAGAATCCGGCTGCCATTGCCGAGCTGCAGGCGATTAATCCCAATGTGACCGTATCCTTTTATCCCTACGATGTTACAGTAGCGTTGGCTGAAAGTGTCAAGCTGCTGAAGACAATCTTCGCTAAGCTGAAGACAGTTGATTTGCTCGTCAATGGAGCTGGCATTCTGGACGATCATCAGATTGAGCGGACCATTGCAGTGAATTTCACTGGTACTGTGAATACCACAACTGCTATCATGGAGTTCTGGGATAAGCGCAAGGGTGGACCAGGTGGCGTTATTGCCAACATTTGCTCAGTGACAGGATTCAATTCCATTTACCAGGTGCCTGTATACTCTGCCTCAAA [...]
+	D.immigrans          ATGGCA------ATCGCTAACAAGAACATTATCTTTGTCGCTGGTCTGGGCGGCATTGGTCTGGACACGAGCAAGGGAATCGTCAAAGCTGGACCCAAGAATCTGGTGATCTTGGACCGCATTGAGAACCCCGCAGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACCGTTACTTTCTATCCCTACGATGTCACTGTTCCGCTGGCGGAGACCAAGAAGCTGCTCACGACCATCTTCGCCAAGCTGAAGACCGTTGATCTGCTGATCAATGGTGCAGGCATCCTGAACGATCATCAGATCGAACTCACCATCGCAATAAATTTCACCGGTCTGGTTAACACCACCACCGCTATCATGGACTTCTGGGATAAGCGTAAGGGCGGCCCAGGTGGCGCCATTGCCAACATCTGCTCTGTGACTGGATTCAATGCCATTTACCAGGTGCCCGTCTACTCAGCCTCCAA [...]
+	D.mettleri           ATGGCA------ATCGCTAACAAGAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGGTTGGACACCAGTCGAGAGATTGTCAAGAGTGGACCAAAGAACCTGGTAATTCTCGATCGAGTTGAGAACCCCACTGCCATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACCATCACGTTCTATCCCTATGATGTGACCGTTTCGGTAGCAGAATCCACAAAGTTGCTCAAGACAATCTTCGACAAACTGAAGACGGTGGACCTGCTTATCAATGGCGCTGGCATCCTGGACGATTACCAGATCGAGCGTACCATTGCGGTGAACTTTGCCGGCACAGTAAACACCACCACTGCCATCATGGCATTCTGGGACAAGCGCAAGGGAGGCCCAGGTGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAACTCTATCTACCAGGTGCCCGTCTATTCTGCCTCCAA [...]
+	D.arizonae_2         ATGGCA------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTTGACACCAGTCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCTGCTATTGCCGAACTGAAGGCACTCAACCCCAAGGTGACCGTTACGTTCTATCCCTATGATGTCACCGTCTCGGTAGCAGAGACTACAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTCGATCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGTAAGGGCGGCCCAGGCGGTGTCATTGCCAATATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCTGTGTACTCCGCATCCAA [...]
+	D.hydei_1            ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTGGACACCAGTCGCGAGATCGTCAAGAGTGGCCCAAAGAACCTCGTTATCCTTGATCGAATTGACAACCCAGCTGCTATAGCTGAGCTGAAGGCTATCAACCCAAAGGTGACCGTCACGTTCTACCCCTATGATGTAACTGTTTCGGTGGCAGAGTCCACAAAGCTGCTCAAGGTAATCTTCGACAAGCTGAAGACAGTGGATCTGCTTATCAATGGCGCTGGCATCCTGGACGACTACCAGATCGAACGCACCATTGCAGTGAACTTTGCCGGCACAGTGAACACCACCACAGCCATCATGGCATTCTGGGACAAGCGCAAGGGCGGCCCAGGAGGTGTCATTGCCAATATCTGCTCGGTGACTGGTTTCAACGCAATCTACCAGGTGCCCGTCTATTCCGCTTCCAA [...]
+	D.hydei_2            ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTGGACACCAGTCGCGAGATCGTCAAGAGTGGCCCAAAGAACCTGGTTATCCTTGATCGAATTGACAACCCAGCTGCTATTGCTGAGCTGAAGGCCATCAACCCAAAGGTGACCATCACGTTCTACCCCTATGATGTAACTGTTTCGGTGGCAGAGTCCACAAAGCTGCTCAAGGTAATCTTCGACAAGCTGAAGACAGTGGATCTGCTTATCAATGGCGCTGGCATCCTGGACGACTACCAGATCGAACGCACCATTGCAGTGAACTTTGCCGGTACAGTGAACACCACCACAGCCATCATGGCATTCTGGGACAAGCGCAAGGGCGGCCCAGGAGGTGTCATTGCCAATATCTGCTCGGTGACTGGTTTCAACGCAATCTACCAGGTGCCCGTCTATTCCGCTTCCAA [...]
+	D.mojavensis_1       ATGGCC------ATCGCTAACAAGAATATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAAGGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCGGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCTCTATGATGTCACCGTCTCGGTAGCCGAGAGCACAAAGCTTCTGCAGAAAATCTTTGACCAGCTTAAGACAGTCGATCTGCTCATCAATGGAGCTGGCATCCTGGATGACCACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACAGTGAACACCATCACGGCCATCATGTCCTTCTGGGACAAGCGTAAGGGCGGCCCAGGCGGTGTCATTGCGAACGTCTGTTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCGGTGTATTCCGCATCCAA [...]
+	D.mojavensis_2       ATGGCA------ATCGCTAACAAGAACATCATATTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCTGCAATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTCGATCTGCTCATCAATGGGACAGGCATCCTGGACGACCACCAAATCGAGCGTACCATTGCGGTGAACTTCACAGGCACATTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCCAATATCTGCTCGGTGACTGGCTTCAATGCCATCTTACCAGTGCCTGTGTACTCGGCATCCAA [...]
+	D.mulleri_1          ATGGCC------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCAAAGAACCTGGTCATCCTTGACCGCATTGAGAACCCAGCTGCTATTGCCGAGCTGAAGGCACTCAACCCAAATGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCCCGGTAGCAGAGACCACGAAGCTTTTGCAGAAAATCTTTGACCAGCTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACGGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAA [...]
+	D.mulleri_2          ATGGTT------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCAAAGAACCTGGTCATCCTTGACCGCATTGAGAACCCAGCCGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACAAAGCTGCTGAAGACCATCTTCGACAAGTTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACTGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTATCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAA [...]
+	D.navojoa            ATGGCC------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGCCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCAGCTGCCATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACCTTCTATCCCTATGATGTGACCGTCCCGGTTGCAGAGACCACAAAGCTTTTGAAGACAATCTTCGACAAGCTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATTGAGCGCACCATTGCAGTGAACTTCACAGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAA [...]
+	D.virilis_1          ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACAGTCACATTTTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTAAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGCCCGGGCGGAGTTATTGCAAACATTTGCTCGGTGTCTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAGA [...]
+	D.virilis_2          ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACAGTCACATTTTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTAAATTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGCCCGGGCGGAGTTATTGCAAACATTTGCTCGGTGTCTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAGA [...]
+	D.silvestris         ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACTTGGTGGTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCATTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATACTCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAATGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.grimshawi          ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCTGTGAATTTTACAGGTTTGGTGAACACCACAACTGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGTTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.affinidisjuncta    ATGGTT------ATCGCTAACAGTAACGTCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGGTGCTTGACCGCGTTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCGTTACATTCTATCCGTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCGGTGAATTTTACAGGTACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATTTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.nigra              ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGCGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAATTTGGTGTTGCTCGATCGCATTGACAATCCCGCTGCCATTAATGAGTTGAGAGCCCTCAATCCCAAGGTGACCGTTACATTTTATTCCTATGATGTAACCGTTCCGTTGGCCGAAACCAAAAAGCTTTTGAAGACAATCTTCGACAAGCTGAAGACTGTTGATCTGCTCATCAATGGTGCTGGCATCCTGGATGATCATCAGATTGAGCGCACCATTGCGGTGAATTTCACTGGTACAGTGAACACCACCACTGCGATCATGGATTTCTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATTGTTGCCAACATCTGCTCAGTGACTGGCTTCAACTCCATCTACCAAGTGCCCGTTTACTCAGCCTCAAA [...]
+	D.mimica             ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGTCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAGTGCGCTCAATCCCAAGGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACTGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATCATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGTACAGTGAACACCACTACTGCGATCATGGATTTCTGGGACAAGCGTAACGGCGGCCCCGGTGGTGTTATTGCCAACATCTGCTCAGTGACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.adiastola          ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAGTGCACTCAATCCTAAGGTGACCGTTACATTCTATCCCTATGATGTTACCGTACCGTTGGATGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATTCTGGACGACAATCAGATTGAGCGCACCATTGCGGTGAATTTTACTGGTACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.picticornis        ATGGTT------ATCGCTAACAGTAACATCATCTTCGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGCTGAAAGCCCTTAACCCGAAGGTGACCATTACATTCTATCCCTATGATGTAACAGTGCCGGTGGATGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTCCTCATCAATGGCGCTGGTATCCTGGATGATCATCAGATTGAGCGCACCATTGCGGTGAACTTTGCAGGTACAGTGAACACCACAACAGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATCTGCTCCGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.planitibia         ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACCTGGTGGTGCTTGATCGCGTTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGGTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.heteroneura        ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACTTGGTGGTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCATTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATACTCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTGGTTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.differens          ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACCTGGTGGTGCTTGATCGCGTTGACAACCCCGCTGCAATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGGTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACGAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGATAAGCGTAAGGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	D.wheeleri           ATGGTT------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCGAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCTGCGGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTTTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACGAAGCTTCTGAAGACAATCTTCGACAAGCTGAAGACAGTCGACATACTCATCAATGGAGCTGGTATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACGGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTATCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAA [...]
+	D.mayaguana          ATGGTA------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGGGAAATCGTCAAGAGCGGCCCAAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCAGCTGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGATCGTTACGTTCTATCCCTATGATGTAACCGTCCCGGTAGCAGAGACCACAAAGCTTCTGAAGATAATCTTCGACAAGCTAAAGACTGTGGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCTGTGAACTTCACTGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTATTCCGCATCGAA [...]
+	D.hawaiiensis        ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCTGTGAATTTTACAGGTTTGGTGAACACCACAACTGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGTTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+	Z.tuberculatus       ATGGTCTTTNNNCTGCCCAACAAGAACGTGATCTTCGTCGCCGGCCTGGGCGGCATCGGTCTGGACACCAGTCGCGAGATTGTCAAGGCTGGTCCCAAGAACCTGGTGATCCTCGATCGTGTGGAGAACCCCGCCGCCATTGCTGAGCTGCAGGCCATCAATCCCAAGGTGACTGTCACCTTCTATCCCTACGATGTCACCGTGCCACTCAGTGAGTCTGTCAAGCTGCTGAAGACCATCTTCGACAAGTTGAAGACCATCGATCTGTTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAACGCACCATCGCTGTGAACTTCACTGGCCTGGTGAACACCACCACCGCCATTCTGCAGTTCTGGGACAAGCGTAAGGGTGGTCCCGGTGGCGTTATTGCCAACATCTGCTCCGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGCCTCGAA [...]
+end;
+
+begin mrbayes;
+	[The following lines define three character sets, each corresponding to a codon position.
+	 Note the use of \3 to include every third character in the set]
+	charset 1st_pos = 1-771\3;
+	charset 2nd_pos = 2-771\3;
+	charset 3rd_pos = 3-771\3;
+	
+	[The following line defines a partition called "by_codon" that divides the sites into three
+	 sets corresponding to the first, second, and third codon position]
+	partition by_codon = 3:1st_pos,2nd_pos,3rd_pos;
+
+	[The following line sets the current partition to the one we just defined above. If we do not
+         explicitly set the partition to the one we defined, MrBayes will use the default partition.
+         The default partition divides the characters into sets based on their data type (DNA, amino acid, etc)]
+	set partition=by_codon;
+	
+	[The following line allows the codon positions to have different rates. Without the following
+         line, all codon positions will be assumed to evolve at the same rate]
+	prset ratepr=variable; 
+	
+	[The last line defines a usertree, which can be used as a startingtree to speed up convergence.
+	 Unless you set startingtree=user in mcmc, however, a random starting tree will be used instead
+	 when the chain is run.]
+	usertree = ((((((((D.persimilis,(D.pseudoobscura1,D.pseudoobscura2)),D.miranda),D.ambigua),(D.subobscura,D.madeirensis)),((((D.melanogaster,((D.simulans,D.sechellia),D.mauritiana)),(D.teissieri,D.yakuba)),D.orena),D.tsacasi)),D.willistoni),D.lebanonensis),(((D.crassifemur,Sc.albovittata),((((((D.montana,D.lacicola),D.borealis),D.flavomontana),(((D.texana,D.americana),D.lummei),(D.virilis_1,D.virilis_2))),(((D.buzzatii_1,D.buzzatii_2),((((D.arizonae_2,D.mojavensis_2),(((D.mulleri_1,D.mul [...]
+	
+end;
\ No newline at end of file
diff --git a/test/NTSValidIn/adh.xml b/test/NTSValidIn/adh.xml
new file mode 100644
index 0000000..afff660
--- /dev/null
+++ b/test/NTSValidIn/adh.xml
@@ -0,0 +1,42660 @@
+<nex:nexml about="#nex_nexml1" generator="Bio::Phylo::Project v.0.36_1660" version="0.9" xmlns="http://www.nexml.org/2009" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:nex="http://www.nexml.org/2009" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nexml.org/2009 http://www.nexml.org/2009/nexml.xsd">
+  <meta content="2011-10-15T11:59:20" datatype="xsd:date" id="meta1658" property="dc:date" xsi:type="nex:LiteralMeta"/>
+  <otus id="otus1550">
+    <otu id="otu1551" label="D.persimilis"/>
+    <otu id="otu1553" label="D.pseudoobscura1"/>
+    <otu id="otu1555" label="D.pseudoobscura2"/>
+    <otu id="otu1557" label="D.miranda"/>
+    <otu id="otu1559" label="D.ambigua"/>
+    <otu id="otu1561" label="D.subobscura"/>
+    <otu id="otu1563" label="D.madeirensis"/>
+    <otu id="otu1565" label="D.willistoni"/>
+    <otu id="otu1567" label="D.lebanonensis"/>
+    <otu id="otu1569" label="D.melanogaster"/>
+    <otu id="otu1571" label="D.simulans"/>
+    <otu id="otu1573" label="D.mauritiana"/>
+    <otu id="otu1575" label="D.teissieri"/>
+    <otu id="otu1577" label="D.orena"/>
+    <otu id="otu1579" label="D.sechellia"/>
+    <otu id="otu1581" label="D.yakuba"/>
+    <otu id="otu1583" label="D.tsacasi"/>
+    <otu id="otu1585" label="D.crassifemur"/>
+    <otu id="otu1587" label="D.montana"/>
+    <otu id="otu1589" label="D.buzzatii_1"/>
+    <otu id="otu1591" label="D.buzzatii_2"/>
+    <otu id="otu1593" label="D.texana"/>
+    <otu id="otu1595" label="D.lummei"/>
+    <otu id="otu1597" label="D.lacicola"/>
+    <otu id="otu1599" label="D.borealis"/>
+    <otu id="otu1601" label="D.flavomontana"/>
+    <otu id="otu1603" label="D.americana"/>
+    <otu id="otu1605" label="Sc.albovittata"/>
+    <otu id="otu1607" label="D.immigrans"/>
+    <otu id="otu1609" label="D.mettleri"/>
+    <otu id="otu1611" label="D.arizonae_2"/>
+    <otu id="otu1613" label="D.hydei_1"/>
+    <otu id="otu1615" label="D.hydei_2"/>
+    <otu id="otu1617" label="D.mojavensis_1"/>
+    <otu id="otu1619" label="D.mojavensis_2"/>
+    <otu id="otu1621" label="D.mulleri_1"/>
+    <otu id="otu1623" label="D.mulleri_2"/>
+    <otu id="otu1625" label="D.navojoa"/>
+    <otu id="otu1627" label="D.virilis_1"/>
+    <otu id="otu1629" label="D.virilis_2"/>
+    <otu id="otu1631" label="D.silvestris"/>
+    <otu id="otu1633" label="D.grimshawi"/>
+    <otu id="otu1635" label="D.affinidisjuncta"/>
+    <otu id="otu1637" label="D.nigra"/>
+    <otu id="otu1639" label="D.mimica"/>
+    <otu id="otu1641" label="D.adiastola"/>
+    <otu id="otu1643" label="D.picticornis"/>
+    <otu id="otu1645" label="D.planitibia"/>
+    <otu id="otu1647" label="D.heteroneura"/>
+    <otu id="otu1649" label="D.differens"/>
+    <otu id="otu1651" label="D.wheeleri"/>
+    <otu id="otu1653" label="D.mayaguana"/>
+    <otu id="otu1655" label="D.hawaiiensis"/>
+    <otu id="otu1657" label="Z.tuberculatus"/>
+  </otus>
+  <characters id="characters4" otus="otus1550" xsi:type="nex:DnaCells">
+    <format>
+      <states id="states6">
+        <state id="s1" symbol="A"/>
+        <state id="s2" symbol="C"/>
+        <state id="s3" symbol="G"/>
+        <state id="s4" symbol="T"/>
+        <uncertain_state_set id="s5" symbol="K">
+          <member state="s3"/>
+          <member state="s4"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s6" symbol="M">
+          <member state="s1"/>
+          <member state="s2"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s7" symbol="R">
+          <member state="s1"/>
+          <member state="s3"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s8" symbol="S">
+          <member state="s2"/>
+          <member state="s3"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s9" symbol="W">
+          <member state="s1"/>
+          <member state="s4"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s10" symbol="Y">
+          <member state="s2"/>
+          <member state="s4"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s11" symbol="B">
+          <member state="s2"/>
+          <member state="s3"/>
+          <member state="s4"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s12" symbol="D">
+          <member state="s1"/>
+          <member state="s3"/>
+          <member state="s4"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s13" symbol="H">
+          <member state="s1"/>
+          <member state="s2"/>
+          <member state="s4"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s14" symbol="V">
+          <member state="s1"/>
+          <member state="s2"/>
+          <member state="s3"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s15" symbol="N">
+          <member state="s3"/>
+          <member state="s1"/>
+          <member state="s4"/>
+          <member state="s2"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s16" symbol="X">
+          <member state="s3"/>
+          <member state="s1"/>
+          <member state="s4"/>
+          <member state="s2"/>
+        </uncertain_state_set>
+        <uncertain_state_set id="s17" symbol="-"/>
+        <uncertain_state_set id="s18" symbol="?">
+          <member state="s1"/>
+          <member state="s2"/>
+          <member state="s3"/>
+          <member state="s4"/>
+          <member state="s5"/>
+          <member state="s6"/>
+          <member state="s7"/>
+          <member state="s8"/>
+          <member state="s9"/>
+          <member state="s10"/>
+          <member state="s11"/>
+          <member state="s12"/>
+          <member state="s13"/>
+          <member state="s14"/>
+          <member state="s15"/>
+          <member state="s16"/>
+          <member state="s17"/>
+        </uncertain_state_set>
+      </states>
+      <char id="char8" states="states9"/>
+      <char id="char10" states="states11"/>
+      <char id="char12" states="states13"/>
+      <char id="char14" states="states15"/>
+      <char id="char16" states="states17"/>
+      <char id="char18" states="states19"/>
+      <char id="char20" states="states21"/>
+      <char id="char22" states="states23"/>
+      <char id="char24" states="states25"/>
+      <char id="char26" states="states27"/>
+      <char id="char28" states="states29"/>
+      <char id="char30" states="states31"/>
+      <char id="char32" states="states33"/>
+      <char id="char34" states="states35"/>
+      <char id="char36" states="states37"/>
+      <char id="char38" states="states39"/>
+      <char id="char40" states="states41"/>
+      <char id="char42" states="states43"/>
+      <char id="char44" states="states45"/>
+      <char id="char46" states="states47"/>
+      <char id="char48" states="states49"/>
+      <char id="char50" states="states51"/>
+      <char id="char52" states="states53"/>
+      <char id="char54" states="states55"/>
+      <char id="char56" states="states57"/>
+      <char id="char58" states="states59"/>
+      <char id="char60" states="states61"/>
+      <char id="char62" states="states63"/>
+      <char id="char64" states="states65"/>
+      <char id="char66" states="states67"/>
+      <char id="char68" states="states69"/>
+      <char id="char70" states="states71"/>
+      <char id="char72" states="states73"/>
+      <char id="char74" states="states75"/>
+      <char id="char76" states="states77"/>
+      <char id="char78" states="states79"/>
+      <char id="char80" states="states81"/>
+      <char id="char82" states="states83"/>
+      <char id="char84" states="states85"/>
+      <char id="char86" states="states87"/>
+      <char id="char88" states="states89"/>
+      <char id="char90" states="states91"/>
+      <char id="char92" states="states93"/>
+      <char id="char94" states="states95"/>
+      <char id="char96" states="states97"/>
+      <char id="char98" states="states99"/>
+      <char id="char100" states="states101"/>
+      <char id="char102" states="states103"/>
+      <char id="char104" states="states105"/>
+      <char id="char106" states="states107"/>
+      <char id="char108" states="states109"/>
+      <char id="char110" states="states111"/>
+      <char id="char112" states="states113"/>
+      <char id="char114" states="states115"/>
+      <char id="char116" states="states117"/>
+      <char id="char118" states="states119"/>
+      <char id="char120" states="states121"/>
+      <char id="char122" states="states123"/>
+      <char id="char124" states="states125"/>
+      <char id="char126" states="states127"/>
+      <char id="char128" states="states129"/>
+      <char id="char130" states="states131"/>
+      <char id="char132" states="states133"/>
+      <char id="char134" states="states135"/>
+      <char id="char136" states="states137"/>
+      <char id="char138" states="states139"/>
+      <char id="char140" states="states141"/>
+      <char id="char142" states="states143"/>
+      <char id="char144" states="states145"/>
+      <char id="char146" states="states147"/>
+      <char id="char148" states="states149"/>
+      <char id="char150" states="states151"/>
+      <char id="char152" states="states153"/>
+      <char id="char154" states="states155"/>
+      <char id="char156" states="states157"/>
+      <char id="char158" states="states159"/>
+      <char id="char160" states="states161"/>
+      <char id="char162" states="states163"/>
+      <char id="char164" states="states165"/>
+      <char id="char166" states="states167"/>
+      <char id="char168" states="states169"/>
+      <char id="char170" states="states171"/>
+      <char id="char172" states="states173"/>
+      <char id="char174" states="states175"/>
+      <char id="char176" states="states177"/>
+      <char id="char178" states="states179"/>
+      <char id="char180" states="states181"/>
+      <char id="char182" states="states183"/>
+      <char id="char184" states="states185"/>
+      <char id="char186" states="states187"/>
+      <char id="char188" states="states189"/>
+      <char id="char190" states="states191"/>
+      <char id="char192" states="states193"/>
+      <char id="char194" states="states195"/>
+      <char id="char196" states="states197"/>
+      <char id="char198" states="states199"/>
+      <char id="char200" states="states201"/>
+      <char id="char202" states="states203"/>
+      <char id="char204" states="states205"/>
+      <char id="char206" states="states207"/>
+      <char id="char208" states="states209"/>
+      <char id="char210" states="states211"/>
+      <char id="char212" states="states213"/>
+      <char id="char214" states="states215"/>
+      <char id="char216" states="states217"/>
+      <char id="char218" states="states219"/>
+      <char id="char220" states="states221"/>
+      <char id="char222" states="states223"/>
+      <char id="char224" states="states225"/>
+      <char id="char226" states="states227"/>
+      <char id="char228" states="states229"/>
+      <char id="char230" states="states231"/>
+      <char id="char232" states="states233"/>
+      <char id="char234" states="states235"/>
+      <char id="char236" states="states237"/>
+      <char id="char238" states="states239"/>
+      <char id="char240" states="states241"/>
+      <char id="char242" states="states243"/>
+      <char id="char244" states="states245"/>
+      <char id="char246" states="states247"/>
+      <char id="char248" states="states249"/>
+      <char id="char250" states="states251"/>
+      <char id="char252" states="states253"/>
+      <char id="char254" states="states255"/>
+      <char id="char256" states="states257"/>
+      <char id="char258" states="states259"/>
+      <char id="char260" states="states261"/>
+      <char id="char262" states="states263"/>
+      <char id="char264" states="states265"/>
+      <char id="char266" states="states267"/>
+      <char id="char268" states="states269"/>
+      <char id="char270" states="states271"/>
+      <char id="char272" states="states273"/>
+      <char id="char274" states="states275"/>
+      <char id="char276" states="states277"/>
+      <char id="char278" states="states279"/>
+      <char id="char280" states="states281"/>
+      <char id="char282" states="states283"/>
+      <char id="char284" states="states285"/>
+      <char id="char286" states="states287"/>
+      <char id="char288" states="states289"/>
+      <char id="char290" states="states291"/>
+      <char id="char292" states="states293"/>
+      <char id="char294" states="states295"/>
+      <char id="char296" states="states297"/>
+      <char id="char298" states="states299"/>
+      <char id="char300" states="states301"/>
+      <char id="char302" states="states303"/>
+      <char id="char304" states="states305"/>
+      <char id="char306" states="states307"/>
+      <char id="char308" states="states309"/>
+      <char id="char310" states="states311"/>
+      <char id="char312" states="states313"/>
+      <char id="char314" states="states315"/>
+      <char id="char316" states="states317"/>
+      <char id="char318" states="states319"/>
+      <char id="char320" states="states321"/>
+      <char id="char322" states="states323"/>
+      <char id="char324" states="states325"/>
+      <char id="char326" states="states327"/>
+      <char id="char328" states="states329"/>
+      <char id="char330" states="states331"/>
+      <char id="char332" states="states333"/>
+      <char id="char334" states="states335"/>
+      <char id="char336" states="states337"/>
+      <char id="char338" states="states339"/>
+      <char id="char340" states="states341"/>
+      <char id="char342" states="states343"/>
+      <char id="char344" states="states345"/>
+      <char id="char346" states="states347"/>
+      <char id="char348" states="states349"/>
+      <char id="char350" states="states351"/>
+      <char id="char352" states="states353"/>
+      <char id="char354" states="states355"/>
+      <char id="char356" states="states357"/>
+      <char id="char358" states="states359"/>
+      <char id="char360" states="states361"/>
+      <char id="char362" states="states363"/>
+      <char id="char364" states="states365"/>
+      <char id="char366" states="states367"/>
+      <char id="char368" states="states369"/>
+      <char id="char370" states="states371"/>
+      <char id="char372" states="states373"/>
+      <char id="char374" states="states375"/>
+      <char id="char376" states="states377"/>
+      <char id="char378" states="states379"/>
+      <char id="char380" states="states381"/>
+      <char id="char382" states="states383"/>
+      <char id="char384" states="states385"/>
+      <char id="char386" states="states387"/>
+      <char id="char388" states="states389"/>
+      <char id="char390" states="states391"/>
+      <char id="char392" states="states393"/>
+      <char id="char394" states="states395"/>
+      <char id="char396" states="states397"/>
+      <char id="char398" states="states399"/>
+      <char id="char400" states="states401"/>
+      <char id="char402" states="states403"/>
+      <char id="char404" states="states405"/>
+      <char id="char406" states="states407"/>
+      <char id="char408" states="states409"/>
+      <char id="char410" states="states411"/>
+      <char id="char412" states="states413"/>
+      <char id="char414" states="states415"/>
+      <char id="char416" states="states417"/>
+      <char id="char418" states="states419"/>
+      <char id="char420" states="states421"/>
+      <char id="char422" states="states423"/>
+      <char id="char424" states="states425"/>
+      <char id="char426" states="states427"/>
+      <char id="char428" states="states429"/>
+      <char id="char430" states="states431"/>
+      <char id="char432" states="states433"/>
+      <char id="char434" states="states435"/>
+      <char id="char436" states="states437"/>
+      <char id="char438" states="states439"/>
+      <char id="char440" states="states441"/>
+      <char id="char442" states="states443"/>
+      <char id="char444" states="states445"/>
+      <char id="char446" states="states447"/>
+      <char id="char448" states="states449"/>
+      <char id="char450" states="states451"/>
+      <char id="char452" states="states453"/>
+      <char id="char454" states="states455"/>
+      <char id="char456" states="states457"/>
+      <char id="char458" states="states459"/>
+      <char id="char460" states="states461"/>
+      <char id="char462" states="states463"/>
+      <char id="char464" states="states465"/>
+      <char id="char466" states="states467"/>
+      <char id="char468" states="states469"/>
+      <char id="char470" states="states471"/>
+      <char id="char472" states="states473"/>
+      <char id="char474" states="states475"/>
+      <char id="char476" states="states477"/>
+      <char id="char478" states="states479"/>
+      <char id="char480" states="states481"/>
+      <char id="char482" states="states483"/>
+      <char id="char484" states="states485"/>
+      <char id="char486" states="states487"/>
+      <char id="char488" states="states489"/>
+      <char id="char490" states="states491"/>
+      <char id="char492" states="states493"/>
+      <char id="char494" states="states495"/>
+      <char id="char496" states="states497"/>
+      <char id="char498" states="states499"/>
+      <char id="char500" states="states501"/>
+      <char id="char502" states="states503"/>
+      <char id="char504" states="states505"/>
+      <char id="char506" states="states507"/>
+      <char id="char508" states="states509"/>
+      <char id="char510" states="states511"/>
+      <char id="char512" states="states513"/>
+      <char id="char514" states="states515"/>
+      <char id="char516" states="states517"/>
+      <char id="char518" states="states519"/>
+      <char id="char520" states="states521"/>
+      <char id="char522" states="states523"/>
+      <char id="char524" states="states525"/>
+      <char id="char526" states="states527"/>
+      <char id="char528" states="states529"/>
+      <char id="char530" states="states531"/>
+      <char id="char532" states="states533"/>
+      <char id="char534" states="states535"/>
+      <char id="char536" states="states537"/>
+      <char id="char538" states="states539"/>
+      <char id="char540" states="states541"/>
+      <char id="char542" states="states543"/>
+      <char id="char544" states="states545"/>
+      <char id="char546" states="states547"/>
+      <char id="char548" states="states549"/>
+      <char id="char550" states="states551"/>
+      <char id="char552" states="states553"/>
+      <char id="char554" states="states555"/>
+      <char id="char556" states="states557"/>
+      <char id="char558" states="states559"/>
+      <char id="char560" states="states561"/>
+      <char id="char562" states="states563"/>
+      <char id="char564" states="states565"/>
+      <char id="char566" states="states567"/>
+      <char id="char568" states="states569"/>
+      <char id="char570" states="states571"/>
+      <char id="char572" states="states573"/>
+      <char id="char574" states="states575"/>
+      <char id="char576" states="states577"/>
+      <char id="char578" states="states579"/>
+      <char id="char580" states="states581"/>
+      <char id="char582" states="states583"/>
+      <char id="char584" states="states585"/>
+      <char id="char586" states="states587"/>
+      <char id="char588" states="states589"/>
+      <char id="char590" states="states591"/>
+      <char id="char592" states="states593"/>
+      <char id="char594" states="states595"/>
+      <char id="char596" states="states597"/>
+      <char id="char598" states="states599"/>
+      <char id="char600" states="states601"/>
+      <char id="char602" states="states603"/>
+      <char id="char604" states="states605"/>
+      <char id="char606" states="states607"/>
+      <char id="char608" states="states609"/>
+      <char id="char610" states="states611"/>
+      <char id="char612" states="states613"/>
+      <char id="char614" states="states615"/>
+      <char id="char616" states="states617"/>
+      <char id="char618" states="states619"/>
+      <char id="char620" states="states621"/>
+      <char id="char622" states="states623"/>
+      <char id="char624" states="states625"/>
+      <char id="char626" states="states627"/>
+      <char id="char628" states="states629"/>
+      <char id="char630" states="states631"/>
+      <char id="char632" states="states633"/>
+      <char id="char634" states="states635"/>
+      <char id="char636" states="states637"/>
+      <char id="char638" states="states639"/>
+      <char id="char640" states="states641"/>
+      <char id="char642" states="states643"/>
+      <char id="char644" states="states645"/>
+      <char id="char646" states="states647"/>
+      <char id="char648" states="states649"/>
+      <char id="char650" states="states651"/>
+      <char id="char652" states="states653"/>
+      <char id="char654" states="states655"/>
+      <char id="char656" states="states657"/>
+      <char id="char658" states="states659"/>
+      <char id="char660" states="states661"/>
+      <char id="char662" states="states663"/>
+      <char id="char664" states="states665"/>
+      <char id="char666" states="states667"/>
+      <char id="char668" states="states669"/>
+      <char id="char670" states="states671"/>
+      <char id="char672" states="states673"/>
+      <char id="char674" states="states675"/>
+      <char id="char676" states="states677"/>
+      <char id="char678" states="states679"/>
+      <char id="char680" states="states681"/>
+      <char id="char682" states="states683"/>
+      <char id="char684" states="states685"/>
+      <char id="char686" states="states687"/>
+      <char id="char688" states="states689"/>
+      <char id="char690" states="states691"/>
+      <char id="char692" states="states693"/>
+      <char id="char694" states="states695"/>
+      <char id="char696" states="states697"/>
+      <char id="char698" states="states699"/>
+      <char id="char700" states="states701"/>
+      <char id="char702" states="states703"/>
+      <char id="char704" states="states705"/>
+      <char id="char706" states="states707"/>
+      <char id="char708" states="states709"/>
+      <char id="char710" states="states711"/>
+      <char id="char712" states="states713"/>
+      <char id="char714" states="states715"/>
+      <char id="char716" states="states717"/>
+      <char id="char718" states="states719"/>
+      <char id="char720" states="states721"/>
+      <char id="char722" states="states723"/>
+      <char id="char724" states="states725"/>
+      <char id="char726" states="states727"/>
+      <char id="char728" states="states729"/>
+      <char id="char730" states="states731"/>
+      <char id="char732" states="states733"/>
+      <char id="char734" states="states735"/>
+      <char id="char736" states="states737"/>
+      <char id="char738" states="states739"/>
+      <char id="char740" states="states741"/>
+      <char id="char742" states="states743"/>
+      <char id="char744" states="states745"/>
+      <char id="char746" states="states747"/>
+      <char id="char748" states="states749"/>
+      <char id="char750" states="states751"/>
+      <char id="char752" states="states753"/>
+      <char id="char754" states="states755"/>
+      <char id="char756" states="states757"/>
+      <char id="char758" states="states759"/>
+      <char id="char760" states="states761"/>
+      <char id="char762" states="states763"/>
+      <char id="char764" states="states765"/>
+      <char id="char766" states="states767"/>
+      <char id="char768" states="states769"/>
+      <char id="char770" states="states771"/>
+      <char id="char772" states="states773"/>
+      <char id="char774" states="states775"/>
+      <char id="char776" states="states777"/>
+      <char id="char778" states="states779"/>
+      <char id="char780" states="states781"/>
+      <char id="char782" states="states783"/>
+      <char id="char784" states="states785"/>
+      <char id="char786" states="states787"/>
+      <char id="char788" states="states789"/>
+      <char id="char790" states="states791"/>
+      <char id="char792" states="states793"/>
+      <char id="char794" states="states795"/>
+      <char id="char796" states="states797"/>
+      <char id="char798" states="states799"/>
+      <char id="char800" states="states801"/>
+      <char id="char802" states="states803"/>
+      <char id="char804" states="states805"/>
+      <char id="char806" states="states807"/>
+      <char id="char808" states="states809"/>
+      <char id="char810" states="states811"/>
+      <char id="char812" states="states813"/>
+      <char id="char814" states="states815"/>
+      <char id="char816" states="states817"/>
+      <char id="char818" states="states819"/>
+      <char id="char820" states="states821"/>
+      <char id="char822" states="states823"/>
+      <char id="char824" states="states825"/>
+      <char id="char826" states="states827"/>
+      <char id="char828" states="states829"/>
+      <char id="char830" states="states831"/>
+      <char id="char832" states="states833"/>
+      <char id="char834" states="states835"/>
+      <char id="char836" states="states837"/>
+      <char id="char838" states="states839"/>
+      <char id="char840" states="states841"/>
+      <char id="char842" states="states843"/>
+      <char id="char844" states="states845"/>
+      <char id="char846" states="states847"/>
+      <char id="char848" states="states849"/>
+      <char id="char850" states="states851"/>
+      <char id="char852" states="states853"/>
+      <char id="char854" states="states855"/>
+      <char id="char856" states="states857"/>
+      <char id="char858" states="states859"/>
+      <char id="char860" states="states861"/>
+      <char id="char862" states="states863"/>
+      <char id="char864" states="states865"/>
+      <char id="char866" states="states867"/>
+      <char id="char868" states="states869"/>
+      <char id="char870" states="states871"/>
+      <char id="char872" states="states873"/>
+      <char id="char874" states="states875"/>
+      <char id="char876" states="states877"/>
+      <char id="char878" states="states879"/>
+      <char id="char880" states="states881"/>
+      <char id="char882" states="states883"/>
+      <char id="char884" states="states885"/>
+      <char id="char886" states="states887"/>
+      <char id="char888" states="states889"/>
+      <char id="char890" states="states891"/>
+      <char id="char892" states="states893"/>
+      <char id="char894" states="states895"/>
+      <char id="char896" states="states897"/>
+      <char id="char898" states="states899"/>
+      <char id="char900" states="states901"/>
+      <char id="char902" states="states903"/>
+      <char id="char904" states="states905"/>
+      <char id="char906" states="states907"/>
+      <char id="char908" states="states909"/>
+      <char id="char910" states="states911"/>
+      <char id="char912" states="states913"/>
+      <char id="char914" states="states915"/>
+      <char id="char916" states="states917"/>
+      <char id="char918" states="states919"/>
+      <char id="char920" states="states921"/>
+      <char id="char922" states="states923"/>
+      <char id="char924" states="states925"/>
+      <char id="char926" states="states927"/>
+      <char id="char928" states="states929"/>
+      <char id="char930" states="states931"/>
+      <char id="char932" states="states933"/>
+      <char id="char934" states="states935"/>
+      <char id="char936" states="states937"/>
+      <char id="char938" states="states939"/>
+      <char id="char940" states="states941"/>
+      <char id="char942" states="states943"/>
+      <char id="char944" states="states945"/>
+      <char id="char946" states="states947"/>
+      <char id="char948" states="states949"/>
+      <char id="char950" states="states951"/>
+      <char id="char952" states="states953"/>
+      <char id="char954" states="states955"/>
+      <char id="char956" states="states957"/>
+      <char id="char958" states="states959"/>
+      <char id="char960" states="states961"/>
+      <char id="char962" states="states963"/>
+      <char id="char964" states="states965"/>
+      <char id="char966" states="states967"/>
+      <char id="char968" states="states969"/>
+      <char id="char970" states="states971"/>
+      <char id="char972" states="states973"/>
+      <char id="char974" states="states975"/>
+      <char id="char976" states="states977"/>
+      <char id="char978" states="states979"/>
+      <char id="char980" states="states981"/>
+      <char id="char982" states="states983"/>
+      <char id="char984" states="states985"/>
+      <char id="char986" states="states987"/>
+      <char id="char988" states="states989"/>
+      <char id="char990" states="states991"/>
+      <char id="char992" states="states993"/>
+      <char id="char994" states="states995"/>
+      <char id="char996" states="states997"/>
+      <char id="char998" states="states999"/>
+      <char id="char1000" states="states1001"/>
+      <char id="char1002" states="states1003"/>
+      <char id="char1004" states="states1005"/>
+      <char id="char1006" states="states1007"/>
+      <char id="char1008" states="states1009"/>
+      <char id="char1010" states="states1011"/>
+      <char id="char1012" states="states1013"/>
+      <char id="char1014" states="states1015"/>
+      <char id="char1016" states="states1017"/>
+      <char id="char1018" states="states1019"/>
+      <char id="char1020" states="states1021"/>
+      <char id="char1022" states="states1023"/>
+      <char id="char1024" states="states1025"/>
+      <char id="char1026" states="states1027"/>
+      <char id="char1028" states="states1029"/>
+      <char id="char1030" states="states1031"/>
+      <char id="char1032" states="states1033"/>
+      <char id="char1034" states="states1035"/>
+      <char id="char1036" states="states1037"/>
+      <char id="char1038" states="states1039"/>
+      <char id="char1040" states="states1041"/>
+      <char id="char1042" states="states1043"/>
+      <char id="char1044" states="states1045"/>
+      <char id="char1046" states="states1047"/>
+      <char id="char1048" states="states1049"/>
+      <char id="char1050" states="states1051"/>
+      <char id="char1052" states="states1053"/>
+      <char id="char1054" states="states1055"/>
+      <char id="char1056" states="states1057"/>
+      <char id="char1058" states="states1059"/>
+      <char id="char1060" states="states1061"/>
+      <char id="char1062" states="states1063"/>
+      <char id="char1064" states="states1065"/>
+      <char id="char1066" states="states1067"/>
+      <char id="char1068" states="states1069"/>
+      <char id="char1070" states="states1071"/>
+      <char id="char1072" states="states1073"/>
+      <char id="char1074" states="states1075"/>
+      <char id="char1076" states="states1077"/>
+      <char id="char1078" states="states1079"/>
+      <char id="char1080" states="states1081"/>
+      <char id="char1082" states="states1083"/>
+      <char id="char1084" states="states1085"/>
+      <char id="char1086" states="states1087"/>
+      <char id="char1088" states="states1089"/>
+      <char id="char1090" states="states1091"/>
+      <char id="char1092" states="states1093"/>
+      <char id="char1094" states="states1095"/>
+      <char id="char1096" states="states1097"/>
+      <char id="char1098" states="states1099"/>
+      <char id="char1100" states="states1101"/>
+      <char id="char1102" states="states1103"/>
+      <char id="char1104" states="states1105"/>
+      <char id="char1106" states="states1107"/>
+      <char id="char1108" states="states1109"/>
+      <char id="char1110" states="states1111"/>
+      <char id="char1112" states="states1113"/>
+      <char id="char1114" states="states1115"/>
+      <char id="char1116" states="states1117"/>
+      <char id="char1118" states="states1119"/>
+      <char id="char1120" states="states1121"/>
+      <char id="char1122" states="states1123"/>
+      <char id="char1124" states="states1125"/>
+      <char id="char1126" states="states1127"/>
+      <char id="char1128" states="states1129"/>
+      <char id="char1130" states="states1131"/>
+      <char id="char1132" states="states1133"/>
+      <char id="char1134" states="states1135"/>
+      <char id="char1136" states="states1137"/>
+      <char id="char1138" states="states1139"/>
+      <char id="char1140" states="states1141"/>
+      <char id="char1142" states="states1143"/>
+      <char id="char1144" states="states1145"/>
+      <char id="char1146" states="states1147"/>
+      <char id="char1148" states="states1149"/>
+      <char id="char1150" states="states1151"/>
+      <char id="char1152" states="states1153"/>
+      <char id="char1154" states="states1155"/>
+      <char id="char1156" states="states1157"/>
+      <char id="char1158" states="states1159"/>
+      <char id="char1160" states="states1161"/>
+      <char id="char1162" states="states1163"/>
+      <char id="char1164" states="states1165"/>
+      <char id="char1166" states="states1167"/>
+      <char id="char1168" states="states1169"/>
+      <char id="char1170" states="states1171"/>
+      <char id="char1172" states="states1173"/>
+      <char id="char1174" states="states1175"/>
+      <char id="char1176" states="states1177"/>
+      <char id="char1178" states="states1179"/>
+      <char id="char1180" states="states1181"/>
+      <char id="char1182" states="states1183"/>
+      <char id="char1184" states="states1185"/>
+      <char id="char1186" states="states1187"/>
+      <char id="char1188" states="states1189"/>
+      <char id="char1190" states="states1191"/>
+      <char id="char1192" states="states1193"/>
+      <char id="char1194" states="states1195"/>
+      <char id="char1196" states="states1197"/>
+      <char id="char1198" states="states1199"/>
+      <char id="char1200" states="states1201"/>
+      <char id="char1202" states="states1203"/>
+      <char id="char1204" states="states1205"/>
+      <char id="char1206" states="states1207"/>
+      <char id="char1208" states="states1209"/>
+      <char id="char1210" states="states1211"/>
+      <char id="char1212" states="states1213"/>
+      <char id="char1214" states="states1215"/>
+      <char id="char1216" states="states1217"/>
+      <char id="char1218" states="states1219"/>
+      <char id="char1220" states="states1221"/>
+      <char id="char1222" states="states1223"/>
+      <char id="char1224" states="states1225"/>
+      <char id="char1226" states="states1227"/>
+      <char id="char1228" states="states1229"/>
+      <char id="char1230" states="states1231"/>
+      <char id="char1232" states="states1233"/>
+      <char id="char1234" states="states1235"/>
+      <char id="char1236" states="states1237"/>
+      <char id="char1238" states="states1239"/>
+      <char id="char1240" states="states1241"/>
+      <char id="char1242" states="states1243"/>
+      <char id="char1244" states="states1245"/>
+      <char id="char1246" states="states1247"/>
+      <char id="char1248" states="states1249"/>
+      <char id="char1250" states="states1251"/>
+      <char id="char1252" states="states1253"/>
+      <char id="char1254" states="states1255"/>
+      <char id="char1256" states="states1257"/>
+      <char id="char1258" states="states1259"/>
+      <char id="char1260" states="states1261"/>
+      <char id="char1262" states="states1263"/>
+      <char id="char1264" states="states1265"/>
+      <char id="char1266" states="states1267"/>
+      <char id="char1268" states="states1269"/>
+      <char id="char1270" states="states1271"/>
+      <char id="char1272" states="states1273"/>
+      <char id="char1274" states="states1275"/>
+      <char id="char1276" states="states1277"/>
+      <char id="char1278" states="states1279"/>
+      <char id="char1280" states="states1281"/>
+      <char id="char1282" states="states1283"/>
+      <char id="char1284" states="states1285"/>
+      <char id="char1286" states="states1287"/>
+      <char id="char1288" states="states1289"/>
+      <char id="char1290" states="states1291"/>
+      <char id="char1292" states="states1293"/>
+      <char id="char1294" states="states1295"/>
+      <char id="char1296" states="states1297"/>
+      <char id="char1298" states="states1299"/>
+      <char id="char1300" states="states1301"/>
+      <char id="char1302" states="states1303"/>
+      <char id="char1304" states="states1305"/>
+      <char id="char1306" states="states1307"/>
+      <char id="char1308" states="states1309"/>
+      <char id="char1310" states="states1311"/>
+      <char id="char1312" states="states1313"/>
+      <char id="char1314" states="states1315"/>
+      <char id="char1316" states="states1317"/>
+      <char id="char1318" states="states1319"/>
+      <char id="char1320" states="states1321"/>
+      <char id="char1322" states="states1323"/>
+      <char id="char1324" states="states1325"/>
+      <char id="char1326" states="states1327"/>
+      <char id="char1328" states="states1329"/>
+      <char id="char1330" states="states1331"/>
+      <char id="char1332" states="states1333"/>
+      <char id="char1334" states="states1335"/>
+      <char id="char1336" states="states1337"/>
+      <char id="char1338" states="states1339"/>
+      <char id="char1340" states="states1341"/>
+      <char id="char1342" states="states1343"/>
+      <char id="char1344" states="states1345"/>
+      <char id="char1346" states="states1347"/>
+      <char id="char1348" states="states1349"/>
+      <char id="char1350" states="states1351"/>
+      <char id="char1352" states="states1353"/>
+      <char id="char1354" states="states1355"/>
+      <char id="char1356" states="states1357"/>
+      <char id="char1358" states="states1359"/>
+      <char id="char1360" states="states1361"/>
+      <char id="char1362" states="states1363"/>
+      <char id="char1364" states="states1365"/>
+      <char id="char1366" states="states1367"/>
+      <char id="char1368" states="states1369"/>
+      <char id="char1370" states="states1371"/>
+      <char id="char1372" states="states1373"/>
+      <char id="char1374" states="states1375"/>
+      <char id="char1376" states="states1377"/>
+      <char id="char1378" states="states1379"/>
+      <char id="char1380" states="states1381"/>
+      <char id="char1382" states="states1383"/>
+      <char id="char1384" states="states1385"/>
+      <char id="char1386" states="states1387"/>
+      <char id="char1388" states="states1389"/>
+      <char id="char1390" states="states1391"/>
+      <char id="char1392" states="states1393"/>
+      <char id="char1394" states="states1395"/>
+      <char id="char1396" states="states1397"/>
+      <char id="char1398" states="states1399"/>
+      <char id="char1400" states="states1401"/>
+      <char id="char1402" states="states1403"/>
+      <char id="char1404" states="states1405"/>
+      <char id="char1406" states="states1407"/>
+      <char id="char1408" states="states1409"/>
+      <char id="char1410" states="states1411"/>
+      <char id="char1412" states="states1413"/>
+      <char id="char1414" states="states1415"/>
+      <char id="char1416" states="states1417"/>
+      <char id="char1418" states="states1419"/>
+      <char id="char1420" states="states1421"/>
+      <char id="char1422" states="states1423"/>
+      <char id="char1424" states="states1425"/>
+      <char id="char1426" states="states1427"/>
+      <char id="char1428" states="states1429"/>
+      <char id="char1430" states="states1431"/>
+      <char id="char1432" states="states1433"/>
+      <char id="char1434" states="states1435"/>
+      <char id="char1436" states="states1437"/>
+      <char id="char1438" states="states1439"/>
+      <char id="char1440" states="states1441"/>
+      <char id="char1442" states="states1443"/>
+      <char id="char1444" states="states1445"/>
+      <char id="char1446" states="states1447"/>
+      <char id="char1448" states="states1449"/>
+      <char id="char1450" states="states1451"/>
+      <char id="char1452" states="states1453"/>
+      <char id="char1454" states="states1455"/>
+      <char id="char1456" states="states1457"/>
+      <char id="char1458" states="states1459"/>
+      <char id="char1460" states="states1461"/>
+      <char id="char1462" states="states1463"/>
+      <char id="char1464" states="states1465"/>
+      <char id="char1466" states="states1467"/>
+      <char id="char1468" states="states1469"/>
+      <char id="char1470" states="states1471"/>
+      <char id="char1472" states="states1473"/>
+      <char id="char1474" states="states1475"/>
+      <char id="char1476" states="states1477"/>
+      <char id="char1478" states="states1479"/>
+      <char id="char1480" states="states1481"/>
+      <char id="char1482" states="states1483"/>
+      <char id="char1484" states="states1485"/>
+      <char id="char1486" states="states1487"/>
+      <char id="char1488" states="states1489"/>
+      <char id="char1490" states="states1491"/>
+      <char id="char1492" states="states1493"/>
+      <char id="char1494" states="states1495"/>
+      <char id="char1496" states="states1497"/>
+      <char id="char1498" states="states1499"/>
+      <char id="char1500" states="states1501"/>
+      <char id="char1502" states="states1503"/>
+      <char id="char1504" states="states1505"/>
+      <char id="char1506" states="states1507"/>
+      <char id="char1508" states="states1509"/>
+      <char id="char1510" states="states1511"/>
+      <char id="char1512" states="states1513"/>
+      <char id="char1514" states="states1515"/>
+      <char id="char1516" states="states1517"/>
+      <char id="char1518" states="states1519"/>
+      <char id="char1520" states="states1521"/>
+      <char id="char1522" states="states1523"/>
+      <char id="char1524" states="states1525"/>
+      <char id="char1526" states="states1527"/>
+      <char id="char1528" states="states1529"/>
+      <char id="char1530" states="states1531"/>
+      <char id="char1532" states="states1533"/>
+      <char id="char1534" states="states1535"/>
+      <char id="char1536" states="states1537"/>
+      <char id="char1538" states="states1539"/>
+      <char id="char1540" states="states1541"/>
+      <char id="char1542" states="states1543"/>
+      <char id="char1544" states="states1545"/>
+      <char id="char1546" states="states1547"/>
+      <char id="char1548" states="states1549"/>
+    </format>
+    <matrix>
+      <row id="row7" label="D.persimilis" otu="otu1551">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s3"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s4"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s1"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s1"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s2"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s2"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s3"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s4"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s2"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s3"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s4"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s4"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s2"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s3"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s2"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s3"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s4"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s2"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s2"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1552" label="D.pseudoobscura1" otu="otu1553">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s3"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s4"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s1"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s1"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s2"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s2"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s3"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s4"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s2"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s3"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s4"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s4"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s2"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s4"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s3"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s2"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s3"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s4"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s2"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s2"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1554" label="D.pseudoobscura2" otu="otu1555">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s3"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s4"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s1"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s1"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s2"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s2"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s3"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s4"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s2"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s3"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s4"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s4"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s2"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s4"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s3"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s2"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s3"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s4"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s2"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s2"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1556" label="D.miranda" otu="otu1557">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s3"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s4"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s1"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s2"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s2"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s4"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s2"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s1"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s3"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s4"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s1"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s4"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s2"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s4"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s3"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s2"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s3"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s4"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s2"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s2"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1558" label="D.ambigua" otu="otu1559">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s4"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s3"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s4"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s3"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s3"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s3"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s2"/>
+        <cell char="char428" state="s1"/>
+        <cell char="char430" state="s3"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s3"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s2"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s4"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s2"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s2"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s3"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s2"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s3"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s4"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s3"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s3"/>
+        <cell char="char1220" state="s1"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s4"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s2"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s2"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1560" label="D.subobscura" otu="otu1561">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s4"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s1"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s4"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s3"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s4"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s4"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s4"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s1"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s4"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s3"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s3"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s1"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s4"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s1"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s4"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s2"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s1"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s2"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s1"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s2"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s1"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s2"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s4"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s4"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s4"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s4"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s4"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s2"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s3"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s3"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s4"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s1"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s2"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s1"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s1"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s3"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s1"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s4"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s2"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1562" label="D.madeirensis" otu="otu1563">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s1"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s1"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s4"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s3"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s4"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s4"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s4"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s1"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s4"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s3"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s1"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s4"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s1"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s4"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s2"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s1"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s2"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s1"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s2"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s1"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s2"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s4"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s4"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s4"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s4"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s2"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s3"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s3"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s4"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s1"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s2"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s1"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s1"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s3"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s1"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s4"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s2"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1564" label="D.willistoni" otu="otu1565">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s1"/>
+        <cell char="char164" state="s4"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s1"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s3"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s4"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s4"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s4"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s1"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s1"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s4"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s1"/>
+        <cell char="char412" state="s2"/>
+        <cell char="char414" state="s1"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s1"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s4"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s1"/>
+        <cell char="char458" state="s4"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s4"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s1"/>
+        <cell char="char506" state="s4"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s4"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s4"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s4"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s4"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s1"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s4"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s2"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s2"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s4"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s1"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s4"/>
+        <cell char="char992" state="s2"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s1"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s1"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s1"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s1"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s3"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s3"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s4"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s4"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s1"/>
+        <cell char="char1142" state="s4"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s4"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s1"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s4"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s4"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s1"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s4"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s1"/>
+        <cell char="char1460" state="s4"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s4"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1566" label="D.lebanonensis" otu="otu1567">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s1"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s4"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s4"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s2"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s4"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s3"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s2"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s1"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s4"/>
+        <cell char="char212" state="s4"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s4"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s4"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s1"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s1"/>
+        <cell char="char248" state="s3"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s2"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s1"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s1"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s2"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s1"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s1"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s4"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s3"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s3"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s1"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s4"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s4"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s1"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s2"/>
+        <cell char="char536" state="s1"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s4"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s4"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s1"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s2"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s4"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s4"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s4"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s4"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s4"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s2"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s3"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s4"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s1"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s4"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s3"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s4"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s2"/>
+        <cell char="char1164" state="s4"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s1"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s1"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s4"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s2"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s1"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s2"/>
+        <cell char="char1304" state="s3"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s1"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s3"/>
+        <cell char="char1326" state="s4"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s1"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s4"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1568" label="D.melanogaster" otu="otu1569">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s4"/>
+        <cell char="char26" state="s1"/>
+        <cell char="char28" state="s2"/>
+        <cell char="char30" state="s4"/>
+        <cell char="char32" state="s4"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s3"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s4"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s2"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s1"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s2"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s2"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s2"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s4"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s3"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s4"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s4"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s2"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s2"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s2"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1570" label="D.simulans" otu="otu1571">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s4"/>
+        <cell char="char26" state="s1"/>
+        <cell char="char28" state="s2"/>
+        <cell char="char30" state="s4"/>
+        <cell char="char32" state="s4"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s3"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s4"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s2"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s2"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s1"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s1"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s2"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s2"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s2"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s3"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s4"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s2"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s2"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s3"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s2"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1572" label="D.mauritiana" otu="otu1573">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s4"/>
+        <cell char="char26" state="s1"/>
+        <cell char="char28" state="s2"/>
+        <cell char="char30" state="s4"/>
+        <cell char="char32" state="s4"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s3"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s4"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s2"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s4"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s2"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s1"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s2"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s2"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s2"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s1"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s3"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s4"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s2"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s2"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s1"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s2"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1574" label="D.teissieri" otu="otu1575">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s4"/>
+        <cell char="char26" state="s1"/>
+        <cell char="char28" state="s2"/>
+        <cell char="char30" state="s2"/>
+        <cell char="char32" state="s4"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s3"/>
+        <cell char="char68" state="s3"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s3"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s2"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s2"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s2"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s2"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s1"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s1"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s4"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s2"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s2"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s3"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s4"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s2"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s2"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s2"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s4"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1576" label="D.orena" otu="otu1577">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s2"/>
+        <cell char="char26" state="s1"/>
+        <cell char="char28" state="s2"/>
+        <cell char="char30" state="s2"/>
+        <cell char="char32" state="s4"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s2"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s4"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s2"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s2"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s3"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s2"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s4"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s3"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s3"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s3"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1578" label="D.sechellia" otu="otu1579">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s4"/>
+        <cell char="char26" state="s1"/>
+        <cell char="char28" state="s2"/>
+        <cell char="char30" state="s4"/>
+        <cell char="char32" state="s4"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s3"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s4"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s2"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s4"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s1"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s2"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s4"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s2"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s2"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s3"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s4"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s2"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s2"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s2"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1580" label="D.yakuba" otu="otu1581">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s4"/>
+        <cell char="char26" state="s1"/>
+        <cell char="char28" state="s2"/>
+        <cell char="char30" state="s2"/>
+        <cell char="char32" state="s4"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s3"/>
+        <cell char="char68" state="s3"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s1"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s3"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s2"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s2"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s3"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s2"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s2"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s1"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s1"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s4"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s2"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s2"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s3"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s4"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s2"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s2"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s2"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s4"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1582" label="D.tsacasi" otu="otu1583">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s1"/>
+        <cell char="char22" state="s2"/>
+        <cell char="char24" state="s3"/>
+        <cell char="char26" state="s1"/>
+        <cell char="char28" state="s2"/>
+        <cell char="char30" state="s1"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s1"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s2"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s3"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s2"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s1"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s4"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s4"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s3"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s3"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s1"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s1"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s4"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s3"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s4"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s2"/>
+        <cell char="char536" state="s1"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s4"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s2"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s2"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s2"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s1"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s3"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s3"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s3"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s2"/>
+        <cell char="char818" state="s4"/>
+        <cell char="char820" state="s3"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s3"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s1"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s3"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s3"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s1"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s2"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s2"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s3"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s1"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s2"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s4"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s1"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s3"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s3"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s2"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s2"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s2"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s4"/>
+        <cell char="char1224" state="s3"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s4"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s2"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s2"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s1"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s3"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s2"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s3"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s3"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s3"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s2"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s2"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1584" label="D.crassifemur" otu="otu1585">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s17"/>
+        <cell char="char16" state="s17"/>
+        <cell char="char18" state="s17"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s2"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s3"/>
+        <cell char="char46" state="s3"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s3"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s3"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s1"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s4"/>
+        <cell char="char248" state="s3"/>
+        <cell char="char250" state="s2"/>
+        <cell char="char252" state="s3"/>
+        <cell char="char254" state="s2"/>
+        <cell char="char256" state="s2"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s2"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s3"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s1"/>
+        <cell char="char362" state="s4"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s4"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s4"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s1"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s1"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s2"/>
+        <cell char="char424" state="s1"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s4"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s4"/>
+        <cell char="char446" state="s3"/>
+        <cell char="char448" state="s4"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s3"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s4"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s2"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s2"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s3"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s1"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s4"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s3"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s4"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s3"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s1"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s1"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s1"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s4"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s4"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s3"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s1"/>
+        <cell char="char1142" state="s4"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s1"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s4"/>
+        <cell char="char1268" state="s4"/>
+        <cell char="char1270" state="s4"/>
+        <cell char="char1272" state="s2"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s4"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s1"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s1"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s4"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s3"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s1"/>
+        <cell char="char1476" state="s1"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1586" label="D.montana" otu="otu1587">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s1"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s3"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s3"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s1"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s3"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s1"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s4"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s3"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s1"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s2"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s3"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s1"/>
+        <cell char="char1458" state="s1"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1588" label="D.buzzatii_1" otu="otu1589">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s2"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s4"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s4"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s1"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s4"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s1"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s4"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s4"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s1"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s2"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s2"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s4"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s1"/>
+        <cell char="char602" state="s3"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s1"/>
+        <cell char="char614" state="s3"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s1"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s3"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s1"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s2"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s2"/>
+        <cell char="char906" state="s1"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s4"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s2"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s3"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s4"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s2"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s1"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s3"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s4"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s4"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1590" label="D.buzzatii_2" otu="otu1591">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s4"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s1"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s1"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s4"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s4"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s1"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s2"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s1"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s4"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s4"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s4"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s3"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s1"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s4"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1592" label="D.texana" otu="otu1593">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s4"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s4"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s2"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s1"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s4"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s4"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s4"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s2"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s1"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s4"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s2"/>
+        <cell char="char1472" state="s4"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1594" label="D.lummei" otu="otu1595">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s4"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s4"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s4"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s2"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s4"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s4"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s1"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s3"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s4"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s4"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s2"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s1"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s3"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s2"/>
+        <cell char="char1472" state="s4"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1596" label="D.lacicola" otu="otu1597">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s1"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s1"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s1"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s1"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s1"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s4"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s3"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s1"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s4"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s3"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s1"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s4"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s2"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s3"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s1"/>
+        <cell char="char1458" state="s1"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1598" label="D.borealis" otu="otu1599">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s1"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s1"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s3"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s1"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s3"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s1"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s4"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s3"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s1"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s3"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s2"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s1"/>
+        <cell char="char1458" state="s1"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1600" label="D.flavomontana" otu="otu1601">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s1"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s1"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s1"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s2"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s3"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s3"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s4"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s3"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s1"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s1"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s3"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s4"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s3"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s1"/>
+        <cell char="char1458" state="s1"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1602" label="D.americana" otu="otu1603">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s1"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s4"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s1"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s4"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s4"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s4"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s2"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s1"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s2"/>
+        <cell char="char1472" state="s4"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1604" label="Sc.albovittata" otu="otu1605">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s4"/>
+        <cell char="char16" state="s3"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s3"/>
+        <cell char="char46" state="s3"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s4"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s1"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s1"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s2"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s3"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s4"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s1"/>
+        <cell char="char362" state="s4"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s4"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s4"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s1"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s1"/>
+        <cell char="char416" state="s3"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s3"/>
+        <cell char="char444" state="s4"/>
+        <cell char="char446" state="s3"/>
+        <cell char="char448" state="s4"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s4"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s4"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s3"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s3"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s1"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s4"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s4"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s3"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s1"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s1"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s4"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s1"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s4"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s3"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s1"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s4"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s4"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s4"/>
+        <cell char="char1124" state="s3"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s2"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s1"/>
+        <cell char="char1142" state="s4"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s2"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s1"/>
+        <cell char="char1246" state="s1"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s2"/>
+        <cell char="char1266" state="s2"/>
+        <cell char="char1268" state="s4"/>
+        <cell char="char1270" state="s4"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s4"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s1"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s1"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s3"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s4"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s3"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s1"/>
+        <cell char="char1450" state="s1"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s1"/>
+        <cell char="char1476" state="s1"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1606" label="D.immigrans" otu="otu1607">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s3"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s1"/>
+        <cell char="char154" state="s1"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s3"/>
+        <cell char="char162" state="s1"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s2"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s1"/>
+        <cell char="char182" state="s3"/>
+        <cell char="char184" state="s2"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s4"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s4"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s3"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s1"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s4"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s2"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s4"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s2"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s3"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s3"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s2"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s2"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s1"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s1"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s1"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s4"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s2"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s1"/>
+        <cell char="char650" state="s1"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s1"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s2"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s4"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s2"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s4"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s2"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s4"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s4"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s1"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s4"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s1"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s4"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s4"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s4"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s2"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s1"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s3"/>
+        <cell char="char1258" state="s1"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s1"/>
+        <cell char="char1306" state="s2"/>
+        <cell char="char1308" state="s4"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s1"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s4"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s2"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s3"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s4"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s1"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s2"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s4"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1608" label="D.mettleri" otu="otu1609">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s3"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s1"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s1"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s4"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s1"/>
+        <cell char="char248" state="s3"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s4"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s4"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s4"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s2"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s1"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s3"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s2"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s4"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s3"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s2"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s1"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s1"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s4"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s4"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s1"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s4"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s1"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s2"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s1"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s1"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s2"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1610" label="D.arizonae_2" otu="otu1611">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s4"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s1"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s1"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s2"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s2"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s4"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s4"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s3"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1612" label="D.hydei_1" otu="otu1613">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s4"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s2"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s2"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s4"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s1"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s1"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s4"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s4"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s4"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s2"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s3"/>
+        <cell char="char478" state="s4"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s4"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s1"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s1"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s3"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s2"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s1"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s4"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s1"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s4"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s4"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s4"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s1"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s3"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s4"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s4"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s3"/>
+        <cell char="char1302" state="s2"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s4"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s3"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1614" label="D.hydei_2" otu="otu1615">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s4"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s2"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s4"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s1"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s2"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s4"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s4"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s2"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s3"/>
+        <cell char="char478" state="s4"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s4"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s1"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s1"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s3"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s2"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s1"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s4"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s4"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s1"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s4"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s4"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s4"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s3"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s2"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s1"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s2"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s1"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1616" label="D.mojavensis_1" otu="otu1617">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s2"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s4"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s1"/>
+        <cell char="char186" state="s3"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s1"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s3"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s4"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s2"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s2"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s3"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s4"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s2"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s1"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s4"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s4"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s4"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s3"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s4"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s3"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s3"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s4"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s4"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s1"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s4"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s3"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s3"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1618" label="D.mojavensis_2" otu="otu1619">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s1"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s1"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s1"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s2"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s3"/>
+        <cell char="char566" state="s1"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s1"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s1"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s4"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s4"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s4"/>
+        <cell char="char894" state="s1"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s2"/>
+        <cell char="char900" state="s1"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s3"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s3"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s4"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s1"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s2"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s1"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1620" label="D.mulleri_1" otu="otu1621">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s2"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s4"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s2"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s3"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s4"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s2"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s1"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s2"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s2"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s3"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s2"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s4"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s4"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s3"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1622" label="D.mulleri_2" otu="otu1623">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s2"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s2"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s2"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s4"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s2"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s3"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s1"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s4"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s3"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1624" label="D.navojoa" otu="otu1625">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s2"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s2"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s1"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s3"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s2"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s4"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s4"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s2"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s1"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s3"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s2"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s3"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s2"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s4"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s3"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s3"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s4"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1626" label="D.virilis_1" otu="otu1627">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s4"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s4"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s2"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s4"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s4"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s4"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s1"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s3"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s4"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s3"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s4"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s2"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s1"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s2"/>
+        <cell char="char1472" state="s4"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1628" label="D.virilis_2" otu="otu1629">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s2"/>
+        <cell char="char18" state="s3"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s4"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s4"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s1"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s4"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s2"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s3"/>
+        <cell char="char272" state="s1"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s2"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s1"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s1"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s4"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s4"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s3"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s4"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s2"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s4"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s4"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s4"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s1"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s4"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s1"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s3"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s1"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s1"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s4"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s4"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s4"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s3"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s4"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s2"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s4"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s4"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s3"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s4"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s2"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s3"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s4"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s1"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s1"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s1"/>
+        <cell char="char1468" state="s4"/>
+        <cell char="char1470" state="s2"/>
+        <cell char="char1472" state="s4"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1630" label="D.silvestris" otu="otu1631">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s4"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s3"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s4"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s1"/>
+        <cell char="char604" state="s2"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s4"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s3"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s4"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s4"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s1"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s4"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1632" label="D.grimshawi" otu="otu1633">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s4"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s1"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s1"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s1"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s4"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s4"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s4"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s4"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s1"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s1"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s1"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s4"/>
+        <cell char="char1162" state="s2"/>
+        <cell char="char1164" state="s4"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s1"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s3"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1634" label="D.affinidisjuncta" otu="otu1635">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s3"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s3"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s3"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s1"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s1"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s4"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s1"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s1"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s3"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s2"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s1"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1636" label="D.nigra" otu="otu1637">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s4"/>
+        <cell char="char212" state="s4"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s4"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s4"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s1"/>
+        <cell char="char292" state="s1"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s3"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s4"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s4"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s4"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s2"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s4"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s4"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s1"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s1"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s4"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s3"/>
+        <cell char="char994" state="s3"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s1"/>
+        <cell char="char1004" state="s1"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s1"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s4"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s2"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s3"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s3"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s2"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s4"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1638" label="D.mimica" otu="otu1639">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s4"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s3"/>
+        <cell char="char312" state="s4"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s3"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s4"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s2"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s3"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s1"/>
+        <cell char="char1036" state="s3"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s3"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s4"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s1"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s3"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s1"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s4"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1640" label="D.adiastola" otu="otu1641">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s4"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s3"/>
+        <cell char="char312" state="s4"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s4"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s4"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s1"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s1"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s4"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s1"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s4"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s4"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s4"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s2"/>
+        <cell char="char1012" state="s3"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s3"/>
+        <cell char="char1036" state="s3"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s4"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s3"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s1"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s3"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s1"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s3"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s4"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s4"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s2"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1642" label="D.picticornis" otu="otu1643">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s4"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s3"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s1"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s1"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s2"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s4"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s3"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s1"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s4"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s4"/>
+        <cell char="char996" state="s3"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s1"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s1"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s1"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s4"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s2"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s4"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1644" label="D.planitibia" otu="otu1645">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s3"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s3"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s4"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s1"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s3"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s4"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s1"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s3"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s4"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1646" label="D.heteroneura" otu="otu1647">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s4"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s3"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s1"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s4"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s1"/>
+        <cell char="char604" state="s2"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s3"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s4"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s4"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s1"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s4"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1648" label="D.differens" otu="otu1649">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s3"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s3"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s3"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s1"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s1"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s4"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s3"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s1"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s4"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s3"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s4"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s2"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s4"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s1"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s3"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s4"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1650" label="D.wheeleri" otu="otu1651">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s3"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s1"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s4"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s3"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s4"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s2"/>
+        <cell char="char416" state="s4"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s3"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s4"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s2"/>
+        <cell char="char536" state="s1"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s1"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s3"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s3"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s1"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s3"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s2"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s3"/>
+        <cell char="char1126" state="s4"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s2"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s1"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s1"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s3"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s2"/>
+        <cell char="char1300" state="s3"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s2"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s4"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s1"/>
+        <cell char="char1456" state="s2"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1652" label="D.mayaguana" otu="otu1653">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s1"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s1"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s2"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s1"/>
+        <cell char="char128" state="s4"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s2"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s3"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s1"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s2"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s2"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s1"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s1"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s2"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s1"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s4"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s1"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s2"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s4"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s3"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s2"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s3"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s1"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s1"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s2"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s4"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s4"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s1"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s4"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s3"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s2"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s1"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s2"/>
+        <cell char="char602" state="s4"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s2"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s4"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s4"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s1"/>
+        <cell char="char682" state="s2"/>
+        <cell char="char684" state="s1"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s3"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s1"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s4"/>
+        <cell char="char736" state="s2"/>
+        <cell char="char738" state="s2"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s2"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s2"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s2"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s3"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s3"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s3"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s4"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s1"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s3"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s4"/>
+        <cell char="char1004" state="s2"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s3"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s2"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s3"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s1"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s3"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s1"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s2"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s4"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s3"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s3"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s3"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s4"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s4"/>
+        <cell char="char1304" state="s2"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s1"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s4"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s4"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s1"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s1"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s3"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s2"/>
+        <cell char="char1442" state="s4"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s4"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s2"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s1"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s4"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s2"/>
+        <cell char="char1534" state="s1"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1654" label="D.hawaiiensis" otu="otu1655">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s4"/>
+        <cell char="char20" state="s17"/>
+        <cell char="char22" state="s17"/>
+        <cell char="char24" state="s17"/>
+        <cell char="char26" state="s17"/>
+        <cell char="char28" state="s17"/>
+        <cell char="char30" state="s17"/>
+        <cell char="char32" state="s1"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s2"/>
+        <cell char="char38" state="s3"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s4"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s3"/>
+        <cell char="char54" state="s4"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s1"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s2"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s4"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s4"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s4"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s4"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s4"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s2"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s1"/>
+        <cell char="char184" state="s3"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s2"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s4"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s3"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s4"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s2"/>
+        <cell char="char248" state="s1"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s4"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s2"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s4"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s2"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s4"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s1"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s1"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s2"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s4"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s1"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s2"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s4"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s1"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s4"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s1"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s3"/>
+        <cell char="char422" state="s4"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s3"/>
+        <cell char="char428" state="s3"/>
+        <cell char="char430" state="s2"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s1"/>
+        <cell char="char440" state="s1"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s2"/>
+        <cell char="char446" state="s1"/>
+        <cell char="char448" state="s1"/>
+        <cell char="char450" state="s1"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s1"/>
+        <cell char="char464" state="s4"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s1"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s2"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s1"/>
+        <cell char="char524" state="s3"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s4"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s2"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s2"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s4"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s2"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s4"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s1"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s4"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s3"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s1"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s4"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s4"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s4"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s4"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s1"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s4"/>
+        <cell char="char680" state="s4"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s1"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s4"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s3"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s2"/>
+        <cell char="char728" state="s4"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s3"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s4"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s2"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s2"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s1"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s4"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s4"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s3"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s1"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s1"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s1"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s2"/>
+        <cell char="char878" state="s4"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s4"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s4"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s4"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s1"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s1"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s3"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s2"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s2"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s1"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s1"/>
+        <cell char="char994" state="s2"/>
+        <cell char="char996" state="s4"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s1"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s4"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s1"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s1"/>
+        <cell char="char1038" state="s4"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s4"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s4"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s3"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s1"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s4"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s3"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s4"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s4"/>
+        <cell char="char1136" state="s3"/>
+        <cell char="char1138" state="s4"/>
+        <cell char="char1140" state="s4"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s1"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s4"/>
+        <cell char="char1160" state="s4"/>
+        <cell char="char1162" state="s2"/>
+        <cell char="char1164" state="s4"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s2"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s2"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s1"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s4"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s1"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s2"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s4"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s2"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s1"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s3"/>
+        <cell char="char1256" state="s2"/>
+        <cell char="char1258" state="s4"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s1"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s1"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s1"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s1"/>
+        <cell char="char1304" state="s4"/>
+        <cell char="char1306" state="s4"/>
+        <cell char="char1308" state="s3"/>
+        <cell char="char1310" state="s2"/>
+        <cell char="char1312" state="s1"/>
+        <cell char="char1314" state="s3"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s1"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s4"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s3"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s3"/>
+        <cell char="char1378" state="s2"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s4"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s2"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s2"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s4"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s2"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s4"/>
+        <cell char="char1472" state="s3"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s1"/>
+        <cell char="char1478" state="s1"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s2"/>
+        <cell char="char1484" state="s3"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s1"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s3"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s1"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s2"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+      <row id="row1656" label="Z.tuberculatus" otu="otu1657">
+        <cell char="char8" state="s1"/>
+        <cell char="char10" state="s4"/>
+        <cell char="char12" state="s3"/>
+        <cell char="char14" state="s3"/>
+        <cell char="char16" state="s4"/>
+        <cell char="char18" state="s2"/>
+        <cell char="char20" state="s4"/>
+        <cell char="char22" state="s4"/>
+        <cell char="char24" state="s4"/>
+        <cell char="char26" state="s15"/>
+        <cell char="char28" state="s15"/>
+        <cell char="char30" state="s15"/>
+        <cell char="char32" state="s2"/>
+        <cell char="char34" state="s4"/>
+        <cell char="char36" state="s3"/>
+        <cell char="char38" state="s2"/>
+        <cell char="char40" state="s2"/>
+        <cell char="char42" state="s2"/>
+        <cell char="char44" state="s1"/>
+        <cell char="char46" state="s1"/>
+        <cell char="char48" state="s2"/>
+        <cell char="char50" state="s1"/>
+        <cell char="char52" state="s1"/>
+        <cell char="char54" state="s3"/>
+        <cell char="char56" state="s1"/>
+        <cell char="char58" state="s1"/>
+        <cell char="char60" state="s2"/>
+        <cell char="char62" state="s3"/>
+        <cell char="char64" state="s4"/>
+        <cell char="char66" state="s3"/>
+        <cell char="char68" state="s1"/>
+        <cell char="char70" state="s4"/>
+        <cell char="char72" state="s2"/>
+        <cell char="char74" state="s4"/>
+        <cell char="char76" state="s4"/>
+        <cell char="char78" state="s2"/>
+        <cell char="char80" state="s3"/>
+        <cell char="char82" state="s4"/>
+        <cell char="char84" state="s2"/>
+        <cell char="char86" state="s3"/>
+        <cell char="char88" state="s2"/>
+        <cell char="char90" state="s2"/>
+        <cell char="char92" state="s3"/>
+        <cell char="char94" state="s3"/>
+        <cell char="char96" state="s2"/>
+        <cell char="char98" state="s2"/>
+        <cell char="char100" state="s4"/>
+        <cell char="char102" state="s3"/>
+        <cell char="char104" state="s3"/>
+        <cell char="char106" state="s3"/>
+        <cell char="char108" state="s2"/>
+        <cell char="char110" state="s3"/>
+        <cell char="char112" state="s3"/>
+        <cell char="char114" state="s2"/>
+        <cell char="char116" state="s1"/>
+        <cell char="char118" state="s4"/>
+        <cell char="char120" state="s2"/>
+        <cell char="char122" state="s3"/>
+        <cell char="char124" state="s3"/>
+        <cell char="char126" state="s4"/>
+        <cell char="char128" state="s2"/>
+        <cell char="char130" state="s4"/>
+        <cell char="char132" state="s3"/>
+        <cell char="char134" state="s3"/>
+        <cell char="char136" state="s1"/>
+        <cell char="char138" state="s2"/>
+        <cell char="char140" state="s1"/>
+        <cell char="char142" state="s2"/>
+        <cell char="char144" state="s2"/>
+        <cell char="char146" state="s1"/>
+        <cell char="char148" state="s3"/>
+        <cell char="char150" state="s4"/>
+        <cell char="char152" state="s2"/>
+        <cell char="char154" state="s3"/>
+        <cell char="char156" state="s2"/>
+        <cell char="char158" state="s3"/>
+        <cell char="char160" state="s1"/>
+        <cell char="char162" state="s3"/>
+        <cell char="char164" state="s1"/>
+        <cell char="char166" state="s4"/>
+        <cell char="char168" state="s4"/>
+        <cell char="char170" state="s3"/>
+        <cell char="char172" state="s4"/>
+        <cell char="char174" state="s2"/>
+        <cell char="char176" state="s1"/>
+        <cell char="char178" state="s1"/>
+        <cell char="char180" state="s3"/>
+        <cell char="char182" state="s3"/>
+        <cell char="char184" state="s2"/>
+        <cell char="char186" state="s4"/>
+        <cell char="char188" state="s3"/>
+        <cell char="char190" state="s3"/>
+        <cell char="char192" state="s4"/>
+        <cell char="char194" state="s2"/>
+        <cell char="char196" state="s2"/>
+        <cell char="char198" state="s2"/>
+        <cell char="char200" state="s1"/>
+        <cell char="char202" state="s1"/>
+        <cell char="char204" state="s3"/>
+        <cell char="char206" state="s1"/>
+        <cell char="char208" state="s1"/>
+        <cell char="char210" state="s2"/>
+        <cell char="char212" state="s2"/>
+        <cell char="char214" state="s4"/>
+        <cell char="char216" state="s3"/>
+        <cell char="char218" state="s3"/>
+        <cell char="char220" state="s4"/>
+        <cell char="char222" state="s3"/>
+        <cell char="char224" state="s1"/>
+        <cell char="char226" state="s4"/>
+        <cell char="char228" state="s2"/>
+        <cell char="char230" state="s2"/>
+        <cell char="char232" state="s4"/>
+        <cell char="char234" state="s2"/>
+        <cell char="char236" state="s3"/>
+        <cell char="char238" state="s1"/>
+        <cell char="char240" state="s4"/>
+        <cell char="char242" state="s2"/>
+        <cell char="char244" state="s3"/>
+        <cell char="char246" state="s4"/>
+        <cell char="char248" state="s3"/>
+        <cell char="char250" state="s4"/>
+        <cell char="char252" state="s3"/>
+        <cell char="char254" state="s3"/>
+        <cell char="char256" state="s1"/>
+        <cell char="char258" state="s3"/>
+        <cell char="char260" state="s1"/>
+        <cell char="char262" state="s1"/>
+        <cell char="char264" state="s2"/>
+        <cell char="char266" state="s2"/>
+        <cell char="char268" state="s2"/>
+        <cell char="char270" state="s2"/>
+        <cell char="char272" state="s3"/>
+        <cell char="char274" state="s2"/>
+        <cell char="char276" state="s2"/>
+        <cell char="char278" state="s3"/>
+        <cell char="char280" state="s2"/>
+        <cell char="char282" state="s2"/>
+        <cell char="char284" state="s1"/>
+        <cell char="char286" state="s4"/>
+        <cell char="char288" state="s4"/>
+        <cell char="char290" state="s3"/>
+        <cell char="char292" state="s2"/>
+        <cell char="char294" state="s4"/>
+        <cell char="char296" state="s3"/>
+        <cell char="char298" state="s1"/>
+        <cell char="char300" state="s3"/>
+        <cell char="char302" state="s2"/>
+        <cell char="char304" state="s4"/>
+        <cell char="char306" state="s3"/>
+        <cell char="char308" state="s2"/>
+        <cell char="char310" state="s1"/>
+        <cell char="char312" state="s3"/>
+        <cell char="char314" state="s3"/>
+        <cell char="char316" state="s2"/>
+        <cell char="char318" state="s2"/>
+        <cell char="char320" state="s1"/>
+        <cell char="char322" state="s4"/>
+        <cell char="char324" state="s2"/>
+        <cell char="char326" state="s1"/>
+        <cell char="char328" state="s1"/>
+        <cell char="char330" state="s4"/>
+        <cell char="char332" state="s2"/>
+        <cell char="char334" state="s2"/>
+        <cell char="char336" state="s2"/>
+        <cell char="char338" state="s1"/>
+        <cell char="char340" state="s1"/>
+        <cell char="char342" state="s3"/>
+        <cell char="char344" state="s3"/>
+        <cell char="char346" state="s4"/>
+        <cell char="char348" state="s3"/>
+        <cell char="char350" state="s1"/>
+        <cell char="char352" state="s2"/>
+        <cell char="char354" state="s4"/>
+        <cell char="char356" state="s3"/>
+        <cell char="char358" state="s4"/>
+        <cell char="char360" state="s2"/>
+        <cell char="char362" state="s1"/>
+        <cell char="char364" state="s2"/>
+        <cell char="char366" state="s2"/>
+        <cell char="char368" state="s4"/>
+        <cell char="char370" state="s4"/>
+        <cell char="char372" state="s2"/>
+        <cell char="char374" state="s4"/>
+        <cell char="char376" state="s1"/>
+        <cell char="char378" state="s4"/>
+        <cell char="char380" state="s2"/>
+        <cell char="char382" state="s2"/>
+        <cell char="char384" state="s2"/>
+        <cell char="char386" state="s4"/>
+        <cell char="char388" state="s1"/>
+        <cell char="char390" state="s2"/>
+        <cell char="char392" state="s3"/>
+        <cell char="char394" state="s1"/>
+        <cell char="char396" state="s4"/>
+        <cell char="char398" state="s3"/>
+        <cell char="char400" state="s4"/>
+        <cell char="char402" state="s2"/>
+        <cell char="char404" state="s1"/>
+        <cell char="char406" state="s2"/>
+        <cell char="char408" state="s2"/>
+        <cell char="char410" state="s3"/>
+        <cell char="char412" state="s4"/>
+        <cell char="char414" state="s3"/>
+        <cell char="char416" state="s2"/>
+        <cell char="char418" state="s2"/>
+        <cell char="char420" state="s1"/>
+        <cell char="char422" state="s2"/>
+        <cell char="char424" state="s4"/>
+        <cell char="char426" state="s2"/>
+        <cell char="char428" state="s1"/>
+        <cell char="char430" state="s3"/>
+        <cell char="char432" state="s4"/>
+        <cell char="char434" state="s3"/>
+        <cell char="char436" state="s1"/>
+        <cell char="char438" state="s3"/>
+        <cell char="char440" state="s4"/>
+        <cell char="char442" state="s2"/>
+        <cell char="char444" state="s4"/>
+        <cell char="char446" state="s3"/>
+        <cell char="char448" state="s4"/>
+        <cell char="char450" state="s2"/>
+        <cell char="char452" state="s1"/>
+        <cell char="char454" state="s1"/>
+        <cell char="char456" state="s3"/>
+        <cell char="char458" state="s2"/>
+        <cell char="char460" state="s4"/>
+        <cell char="char462" state="s3"/>
+        <cell char="char464" state="s2"/>
+        <cell char="char466" state="s4"/>
+        <cell char="char468" state="s3"/>
+        <cell char="char470" state="s1"/>
+        <cell char="char472" state="s1"/>
+        <cell char="char474" state="s3"/>
+        <cell char="char476" state="s1"/>
+        <cell char="char478" state="s2"/>
+        <cell char="char480" state="s2"/>
+        <cell char="char482" state="s1"/>
+        <cell char="char484" state="s4"/>
+        <cell char="char486" state="s2"/>
+        <cell char="char488" state="s4"/>
+        <cell char="char490" state="s4"/>
+        <cell char="char492" state="s2"/>
+        <cell char="char494" state="s3"/>
+        <cell char="char496" state="s1"/>
+        <cell char="char498" state="s2"/>
+        <cell char="char500" state="s1"/>
+        <cell char="char502" state="s1"/>
+        <cell char="char504" state="s3"/>
+        <cell char="char506" state="s4"/>
+        <cell char="char508" state="s4"/>
+        <cell char="char510" state="s3"/>
+        <cell char="char512" state="s1"/>
+        <cell char="char514" state="s1"/>
+        <cell char="char516" state="s3"/>
+        <cell char="char518" state="s1"/>
+        <cell char="char520" state="s2"/>
+        <cell char="char522" state="s2"/>
+        <cell char="char524" state="s1"/>
+        <cell char="char526" state="s4"/>
+        <cell char="char528" state="s2"/>
+        <cell char="char530" state="s3"/>
+        <cell char="char532" state="s1"/>
+        <cell char="char534" state="s4"/>
+        <cell char="char536" state="s2"/>
+        <cell char="char538" state="s4"/>
+        <cell char="char540" state="s3"/>
+        <cell char="char542" state="s4"/>
+        <cell char="char544" state="s4"/>
+        <cell char="char546" state="s3"/>
+        <cell char="char548" state="s1"/>
+        <cell char="char550" state="s4"/>
+        <cell char="char552" state="s2"/>
+        <cell char="char554" state="s1"/>
+        <cell char="char556" state="s1"/>
+        <cell char="char558" state="s2"/>
+        <cell char="char560" state="s3"/>
+        <cell char="char562" state="s3"/>
+        <cell char="char564" state="s4"/>
+        <cell char="char566" state="s3"/>
+        <cell char="char568" state="s2"/>
+        <cell char="char570" state="s4"/>
+        <cell char="char572" state="s3"/>
+        <cell char="char574" state="s3"/>
+        <cell char="char576" state="s2"/>
+        <cell char="char578" state="s1"/>
+        <cell char="char580" state="s4"/>
+        <cell char="char582" state="s2"/>
+        <cell char="char584" state="s2"/>
+        <cell char="char586" state="s4"/>
+        <cell char="char588" state="s3"/>
+        <cell char="char590" state="s3"/>
+        <cell char="char592" state="s1"/>
+        <cell char="char594" state="s2"/>
+        <cell char="char596" state="s3"/>
+        <cell char="char598" state="s1"/>
+        <cell char="char600" state="s4"/>
+        <cell char="char602" state="s2"/>
+        <cell char="char604" state="s1"/>
+        <cell char="char606" state="s4"/>
+        <cell char="char608" state="s2"/>
+        <cell char="char610" state="s1"/>
+        <cell char="char612" state="s3"/>
+        <cell char="char614" state="s1"/>
+        <cell char="char616" state="s4"/>
+        <cell char="char618" state="s2"/>
+        <cell char="char620" state="s3"/>
+        <cell char="char622" state="s1"/>
+        <cell char="char624" state="s1"/>
+        <cell char="char626" state="s2"/>
+        <cell char="char628" state="s3"/>
+        <cell char="char630" state="s2"/>
+        <cell char="char632" state="s1"/>
+        <cell char="char634" state="s2"/>
+        <cell char="char636" state="s2"/>
+        <cell char="char638" state="s1"/>
+        <cell char="char640" state="s4"/>
+        <cell char="char642" state="s2"/>
+        <cell char="char644" state="s3"/>
+        <cell char="char646" state="s2"/>
+        <cell char="char648" state="s4"/>
+        <cell char="char650" state="s3"/>
+        <cell char="char652" state="s4"/>
+        <cell char="char654" state="s3"/>
+        <cell char="char656" state="s1"/>
+        <cell char="char658" state="s1"/>
+        <cell char="char660" state="s2"/>
+        <cell char="char662" state="s4"/>
+        <cell char="char664" state="s4"/>
+        <cell char="char666" state="s2"/>
+        <cell char="char668" state="s1"/>
+        <cell char="char670" state="s2"/>
+        <cell char="char672" state="s4"/>
+        <cell char="char674" state="s3"/>
+        <cell char="char676" state="s3"/>
+        <cell char="char678" state="s2"/>
+        <cell char="char680" state="s2"/>
+        <cell char="char682" state="s4"/>
+        <cell char="char684" state="s3"/>
+        <cell char="char686" state="s3"/>
+        <cell char="char688" state="s4"/>
+        <cell char="char690" state="s3"/>
+        <cell char="char692" state="s1"/>
+        <cell char="char694" state="s1"/>
+        <cell char="char696" state="s2"/>
+        <cell char="char698" state="s1"/>
+        <cell char="char700" state="s2"/>
+        <cell char="char702" state="s2"/>
+        <cell char="char704" state="s1"/>
+        <cell char="char706" state="s2"/>
+        <cell char="char708" state="s2"/>
+        <cell char="char710" state="s1"/>
+        <cell char="char712" state="s2"/>
+        <cell char="char714" state="s2"/>
+        <cell char="char716" state="s3"/>
+        <cell char="char718" state="s2"/>
+        <cell char="char720" state="s2"/>
+        <cell char="char722" state="s1"/>
+        <cell char="char724" state="s4"/>
+        <cell char="char726" state="s4"/>
+        <cell char="char728" state="s2"/>
+        <cell char="char730" state="s4"/>
+        <cell char="char732" state="s3"/>
+        <cell char="char734" state="s2"/>
+        <cell char="char736" state="s1"/>
+        <cell char="char738" state="s3"/>
+        <cell char="char740" state="s4"/>
+        <cell char="char742" state="s4"/>
+        <cell char="char744" state="s2"/>
+        <cell char="char746" state="s4"/>
+        <cell char="char748" state="s3"/>
+        <cell char="char750" state="s3"/>
+        <cell char="char752" state="s3"/>
+        <cell char="char754" state="s1"/>
+        <cell char="char756" state="s2"/>
+        <cell char="char758" state="s1"/>
+        <cell char="char760" state="s1"/>
+        <cell char="char762" state="s3"/>
+        <cell char="char764" state="s2"/>
+        <cell char="char766" state="s3"/>
+        <cell char="char768" state="s4"/>
+        <cell char="char770" state="s1"/>
+        <cell char="char772" state="s1"/>
+        <cell char="char774" state="s3"/>
+        <cell char="char776" state="s3"/>
+        <cell char="char778" state="s3"/>
+        <cell char="char780" state="s4"/>
+        <cell char="char782" state="s3"/>
+        <cell char="char784" state="s3"/>
+        <cell char="char786" state="s4"/>
+        <cell char="char788" state="s2"/>
+        <cell char="char790" state="s2"/>
+        <cell char="char792" state="s2"/>
+        <cell char="char794" state="s3"/>
+        <cell char="char796" state="s3"/>
+        <cell char="char798" state="s4"/>
+        <cell char="char800" state="s3"/>
+        <cell char="char802" state="s3"/>
+        <cell char="char804" state="s2"/>
+        <cell char="char806" state="s3"/>
+        <cell char="char808" state="s4"/>
+        <cell char="char810" state="s4"/>
+        <cell char="char812" state="s1"/>
+        <cell char="char814" state="s4"/>
+        <cell char="char816" state="s4"/>
+        <cell char="char818" state="s3"/>
+        <cell char="char820" state="s2"/>
+        <cell char="char822" state="s2"/>
+        <cell char="char824" state="s1"/>
+        <cell char="char826" state="s1"/>
+        <cell char="char828" state="s2"/>
+        <cell char="char830" state="s1"/>
+        <cell char="char832" state="s4"/>
+        <cell char="char834" state="s2"/>
+        <cell char="char836" state="s4"/>
+        <cell char="char838" state="s3"/>
+        <cell char="char840" state="s2"/>
+        <cell char="char842" state="s4"/>
+        <cell char="char844" state="s2"/>
+        <cell char="char846" state="s2"/>
+        <cell char="char848" state="s3"/>
+        <cell char="char850" state="s4"/>
+        <cell char="char852" state="s3"/>
+        <cell char="char854" state="s1"/>
+        <cell char="char856" state="s2"/>
+        <cell char="char858" state="s4"/>
+        <cell char="char860" state="s3"/>
+        <cell char="char862" state="s3"/>
+        <cell char="char864" state="s2"/>
+        <cell char="char866" state="s4"/>
+        <cell char="char868" state="s4"/>
+        <cell char="char870" state="s2"/>
+        <cell char="char872" state="s1"/>
+        <cell char="char874" state="s1"/>
+        <cell char="char876" state="s4"/>
+        <cell char="char878" state="s3"/>
+        <cell char="char880" state="s2"/>
+        <cell char="char882" state="s2"/>
+        <cell char="char884" state="s1"/>
+        <cell char="char886" state="s4"/>
+        <cell char="char888" state="s2"/>
+        <cell char="char890" state="s4"/>
+        <cell char="char892" state="s1"/>
+        <cell char="char894" state="s2"/>
+        <cell char="char896" state="s2"/>
+        <cell char="char898" state="s1"/>
+        <cell char="char900" state="s3"/>
+        <cell char="char902" state="s3"/>
+        <cell char="char904" state="s4"/>
+        <cell char="char906" state="s3"/>
+        <cell char="char908" state="s2"/>
+        <cell char="char910" state="s2"/>
+        <cell char="char912" state="s2"/>
+        <cell char="char914" state="s3"/>
+        <cell char="char916" state="s4"/>
+        <cell char="char918" state="s2"/>
+        <cell char="char920" state="s4"/>
+        <cell char="char922" state="s1"/>
+        <cell char="char924" state="s2"/>
+        <cell char="char926" state="s4"/>
+        <cell char="char928" state="s2"/>
+        <cell char="char930" state="s2"/>
+        <cell char="char932" state="s3"/>
+        <cell char="char934" state="s2"/>
+        <cell char="char936" state="s2"/>
+        <cell char="char938" state="s4"/>
+        <cell char="char940" state="s2"/>
+        <cell char="char942" state="s3"/>
+        <cell char="char944" state="s1"/>
+        <cell char="char946" state="s1"/>
+        <cell char="char948" state="s3"/>
+        <cell char="char950" state="s3"/>
+        <cell char="char952" state="s2"/>
+        <cell char="char954" state="s1"/>
+        <cell char="char956" state="s3"/>
+        <cell char="char958" state="s2"/>
+        <cell char="char960" state="s4"/>
+        <cell char="char962" state="s3"/>
+        <cell char="char964" state="s4"/>
+        <cell char="char966" state="s4"/>
+        <cell char="char968" state="s3"/>
+        <cell char="char970" state="s4"/>
+        <cell char="char972" state="s2"/>
+        <cell char="char974" state="s1"/>
+        <cell char="char976" state="s3"/>
+        <cell char="char978" state="s2"/>
+        <cell char="char980" state="s4"/>
+        <cell char="char982" state="s4"/>
+        <cell char="char984" state="s2"/>
+        <cell char="char986" state="s1"/>
+        <cell char="char988" state="s2"/>
+        <cell char="char990" state="s2"/>
+        <cell char="char992" state="s2"/>
+        <cell char="char994" state="s1"/>
+        <cell char="char996" state="s3"/>
+        <cell char="char998" state="s4"/>
+        <cell char="char1000" state="s2"/>
+        <cell char="char1002" state="s2"/>
+        <cell char="char1004" state="s1"/>
+        <cell char="char1006" state="s4"/>
+        <cell char="char1008" state="s4"/>
+        <cell char="char1010" state="s3"/>
+        <cell char="char1012" state="s2"/>
+        <cell char="char1014" state="s3"/>
+        <cell char="char1016" state="s1"/>
+        <cell char="char1018" state="s1"/>
+        <cell char="char1020" state="s1"/>
+        <cell char="char1022" state="s2"/>
+        <cell char="char1024" state="s4"/>
+        <cell char="char1026" state="s3"/>
+        <cell char="char1028" state="s3"/>
+        <cell char="char1030" state="s2"/>
+        <cell char="char1032" state="s2"/>
+        <cell char="char1034" state="s2"/>
+        <cell char="char1036" state="s2"/>
+        <cell char="char1038" state="s2"/>
+        <cell char="char1040" state="s1"/>
+        <cell char="char1042" state="s4"/>
+        <cell char="char1044" state="s2"/>
+        <cell char="char1046" state="s1"/>
+        <cell char="char1048" state="s2"/>
+        <cell char="char1050" state="s4"/>
+        <cell char="char1052" state="s3"/>
+        <cell char="char1054" state="s3"/>
+        <cell char="char1056" state="s2"/>
+        <cell char="char1058" state="s3"/>
+        <cell char="char1060" state="s4"/>
+        <cell char="char1062" state="s2"/>
+        <cell char="char1064" state="s1"/>
+        <cell char="char1066" state="s2"/>
+        <cell char="char1068" state="s4"/>
+        <cell char="char1070" state="s3"/>
+        <cell char="char1072" state="s2"/>
+        <cell char="char1074" state="s2"/>
+        <cell char="char1076" state="s4"/>
+        <cell char="char1078" state="s1"/>
+        <cell char="char1080" state="s2"/>
+        <cell char="char1082" state="s4"/>
+        <cell char="char1084" state="s2"/>
+        <cell char="char1086" state="s2"/>
+        <cell char="char1088" state="s1"/>
+        <cell char="char1090" state="s4"/>
+        <cell char="char1092" state="s2"/>
+        <cell char="char1094" state="s1"/>
+        <cell char="char1096" state="s1"/>
+        <cell char="char1098" state="s2"/>
+        <cell char="char1100" state="s2"/>
+        <cell char="char1102" state="s2"/>
+        <cell char="char1104" state="s4"/>
+        <cell char="char1106" state="s3"/>
+        <cell char="char1108" state="s3"/>
+        <cell char="char1110" state="s2"/>
+        <cell char="char1112" state="s1"/>
+        <cell char="char1114" state="s4"/>
+        <cell char="char1116" state="s2"/>
+        <cell char="char1118" state="s1"/>
+        <cell char="char1120" state="s2"/>
+        <cell char="char1122" state="s2"/>
+        <cell char="char1124" state="s1"/>
+        <cell char="char1126" state="s1"/>
+        <cell char="char1128" state="s3"/>
+        <cell char="char1130" state="s1"/>
+        <cell char="char1132" state="s2"/>
+        <cell char="char1134" state="s2"/>
+        <cell char="char1136" state="s1"/>
+        <cell char="char1138" state="s2"/>
+        <cell char="char1140" state="s2"/>
+        <cell char="char1142" state="s2"/>
+        <cell char="char1144" state="s4"/>
+        <cell char="char1146" state="s3"/>
+        <cell char="char1148" state="s3"/>
+        <cell char="char1150" state="s4"/>
+        <cell char="char1152" state="s3"/>
+        <cell char="char1154" state="s2"/>
+        <cell char="char1156" state="s1"/>
+        <cell char="char1158" state="s2"/>
+        <cell char="char1160" state="s1"/>
+        <cell char="char1162" state="s1"/>
+        <cell char="char1164" state="s3"/>
+        <cell char="char1166" state="s4"/>
+        <cell char="char1168" state="s4"/>
+        <cell char="char1170" state="s2"/>
+        <cell char="char1172" state="s1"/>
+        <cell char="char1174" state="s1"/>
+        <cell char="char1176" state="s2"/>
+        <cell char="char1178" state="s4"/>
+        <cell char="char1180" state="s2"/>
+        <cell char="char1182" state="s3"/>
+        <cell char="char1184" state="s4"/>
+        <cell char="char1186" state="s3"/>
+        <cell char="char1188" state="s3"/>
+        <cell char="char1190" state="s4"/>
+        <cell char="char1192" state="s4"/>
+        <cell char="char1194" state="s3"/>
+        <cell char="char1196" state="s3"/>
+        <cell char="char1198" state="s1"/>
+        <cell char="char1200" state="s2"/>
+        <cell char="char1202" state="s3"/>
+        <cell char="char1204" state="s4"/>
+        <cell char="char1206" state="s4"/>
+        <cell char="char1208" state="s3"/>
+        <cell char="char1210" state="s1"/>
+        <cell char="char1212" state="s3"/>
+        <cell char="char1214" state="s2"/>
+        <cell char="char1216" state="s2"/>
+        <cell char="char1218" state="s2"/>
+        <cell char="char1220" state="s2"/>
+        <cell char="char1222" state="s3"/>
+        <cell char="char1224" state="s4"/>
+        <cell char="char1226" state="s3"/>
+        <cell char="char1228" state="s4"/>
+        <cell char="char1230" state="s2"/>
+        <cell char="char1232" state="s3"/>
+        <cell char="char1234" state="s2"/>
+        <cell char="char1236" state="s4"/>
+        <cell char="char1238" state="s3"/>
+        <cell char="char1240" state="s1"/>
+        <cell char="char1242" state="s3"/>
+        <cell char="char1244" state="s2"/>
+        <cell char="char1246" state="s4"/>
+        <cell char="char1248" state="s2"/>
+        <cell char="char1250" state="s2"/>
+        <cell char="char1252" state="s4"/>
+        <cell char="char1254" state="s2"/>
+        <cell char="char1256" state="s3"/>
+        <cell char="char1258" state="s1"/>
+        <cell char="char1260" state="s4"/>
+        <cell char="char1262" state="s3"/>
+        <cell char="char1264" state="s1"/>
+        <cell char="char1266" state="s3"/>
+        <cell char="char1268" state="s2"/>
+        <cell char="char1270" state="s1"/>
+        <cell char="char1272" state="s4"/>
+        <cell char="char1274" state="s2"/>
+        <cell char="char1276" state="s2"/>
+        <cell char="char1278" state="s2"/>
+        <cell char="char1280" state="s1"/>
+        <cell char="char1282" state="s2"/>
+        <cell char="char1284" state="s2"/>
+        <cell char="char1286" state="s2"/>
+        <cell char="char1288" state="s1"/>
+        <cell char="char1290" state="s3"/>
+        <cell char="char1292" state="s4"/>
+        <cell char="char1294" state="s2"/>
+        <cell char="char1296" state="s3"/>
+        <cell char="char1298" state="s1"/>
+        <cell char="char1300" state="s2"/>
+        <cell char="char1302" state="s2"/>
+        <cell char="char1304" state="s1"/>
+        <cell char="char1306" state="s2"/>
+        <cell char="char1308" state="s4"/>
+        <cell char="char1310" state="s3"/>
+        <cell char="char1312" state="s2"/>
+        <cell char="char1314" state="s2"/>
+        <cell char="char1316" state="s4"/>
+        <cell char="char1318" state="s3"/>
+        <cell char="char1320" state="s2"/>
+        <cell char="char1322" state="s3"/>
+        <cell char="char1324" state="s2"/>
+        <cell char="char1326" state="s2"/>
+        <cell char="char1328" state="s2"/>
+        <cell char="char1330" state="s1"/>
+        <cell char="char1332" state="s3"/>
+        <cell char="char1334" state="s1"/>
+        <cell char="char1336" state="s1"/>
+        <cell char="char1338" state="s2"/>
+        <cell char="char1340" state="s4"/>
+        <cell char="char1342" state="s4"/>
+        <cell char="char1344" state="s2"/>
+        <cell char="char1346" state="s3"/>
+        <cell char="char1348" state="s4"/>
+        <cell char="char1350" state="s2"/>
+        <cell char="char1352" state="s1"/>
+        <cell char="char1354" state="s1"/>
+        <cell char="char1356" state="s3"/>
+        <cell char="char1358" state="s3"/>
+        <cell char="char1360" state="s2"/>
+        <cell char="char1362" state="s2"/>
+        <cell char="char1364" state="s1"/>
+        <cell char="char1366" state="s4"/>
+        <cell char="char1368" state="s4"/>
+        <cell char="char1370" state="s3"/>
+        <cell char="char1372" state="s1"/>
+        <cell char="char1374" state="s3"/>
+        <cell char="char1376" state="s2"/>
+        <cell char="char1378" state="s4"/>
+        <cell char="char1380" state="s2"/>
+        <cell char="char1382" state="s1"/>
+        <cell char="char1384" state="s1"/>
+        <cell char="char1386" state="s2"/>
+        <cell char="char1388" state="s2"/>
+        <cell char="char1390" state="s1"/>
+        <cell char="char1392" state="s3"/>
+        <cell char="char1394" state="s1"/>
+        <cell char="char1396" state="s1"/>
+        <cell char="char1398" state="s2"/>
+        <cell char="char1400" state="s3"/>
+        <cell char="char1402" state="s3"/>
+        <cell char="char1404" state="s4"/>
+        <cell char="char1406" state="s3"/>
+        <cell char="char1408" state="s2"/>
+        <cell char="char1410" state="s2"/>
+        <cell char="char1412" state="s1"/>
+        <cell char="char1414" state="s4"/>
+        <cell char="char1416" state="s2"/>
+        <cell char="char1418" state="s4"/>
+        <cell char="char1420" state="s3"/>
+        <cell char="char1422" state="s3"/>
+        <cell char="char1424" state="s1"/>
+        <cell char="char1426" state="s1"/>
+        <cell char="char1428" state="s1"/>
+        <cell char="char1430" state="s4"/>
+        <cell char="char1432" state="s4"/>
+        <cell char="char1434" state="s3"/>
+        <cell char="char1436" state="s3"/>
+        <cell char="char1438" state="s1"/>
+        <cell char="char1440" state="s4"/>
+        <cell char="char1442" state="s3"/>
+        <cell char="char1444" state="s4"/>
+        <cell char="char1446" state="s3"/>
+        <cell char="char1448" state="s3"/>
+        <cell char="char1450" state="s3"/>
+        <cell char="char1452" state="s1"/>
+        <cell char="char1454" state="s2"/>
+        <cell char="char1456" state="s3"/>
+        <cell char="char1458" state="s4"/>
+        <cell char="char1460" state="s2"/>
+        <cell char="char1462" state="s4"/>
+        <cell char="char1464" state="s3"/>
+        <cell char="char1466" state="s3"/>
+        <cell char="char1468" state="s1"/>
+        <cell char="char1470" state="s2"/>
+        <cell char="char1472" state="s2"/>
+        <cell char="char1474" state="s2"/>
+        <cell char="char1476" state="s2"/>
+        <cell char="char1478" state="s3"/>
+        <cell char="char1480" state="s4"/>
+        <cell char="char1482" state="s4"/>
+        <cell char="char1484" state="s2"/>
+        <cell char="char1486" state="s1"/>
+        <cell char="char1488" state="s3"/>
+        <cell char="char1490" state="s4"/>
+        <cell char="char1492" state="s3"/>
+        <cell char="char1494" state="s3"/>
+        <cell char="char1496" state="s1"/>
+        <cell char="char1498" state="s2"/>
+        <cell char="char1500" state="s2"/>
+        <cell char="char1502" state="s1"/>
+        <cell char="char1504" state="s1"/>
+        <cell char="char1506" state="s3"/>
+        <cell char="char1508" state="s2"/>
+        <cell char="char1510" state="s1"/>
+        <cell char="char1512" state="s2"/>
+        <cell char="char1514" state="s4"/>
+        <cell char="char1516" state="s3"/>
+        <cell char="char1518" state="s3"/>
+        <cell char="char1520" state="s3"/>
+        <cell char="char1522" state="s1"/>
+        <cell char="char1524" state="s2"/>
+        <cell char="char1526" state="s4"/>
+        <cell char="char1528" state="s2"/>
+        <cell char="char1530" state="s3"/>
+        <cell char="char1532" state="s3"/>
+        <cell char="char1534" state="s3"/>
+        <cell char="char1536" state="s4"/>
+        <cell char="char1538" state="s1"/>
+        <cell char="char1540" state="s4"/>
+        <cell char="char1542" state="s2"/>
+        <cell char="char1544" state="s4"/>
+        <cell char="char1546" state="s1"/>
+        <cell char="char1548" state="s1"/>
+      </row>
+    </matrix>
+  </characters>
+</nex:nexml>
diff --git a/test/NTSValidIn/adh.xml2 b/test/NTSValidIn/adh.xml2
new file mode 100644
index 0000000..e69de29
diff --git a/test/NTSValidIn/anolis.nex b/test/NTSValidIn/anolis.nex
new file mode 100644
index 0000000..e70a2b1
--- /dev/null
+++ b/test/NTSValidIn/anolis.nex
@@ -0,0 +1,203 @@
+#NEXUS 
+
+begin data;
+	dimensions ntax=30 nchar=1456;
+	format datatype=dna interleave=yes missing=? gap=-;
+	matrix
+	Anolis_ahli          ATGAGCCCAATAATATACACAATTATACTATCAAGCCTAGCAACAGGCACTATCGTTACCATAACGAGCTACCACTGACTCCTAGCCTGAATCGGACTAGAAATAAACACTTTATCAATTATTCCAATTATTTCTACCATACACCACCCACGATCAACAGAGGCCGCCACAAAATACTTTTTAACACAAGCAGCGGCTTCTGCCATAATCTTGTTTTCAAGCATAATTAACGCCTGACAAACCGGATCAT
+	Anolis_aliniger      ATGAGCCCTACAGTTTATTCAATTATTTTGTCAAGCCTACCAACAGGCACAGTTATTACTATAACCAGCTACCATTGATTAATAGCCTGAGTCGGGCTAGAAATTAACACACTCGCAATTATTCCTGTTGTTTCAATACAACATCACCCACGGTCCACAGAAGCCGCCACAAAATATTTTCTAACACAAGCAGCAGCCTCCGCCTTAATTCTATTTGCTAGCACAACTAACGCCTGATCAACGGGCACAT
+	Anolis_alutaceus     ATGAACCCAACAATTATTATAATTACCCTAACCAGCCTGGCAACTGGTACAGTTATTACCATACATAGCTTCCATTGATTAATGGCCTGA?TCGGATTAGA?ATCAATACACTATCAATTATTCCAATAATTTCAACATTACACCACCCACGATCAACTGAAGCTGCTACAAAATATTTCCTCACCCAAGCAGCTGCTTCA?CTTTAATCCTTTTTTCAAGCACAATTAATGCCTGACAAACAGGATCAT
+	Anolis_angusticeps   ATGAGCCCCCCCATTTTTACAATTATCATCTCAAGTCTAGCAACAGGTACAATTATTACCATAACCAGCTACCATTGACTCATAGCCTGAGTTGGTCTAGAAATAAATACACTAGCAATTATTCCTATTATTTCAACAACACATCACCCACGAGCCACAGAAGCTTCCACAAAATATTTTCTTACACAAGCTGCAGCCTCTGCTCTAATTTTATTTTCTAGTATAATTAACGCATGACACACAGGATCTT
+	Anolis_bahorucoensis ATGAGCCCCATAATTTACTCAATTGTATTCTCAAGCCTAGC?ACAGGTACTATTATTACTATAACCAGCTACCACTGATTTATGGCCTGAATCGGACTAGAAATTAATACACTAGCAGTAATCCCCATTATTTCAACACTACACCACCCACGATCTACAGAAGCTGCTACAAAATACTTCTTAACACAAGCAGCAGCCTCCGCCACAATCCTATTTTCAAGTATAATTAATGCCTGACAAACAGGCACAT
+	Anolis_barahonae     ATGAGCCCGCTAATTTATATGATTATTTTATCAAGCTTAGCAACAGGCACAATTATTACAATAACGAGTTTTCATTGAATTATAGCTTGAATTGGGTTAGAAATCAACACCTTAGCAATTATCCCAATTATTTCTATATTACACCACCCACGTTCTACTGAAGCAGCCACAAAATATTTTCTTACACAAGCAGCAGCATCCGCTATAATCCTATTTTCAAGTATAATTAATGCCTGACAAACAGGAACAT
+	Anolis_brevirostris  ATGAGCCCACTAATCCACACAATTATACTCTCAAGTCTAGCAACAGGCACTATTATTACTATATCTAGCCACCACTGACTAATAGCCTGAATTGGATTAGAAATTAACACACTAGCAATTATCCCCATCATTTCAACATCCCACCACCCACGATCAACAGAAGCTGCCACAAAATATTTCCTTACACAAGCAGCAGCCTCTGCCACCGTACTATTTTCTAGTATAATTAATGCCTGACAAACCGGAACAT
+	Anolis_coelestinus   ATGAGCCCACTAATTTTTTCAATCGTCCTGTCAAGCCTAGCAACAGGCACTATTATTACCATAACCAGCTATCACTGATTAATAGCTTGAATTGGTCTAGAAATAAACACACTTGCTATTATTCCAATTATCTCAATACAACATCACCCTCGATCTACAGAAGCCGCTACAAAATATTTCCTTACACAAGCAGCAGCCTCCGCTATGATTTTATTCGCCAGCACAACAAATGCTTGATACACAGGCACAT
+	Anolis_cristatellus  ATGAGC???ACAATCTACACAATTATTTTGT?????CTAGCAACAGGCACTATCATCACTATAACTAGCTTCCACTGACTAATGGCCTGAATCGGACTAGAGCTTAATACGCTAGCAATTATCCCGATTATTTCAACATTACACCACCCACGATCAACAGAAGCCGCAACAAAATACTTCTTAACACAAGCAGCAGCCTCTGCAATAATTATGTTTTCTAGCATAATTAATGCCTGAAACATAGGAACAT
+	Anolis_cuvieri       ATGAGCCCAACAATTCTCTCAATCATTTTATCAAGCCTAGCAGCAGGAACAATTATTACAATAACAAGCTTTCATTGATTAATAGCCTGAATTGGACTAGAAATTAATACACTAGCAATTATTCCAATTATCTCAATAATACATCACCCACGATCTACAGAAGCAGCCACAAAATATTTTCTCACACAAGCAGCAGCATCAGCTATAATCCTGTTCTCAAGCATAATTAATGCTTGACAAACAGGGACAT
+	Anolis_distichus     ATGAGCCCGCCAATCTACGCAATTATACTATCAAGCTTAGCAACAGGCACCATTATCACTATAACCAGTTACCATTGACTAATGGCCTGAATTGGACTAGAAATTAATACACTAGCAATTCTTCCAATTATTGCAACATCACACAACCCACGATCCACAGAAGCTGCCACAAAATACTTTTTAACACAATCAGCAGCTTCCGCCACTATCTTATTTTCTAGCATACTTAACGCCTGACAAACCGGAACAT
+	Anolis_equestris     ATGAGCCCAACAATTTATTCAATTATCCTATCAAGCCTTGCAA?????ACAATTATTACTATAACCAGCCACCATTGACTAATAGCCTGA?TCGGATTAGAAATTAACACATTAGCAATTATCCCAATTATTTCAACATTACACCACCCACGATCCACAGAAGCCGCCACAAAATATTTCCTAACACAAGCAGCTGCTTCTGCTATAATTTTATTTTCTAGCATAACAAATGCTTGATACACAGGTACAT
+	Anolis_garmani       ATGAGCCCAACCATCCTTATAATTATTATCTCAAGCCTGGCAACAGGTACCATTATTACCATAACAAGCCACCACTGACTCATAGCCTGAATCGGACTAGAAATAAATACCTTAGCTATTATTCCAATCATTACTACTATACACAACCCACGATCAACAGAAGCCGCCACAAAATACTTCTTAACACAAGCAGCAGCCTCTGCCATAATCTTATTCTCAAGCATAATTAATGCCTGACAAATAGGATCAT
+	Anolis_grahami       ATGAGCCCATCAATCCTTATAATTATTATTTCAAGCCTGGCAACAGGCACTATTATTACTATAACAAGCCACCACTGACTTATAGCCTGAGTCGGACTAGAAATAAATACTTTGGCAATTATCCCAATTATTTCTACTACACACAGCCCGCGATCCACAGAAGCCGCTACAAAATATTTTTTAACACAAGCAGCTGCCTCTACCATAATCTTATTTTCAAGCATAACCAACGCCTGACAAACAGGCACAT
+	Anolis_insolitus     ATGAACCCAACTATTCTTACATTAATTTTATCAAGCTTAGCAACAGGTACAATCCTTACAATAATCAGCTTTCACTGACTACTCGCATGAATTGGTCTAGAGATTAATACCCTAGCAATTATTCCTATTATCTCAGCACCTCACCACCCCCGACCCACAGAAGCCTCCACAAAATATTTCCTTACACAAGCAGCTGCTTCTGCTACAATCTTATTTTCAAGCATAATTAATGCTTGACTAACAGGCACAT
+	Anolis_krugi         ATGAGCCCTGCAATTTACACAATTATATTATCAAGCTTGGCAACAGGCACTATCATCACTATAACAAGCTTCCACTGACTAATAGCCTGAGTTGGACTAGAACTTAATACATTAGCAATTATCCCAATTATTTCAACATTACACCACCCCCGGGCCACAGAAGCCTCAACAAAGTATTTCCTCACTCAAGCAGCAGCCTCTGCCATAATTTTATTTTCTAGCATAATTAATGCCTGACACACGGGAACAT
+	Anolis_lineatopus    ATGAGCCCTGCTATCTTTTCAATTGTCATATCCAGCCTAGCAACAGGCACTATTATTACCATAACAAGCCACCACTGACTATTAGCCTGAATAGGGTTAGAAATAAATACCCTAGCAATTATTCCAATTATTTCTATTACCCACAACCCCCGAGCCACAGAAGCCGCCACAAAGTACTTCTTAACACAAGCAGCAGCCTCAGCCATAGTTTTATTTGCAAGCATAACTAATGCTTGACAAACAGGAACAT
+	Anolis_loysiana      ATGAACCCAGTCGTTATT???ATTCTTCTATCAAGCCTAGCAACTGGTACTATTATTACTATAACTAGCTATCACTGATTAATAGCCTGAGTTGGACTAGAAATAAACACATTAGCAATTATTCCAATCATTTCAACAACTCACCACCCACGAGCCACAGAAGCAGCCACAAAATACTTCTTAACCCAAGCTGCAGCCTCCGCCCTAATCTTATTTTCAAGTACAATTAATGCTTGATACTCAGGCTCAT
+	Anolis_luteogularis  ATGAGTCCAACAATTTATTCAATTATTCTATCAAGCCTTGCAACAGGTACAATTATTACTATAACCAGCTACCATTGACTAATAGCCTGAGTCGGATTAGAAATTAACACATTAGCAATTATCCCAATTATTTCAACATTACACCATCCACGATCCACAGAAGCAGCCACAAAATACTTCCTAACACAAGCAGCTGCTTCTGCTATAATTTTATTTTCTAGCATAACAAATGCTTGATACACAGGTACAT
+	Anolis_marcanoi      ATGAGCCCAACAATTTTTTCAATTATGCTATCGAGTCTAGCAACAGGCACCATTATTACTATAACAAGCTTTCACTGACTAATGGCCTGAGTCGGCTTAGAAATTAATACGCTAGCTGCTATTCCAATTATTTCAATACAACACCACCCTCGATCAACAGAAGCAGCCACAAAATACTTTTTAACACAAGCAACTGCATCCTCCTTAATTTTATTTTCAAGTATGATTAATGCTTGGCATACAGGAACAT
+	Anolis_occultus      ATGAGCCCCAATAATCTACTTAATAGTTTAATTAGCTTATTTATA???ACAACACTAGTAACCACTAGCCACCACTGATTATTAGCGTGAGTTGGCTTGGAAATTAACACACTTGCAGCTATTCCACTTATCTCAACAAAACATCACCCCCGAGCTACAGAATCAGCCACAAAATACTTTTTAATTCAAGCAGCAGCCTCAGCTACAATCTTATTTTCAAGTACCATTAATGCTTGACACACAGGCTCAT
+	Anolis_olssoni       ATGAACCCCACCATCTCCATAAATTATCTATCAAGCCTAGCAACAGGAACAATTATTACTATGACCAGCTTTCATTGATTAATAGCATGAATTGGATTAGAAGTCAACACACTAGCAATTATTCCAATCATCTCAGCCCCTCACCACCCACGATCAACAGAAGCTGCAACAAAATACTTTCTCACACAAGCAGCTGCCTCCGCTATAATTCTATTTGCCAGTATAATTAACGCCTGACAAACAGGCACAT
+	Anolis_ophiolepis    ATGAGCCCAACAATCTTTATAATTATTTTATCAAGTCTTGCAACTGGTACAATTATTACTATAACTAGTTATCACTGACTATTAGCCTGAATCGGCCTAGAAATTAATACCTTATCAATTATCCCACTTATTTCAACAACCCACCATCCACGAGCCACAGAAGCCGCTACCAAGTATTTTCTTACACAAGCAGCAGCTTCGGCCATAATTTTGTTTTCTAGTATAACTAATGCATGAGAGACAGGCACAT
+	Anolis_paternus      ATGAGCCCATTTATTTTTACAATTATTTTTTCAAGCTTAGCAACAGGCACAATTATTACTATAACCAGCTACCACTGACTTATAGCCTGAGTTGGATTAGAAATAAACACACTAGCAATTATTCCCATTATCTCAACAACACATCACCCACGAGCCACAGAAGCTTCCACAAAATATTTTCTTACACAAGCTGCAGCCTCTGCCTTAATTTTATTTTCTAGTATAACCAATGCATGACATACGGGATCTT
+	Anolis_sagrei        ATGAGCCCAACAATCTTTATAATTATCATACTAAGTCTTGCAACTGGTACAATTATTACTACTACTAGCCACCACTGACTATTAGCCTGAATCGGCCTAGAAATTAATACCCTCTCAATTATTCCAATTATTTCAATAACCCACCACCCACGATCCACAGAAGCCGCTACCAAGTACTTTCTGACACAAGCAGCAGCCTCCGCCCTAATTTTATTTTCCAGTATAACTAATGCATGAGAAACAGGTACAT
+	Anolis_strahmi       ATGAGC???????????????????????????????????????????????????ACTATAACAAGCTACCACTGACTCATAGCCTGAATTGGACTAGAAATTAACACCTTAGCCATTATTCCAATTATTTCTATACAACACAACCCACGATCAACGGAAGCCGCAACAAAATACTTCCTAACTCAAGCAGCTGCATCCTCCCTAATTTTATTCGCAAGCCTATTTAACGCCTGACAAGTAGGCACAT
+	Anolis_stratulus     ATGAGCCCTATAATTTACACAATCATTTTGTCAAGCCTAGCAACAGGGACAATTATTACCATAACCAGCTACCACTGATTAATAGCTTGAATAGGCCTAGAACTTAATACTCTAGCAATTATTCCATTATCTCATACAACACACAACCCACGATCTACAGAAGCCGCAACAAAATACTTCTTAACACAAGCAGCAGCATCTGCTATAATCTTGTTTTCCAGCATAACCAACGCCTGCTTTACGGGCATAT
+	Anolis_valencienni   ????????????????????????????????????????????????????????????ATAACAAGTTATCATTGACTTATGGCCTGAATTGGACTAGAAATAAACACATTAGCAATTATTCCAATTA?ATTTACTATACACAACCCACGAGCCACAGAAGCTGCCACAAAGTACTTCCTAACACAAGCATCAGCATCAGCCATAATTTTATTTTCAAGCACAATTAACGCCTGACAAACAGGGACCT
+	Anolis_vanidicus     ATGAGCCCAACAATTTATACAACTATTCTAACCAGTCTTGCCACCGGAACAATTATTACAATAACCAGCCACCACTGATTAATAGCCTGA?TCGGATTAGAAAT?AATACATTAGCAATAATCCCAACTATCTCAACAATGCACCACCCTCGATCAACTGAAGCTGCCACAAAATACTTCTTAACTCAGGCAGCTGCCTCAGCCTTAATTCTCTTTTCTAGTATAACTAACGCCTGACAAACAGGCTCCT
+	Diplolaemus_darwinii ATGAGCCCAACTACAATAATAATTATTACATCTAGCCTAGCCACGGA?ACAATCATCACCGCATCAAGCTACCACTGACTACTGGCCTGAGTAGGCCTAGAACTAAATACACTAGCAATTCTTCCAATAATTTCAAAATATCACCACCCACGAGCAACAGAAGCTGCAACAAAATATTTCCTAACACAAGCAGCAGCCTCCGCCATAATCATATTTTCAAGCACACTAAACGCCTGACAAACAGGCACAT
+
+	Anolis_ahli          GGGATATTACTCAATTATCATCTACACCATCACACATTCTATTAACCATGGCATTAGCAATAAAACTGGGCCTAGTCCCAGTACATTTTTGACTACCAGAAGTTATTCAGGGTTCAACAATAACCACGGCACTCATTATTACCACATGACAAAAACTTGCCCCAATTTCCCTAATTTATTTATCTATTAATAACCTCTCAACAGTGGTCCTAATAACCATGGGCCTACTATCTTCAATAGTCGGAGGCTG
+	Anolis_aliniger      GAGATATTACCCAAATATCCTCTACCCCCTCTCATATCCTTTTAACTATCGCGCTTGCTATAAAACTAGGCCTAGCACCCACCCACTTCTGATTACCAGAAGTAGTTCAAGGTTCAACTATAACAACAGCGTTTATTATTATAACATGGCAAAAACTAGCCCCAATATCATTAATTTATTTAACCATAAATAATCTTTCCCCAACAATTCTTCTTCTATTAGGAATAGCCTCATCTATGCTTGGTGGATG
+	Anolis_alutaceus     GAGACATTACCCAACTATCATCAACCCCCTCACACATTTTATTAACTATGGCTTTGGCCATAAAACTAGGACTCGCCCCACTTCACTTTTGATTACCAGAAGTAATTCAAGGGTCTTCCATAAACACAGCCTTAATTATTGT?ACTTGACAAAAACTAGCCCCAATATCCCTAATCTTTTTAACCATAAATAATTTATCAACAACTATTTTAATGATAATAGGACTTGTATCTTCACTTGTCGGAGGATG
+	Anolis_angusticeps   GAGACATTACTCAAATATTATCTACCCAATCAAATACTATATTGACTATAGCCCTAGCTATAAAACTAGGGCTGGCCCCACTTCACTTTTGACTACCAGAAGTAATCCAAGGATCAACAATACTAACCGCCTTTATTATTACTACATGACAAAAACTAGCCCCAATATCTCTAATTTTTTTAACTATAAATAATATATCCACAACAATCCTCCTACTAATAGGAATATTATCCTCACTTGTTGGCGGTTG
+	Anolis_bahorucoensis GAGATATTACCCAATTATCCACAACCCCCGCCCACATCCTACTGACTATAGCACTTGCCATAAAACTAGGCCTAGTCCCAGCCCATTTCTGACTACCAGAAGTCCTCCAAGGTTCAACCATTACAACTGCCCTCATTATTACTACATGACAAAAACTCGCTCCAATATCACTAATTTTCTTAACCATTAACAACCTGTCCTCAACAGCCCTTCTATTATTAGGCTTAATGTCCTCATTATTAGGCGGCTG
+	Anolis_barahonae     GAGATATCACTCAAATAACTAATATCCAATCCAACATTCTATTAACAATAGCACTT?CCATAAAATTAGGTCTAGCACCACTACATTTCTGACTTCCAGAAGTATTACAAGGCTCAACCTTAAATACCGCCCTTATTATAATTACATGACAAAAGCTAGCCCCAATATCATTAATTTTTATAACCATTAATAACTTATCGACAACAATACTATTATTACTAGGATTAGTATCAACAATGCTAGGAGGATG
+	Anolis_brevirostris  GAGACATCACTCAAATATCTTATGCACCATCCAACATACTTTTAACTATAGCACTCTCCATAAAGCTCGGACTAGCCCCGCTACACTTCTGACTTCCAGAGGTTCTTCAAGGCTCAACCCTACCCACCGCCCTCATTATTACCACATGGCAAAAACTAGCCCCTATAGCACTAATCTGCCTAACAATTAATAATCTTAACCCAGCAATCCTACTAATCTTAGGACTTTTATCCTCAACTATTGGGGGTTG
+	Anolis_coelestinus   GAGACATCACTCAAATTTCCGCCACCCCATCCCACATCCTCCTAACTGCCGCATTAGCCATAAAACTAGGCCTAGCCCCTATACACTTCTGATTACCAGAAGTCCTTCAAGGGTCCACCTTAAAAACAAGCTTTATTATTGTCACATGACAAAAACTAGCCCCTATATCATTAATTTATTTAACTATAAATAATCTTTCCTCAACAATTCTTCTCTCACTAGGACTAGTTTCATCTATGGTAGGAGGATG
+	Anolis_cristatellus  GGGACATTACTCAAATATCTTATACCCCATCAAATGTTCTTCTTTTACTAGCACTGGCCCTAAAACTAGGACTAGCCCCAGCACACTTCTGACTCCCAGAGGTATTACAGGGCTCAACCTTATTTATTGCCCTCATTATTACTACGTGGCAAAAACTGGCCCCAATGTCACTTATCTACATATGTACAAATAATCTTCCATCAGTAATTTTATTAATACTAGGCATTATCTCCTCCACTGTCGGGGGGTG
+	Anolis_cuvieri       GAGATATTACCCAAATATATACTCCTCAATCTAACATTTTATTAACTATAGCCCTTGCCATAAAAATAGGATTAGCCCCAATACACTTCTGACTACCAGAAGTACTTCAAGGTTCAACCTTAAACGCTGCTCTTATTATTACCACATGACAAAAAATCGCCCCAATGTCATTAATTTATTTAACCATTAATAATTTATCAACAACAACCTTATTAACACTAGGATTAATTTCTTCAATATGAGGAGGATG
+	Anolis_distichus     GAGACATTACTCAAATATCTTATGCGCCATCTAACCTCCTTCTCTCCATAGCACTAGCCATAAAACTAGGACTAGCCCCCCTACACTTTTGACTCCCAGAAGTACTTCAAGGCTCAACTTTATTTTCTGCCCTCATTATTGTTACATGACAAAAATTAGCCCCAATATCACTGATTTATTTAACTATTAGTAACCTTAACCCAACTATTCTACTAATCTTAGGCCTCCTATCCTCAACTATTGGGGGATG
+	Anolis_equestris     GAGACATTACCCAAATATCAGCCAACCCCTCCCATATTATATTAACTATGGCACTTGCCATAAAACTAGGCCTAGCACCTCTACACTTCTGACTACCAGAAGTACTCCAAGGCTCAACCATAAAAACCGCATTCATCATTACAACATGACAAAAACTTGCCCCAATATCATTAATCTACCTCATTATTAATAACTTATCCCCCACACTTCTCCTCCTATTAGGACTAATATCATCTACTCTGGGAGGCTG
+	Anolis_garmani       GAAATATTATTAACTTAACATACGAACCCGCGCACATCCTATTAATTATGGCCCTAGCAATAAAACTTGGCCTCGCACCCATACACTTTTGACTGCCAGAAGTTCTTCAAGGCTCAACCTTAACCACTGCACTAATTATTACCACTTGACAAAAACTCGCCCCAATATCTTTAATTTATATAACCCTAAACAATCTATCGACCACAATTTTAATTTTACTCGGACTTCTATCCTCAATTATTGGAGGATG
+	Anolis_grahami       GAGACATTATTAACTTAACATATGAGCCCGCGCACATCCTGCTAACCCTGGCCCTAGCAATAAAACTAGGCCTTGCACCTATACACTTCTGA?TACCAGAAGTATTACAAGGCTCAACCTTAACCACTGCACTAATTATTACCACTTGACAAAAACTAGCCCCAATATCCTTAATTTATATGACCCTAAACAACCTGTCAACCACAACTTTAATCTTACTAGGACTTCTATCTTCAATTATTGGGGGGTG
+	Anolis_insolitus     GAAACATTACCCAAATATCCTCTACTCCCGCTAATATTCTTCTAACCCTAGCACTAGCAATAAAACTAGGACTTGCCCCCACACACTTCTGACTACCAGAAGTGCTTCAAGGCTCAACTATAAACACAGCCCTCATTATTCATACATGACAAAAACTTGCCCCAATGTCACTGATTTACTTAACAGTAAATAACTTATCCCCTACAATTCTATTATCCCTGGGCCTCTTATCTTCCCTAATTGGAGGCTG
+	Anolis_krugi         GGGACATTACTCAAATATCTTACACCCCCTCCAACATCATTTTAACAATAGCACTAGCCATAAAGCTAGGACTTGCCCCAATGCACTTTTGACTTCCAGAAGTCCTACAAAACTCAACCCTTATTACTGCTTTTATTATTTCTACATGACAAAAACTTGCCCCAATATCACTAGTCTACTTGACTATTAATAACCTTCCACCAATAATTCTGCTTACCCTAGGAGTTATTTCCTCTACTATGGGCGGATG
+	Anolis_lineatopus    GAGATATTACTAGCCTATCATATATGCCCTCACATATTTTATTAACTATAGCATTAGCTATAAAACTAGGGCTTGCCCCAATGCACTTCTGACTACCAGAAGTGCTACAAGGAACAGCCCTACCAACTTCACTTATTATTACTACTTGACAAAAACTTGCCCCAATGTCCCTAATTTATATAACTATTAATAGTTTATCAACCATAATTCTAAT?TCACTAGGCCTACTATCCTCAATTATTGGAGGATG
+	Anolis_loysiana      GAAATATTACCCAAATACTAACCTTCCCATCACACATTCTCTTAGCCATAGCACTGGCCATAAAATTAGGCCTAGCCCCACTTCACTTCTGACTACCAGAAGTTATTCAAGGATCAACCATAATTACTGCATTT?TTATTACCACATGACAAAAACTAGCCCCTATGTCTCTTATTTTCATAACCTCAAACAATATGCCCACAACAATCTTTCTGCTTATAGGACTTCTTTCCTCATTCACCGGAGGGTG
+	Anolis_luteogularis  GAGACATTACCCAAATATCAGCTAACCCCTCCCATATTATATTAACCATAGCGCTTGCCATAAAACTAGGCCTAGCACCTCTACACTTCTGACTACCAGAAGTACTCCAAGGCCTAACCATAAAAACCGCATTCATCATTACAACATGACAAAAACTTGCCCCAATATCATTAATTTACCTCATTATTAATAACCTATCACCTATACTTCTCCTCCTATTAGGACTAATATCATCTACCCTGGGGGGCTG
+	Anolis_marcanoi      GAGACATTACTCAAATTTCAACTACCCAATCATGCACCCTTCTTACAATAGCAATCTCAATAAAGCTAGGCTTAGCCCCACTACACTTCTGACTACCAGAGGTTCTCCAAGGTTCAACAATATTTACTGCTTTAATTATTATAACATGACAGAAACTAGCCCCCATATCCCTACTTTTCCTCACTATAAACAACCTATCCACATCAATACTCTTAACAATTGGACTTGTATCAACAATAGTTGGCGGATG
+	Anolis_occultus      GAGACATTACCCAAATAACCACAAACCCATCCAATATTTTACTAACTATAGCCCTTGCCATAAAACTAGGCCTAGCCCCAACACACTTCTGACTCCCAGAAGTACTTCAAGGGTCAACTATAGACACTGCCCTAATTATTACAACATGACAAAAAATTGCCCCAATAACCCTAATTTACCTCACCATAAACAACCTATACCCAAGCATTCTAATAACAATAGGCCTATTATCTACAATAATCGGGGGTTG
+	Anolis_olssoni       GAGACATTACTCAACTGTCAACCACCCCTGCCCACACCCTCCTAACTATAGCACTAGCCATAAAACTAGGACTTGCCCCACTTCACTTCTGATTACCAGAAGTTATTCAAGGTGCCACCCTTCCCACTGCTTTCATCATTGTAACATGGCAAAAACTTGCTCCTATATCACTTATTTTTTTAACCATAAACAACCTAAACCCAACAATTTTACTTCTCCTTGGACTTCTATCTTCTACAGTAGGAGGATG
+	Anolis_ophiolepis    GAGATATTACCCAGCTATCATCAACACCATCACACATCTTTCTTACAATAGCATTAGCAATAAAACTAGGTCTAGTCCCAGTACACTTTTGATTACCAGAAGTCCTACAAGGGTCAACCCTAACAACTGCACTTATTATTACTACATGACAAAAACTTGCACCAATATCTTTAGTCTACTTAACCATTAATTCCCTTTCAACAACAGTTTTATTATTAATGGGACTCATATCCACTGTTATTGCTGGATG
+	Anolis_paternus      GAGACATTACTCAAATATTATTTACTCCATCAAACACCATGCTAACCATAGCCCTAGCCATAAAACTAGGGTTAGCTCCACTTCACTTCTGGCTACCAGAAGTAATTCAAGGATCAACAACACTAACCGCCTTTATTATTACTACATGACAAAAACTAGCCCCAATATCTCTAATTTTTTTAACTATAAATAGTATGTCCACAACAATTCTTCTACTAATGGGAGTCTTATCCTCACTTGTTGGTGGTTG
+	Anolis_sagrei        GAGACATTACACAACTCTCATCAACACCATCACACATCTTATTAACAGTAGCACTAGCAATAAAACTAGGCCTCGTACCAATACACTTTTGACTGCCAGAAGTACTACAAGGGTCAAGCCTAATAACTGCACTTATTATTACTACATGACAAAAAATCGCACCTATAACTTTAATTTATCTAACAATTAACTCCCTCTCAACAACAATTCTGTTATTTATGGGACTTACATCCTCTATCATTGCAGGATG
+	Anolis_strahmi       GAGATATTACACAACTATCAACTACACAAGCACACATTCTTTTGACTATGGCCCTATCAATAAAACTAGGCCTAGCCCCACTACACTTTTGATTACCAGAAGTAATTCAAGGATCTACTATATTTACTGCCTTAATTATTACAACATGACAAAAACTAGCCCCAATATCTCTTATTTTCCTCACCGCAAACAACTTATCAACGACAATTCTTTTAACAATAGGACTTCTGTCTGCAATAATCGGCGGATG
+	Anolis_stratulus     GAGACATTACTCAAATATCTTATTTACCATCTAATATTCTTCTAACCATGGCACTAGCCATAAAACTCGGCCTAGCACCAGTGCACTTCTGATTTCCAGAAGTCTTACAAGGCTCAACCCTACTTACCGCTTTTATTATTTCAACATGACAAAAACTGGCCCCAATATCACTAATTTTTTTGACAATAAGCAATCTTCCACCTATAATTTTATTAACTTTAGGACTTGTTTCCTCTATTATTGGTGGGTG
+	Anolis_valencienni   GAGACATTACTAACCTCTCATCCGAACCAGCACACATTTTATTAACCATTGCACTAGCAATAAAACTAGGCCTAGCCCCAATACACTTTTGACTACCAGAAGTACTACAAGGGTCAACCATAACCACAGCACTAGTTATCTCTACTTGACAAAAACTGGCCCCAATAGCCCTAATTTATCTGAACATTAATAATCTATCAACAGCTGTCCTAATCTTACTAGGACTCTTATCATCAATTATTGGGGGCTG
+	Anolis_vanidicus     GAGATATTACCCATCTATCATCAACCCCAGCACATATTTTATTAACCATGGCCCTAGCAATAAAATTAGGCCTGGCCCCATTTCACTTTTGATTACCAGAAGTCCTACAAGGATCTGCTATAAATACTGCACTAATCATTACTACTTGACAAAAGCTAGCTCCAATATCTCTAATTTTCTTGACCGTAAATAACCTATCTACAACAATTCTTTTAACAATGGGACTTATATCTTCACTAATCGGAGGGTG
+	Diplolaemus_darwinii GAAACATCACACAACCAAACAACACAACATCAAGCATCTTACTAACAGTCGCACTAGCTATAAAACTAGGACTTGTGCCAATACACTTCTGACTACCAGAAGTATTACAAGGCTCCTCCATAAAAACAGCCCTCATTATTAGTACATGACAAAACGTAGCCCCAATAGCCCTTATTTTCCTGACATCCAACACACTATCAACCACAATTCTATTATTGATAGCCACACTCTCCACCATCATTGGTGGCTG
+
+	Anolis_ahli          AGGCGGACTAAACCAAACACAGACACGAAAAATTATGGCATATTCATCAATCGCACATCTAGGATGAATAACCACTGTTTCCTCAATTATACCAAACATTATAGTTTTAAACTTAATAATTTACCTAATTACAACCGCAGCCACATTTTTCACACTAATACTGTTTAAATCAAAAACTATTCAAGATACAACAATAAACTGAACCTTATCCCCAATAACAACCGTCATAATAATAATTCTATTACTCTCA
+	Anolis_aliniger      AGCAGGACTAAATCAAACACAGACCCGAAAAATTATAGCATTTTCATCAATTGCCCACCTTGGATGAATAGCTGTAATTGCATCTATTATGACAAATATTCTTACTCTTAACCTTATACTTTACTTAATTATGACAACAACCGCGTTCTTTACCCTAATTTTATCAAAATCAAAAACAATTCAAGATACAACAGCAACCTGAACTCTCTCCCCAACCCTAACTATTATTATAATGTTATCACTTCTTTCA
+	Anolis_alutaceus     AGCAGGACTTAATCAAACACAAACTCGAAAAATTATAGCCTACTCATCTATTGCTCACCTAGGGTGAATAGCAGCCATTTCCTCAATTATAACAAACATTTTAATCCTCAACCTATTAATTTACCTAATTATAACTACCTCAGTATTTTGCTTTATTATTATTACAAAATCAAAAACAATCCAAAACACAGCTACTATTTGGACAATATCACCAACACTAACAATTACCATAATACTTTCTTTACTTTCA
+	Anolis_angusticeps   AGGGGGGCTAAACCAAACACAAACCCGAAAGATCATAGCATACTCATCAATTGCTCACCTTGGATGAATAGCCACAATTTCATCTATTATAACCAACATCCTAATCTTAAACCTAGTTCTTTACCTAATTATGACTACATCAATGTTTGTCTCTTTAATTATTTCTAAGTCAAAAACAATCCAAAATACAGCAGAAACCTGAACACTCTCACCTACTCTAACAGTTTTTATGTTACTTTCACTCCTATCT
+	Anolis_bahorucoensis AGCCGGACTAAACCAAACACAAACCCGAAAAATTATAGCATTTTCATCCATTGCTCACCTTGGATGAATAGCCACTATTTCATCAATTATAACCAATATCCTTATCATAAACTTACTACTTTATTTAATTATGACAACAACTATATTTTACTCCCTTATTTTATCAAAATCTAAAACTATTCAAGACACAATAACCACCTGAACACTCTCGCCAGCCCTAACTATTATAATAATGTTGTTTCTCCTCTCC
+	Anolis_barahonae     AGGAGGATTAAACCAAACACAAATACGAAAAATAATAGCATATTCATCAATTGCACATTTAGGCTGAATAGCAACAATTTCTTCTATTATAACAAATATTCTTATTATAAACTTCTTAATCTATATAATTTTAACCTTATCTATATTTTTATTACTTATTTTCTCAAATTCTAAAACAATTCAAGACACCACAACAGCCTGAACCCTATCTCCAACCATTACTATTATAATAATACTTACACTCCTGTCA
+	Anolis_brevirostris  GGCCGGCCTTAACCAAACACAAACCCGAAAAATTATAGCATATTCATCAATTGCCCACCTAGGATGAATAGCCGCAATCGCCTCAATCATAACAAACATCATAATTATAAACCTCCTAATTTACTTAATGATAACAACCGCCCTATTCTGCTCCCTAATCTTTTCAAAGTCAAAAACTATTCAAGATACAACAACCACCTGAGCCACATCCCCAATAATAACTATTACTACTGCGCTCTCATTATTATCA
+	Anolis_coelestinus   GGGCGGACTAAACCAAACACAAACCCGAAAGATCATAGCATACTCATCAATTGCACATCTCGGATGAATGGCCTCAATCTCCTCCATTATAACTAATATTCTTGTTATAAATTTAGTACTTTACCTAATTATAACAACATCTGTATTCTACGCTTTGATCTTAACAAAGTCTAAAACAATTCAAGATACAACAACCACCTGAACACTCTCCCCAACTTTAACAATTATTATAATACTCTCACTTCTCTCC
+	Anolis_cristatellus  GTCTGGATTAAACCAAACACAAACTCGAAAAATCATAGCATACTCATCAATTGCACACCTTGGATGAATGGCTATAATCGCCTCAATTATAACAAACATCATAATTATAAACCTGGTGATTTATTTAATAATAACAACCACCTTGTTTACCACCCTAATTTGCTCTAAATCAAAAACAATTCAAGACACAGCAACCACTTGAACAACATCACCAACCCTAACTATCATTACTTTACTTTCTCTTCTGTCA
+	Anolis_cuvieri       AGCAGGCCTAAACCAAACACAAACCCGAAAAATCACAGCATACTCATCTATTGCTCACATTGGATGAATGGCTACAATTTCTTCAATTATAACAAATATTCTTATTATAAACCTATTAATTTATTTAATTATAACAATCTCTATATTTAACTCACTAATTTTATCCAAATCTAAAACTATTCAAGACACGTCAATGACATGAACATTATCTCCAATATTAACTATTATTACTATACTTACACTCTTATCA
+	Anolis_distichus     GGGTGGGTTAAATCAAACACAAACCCGAAAAATCATAGCATATTCATCAATTGCTCACCTAGGATGAATGGCCATTATTGCCACCATTATAACAAACCTCATAGTCATGAACCTCTTAATTTATCTAATAATAACAACAGCCCTATTCTCCCTCCTAATTTTTTCCAAATCAAAAACCATTCAAGACACAACAACAACCTGAGCACTCTCCCCCACAATAACTATTATAATGACATTTCTATTATTATCA
+	Anolis_equestris     AGGAGGACTAAACCAAACCCAAACCCGAAAAATCATAGCCTATTCATCAATCGCCCACCTAGGTTGAATAGCTACAATCTCTTCAATCATAACCAATATTCTTGTTATAAACCTATTACTTTATATAACTATGACAACATCAATATTTTTTACCCTTATTTTATCAAAATCTAAAACAATTCAAGATACAACTACCTCATGAACACTATCTCCATCCCTAACCATCATTATAATATTATCACTTCTCTCA
+	Anolis_garmani       GGGGGGACTCAATCAGACCCAAACTCGAAAAATCATAGCATTTTCATCAAT?CGACACCTGGGGTGGATAATTACTGTCTCATCAATTATGCCGAACATTATAATTTTAAACCTAATTATTTATTTAGTCATAACAACCGCCCTATTTTACTCACTAATCTTATC?AAATCAAATGGAATCCAAGACACAACAACAACTTGAACACTTTCACCCACAATAACTATTATAATGATAACTTTACTCCTCTCC
+	Anolis_grahami       GGGCGGACTAAACCAAACCCAAACCCGAAAAATTATAGCGTTTTCATCAATCGCACATCTTGGGTGAATAATTACTATTTCATCAATTATACCCAATATTATAGTTTTAAACCTGACAATCTACCTAATCATAACAATTGCCCTATTTTATTCACTAATTCTATCTAAATCAAAAACAATCCAAGATACAACA?CAACTTGGACACTCTCACCCGCACTGACTGCCATAATAATAACACTACTTCTTTCC
+	Anolis_insolitus     AGCCGGACTAAATCAAACACAAACTCGAAAAATTATAGCATACTCATCAATCGCACACCTAGGATGAATGGCCACAGTAGCCTCAATTATAACAAATATTCTTCTAATAAACCTCATAATCTACTTGTTAATAACAACAGCCATATTTTTCTCTCTTATTTTATCCAAAACTAAAACAATTCAAGACTCAGCAATAACCTGAGCACTTTCACCAGCCTTAACTACTATAACAATACTCACACTTCTCTCA
+	Anolis_krugi         AGCAGGACTAAACCAAACACAAACTCGAAAAATTATAGCATACTCATCAATTGCACACCTGGGCTGAATGGCCTCTATTGCCTCAATCATAACAAACATTATAATCATGAATCTAATGATTTATTTAATTATAACAGCGGCCCTATTCTTCTCATTAATTTATTCTAAGTCAAAAACAATTAAAGACACAACATCTGCCTGAACAATATCCCCCACCCTAACTATTACAATAATGTTAACCCTTTTATCA
+	Anolis_lineatopus    GGGAGGACTAAACCAAACACAAACTCGAAAAATTATAGCATTTTCATCAATCGCCCACCTAGGATGAATAATTACTATTTTTTCACTCATAACAAATATTATAATCTTAAACCTAACAATTTACTTAATCATAACAACAGCAATATTTTGCTCACTAATCTTATCAAAATCAAAAACAATACAAGATATTATGATAACTTGAACAATCTCACCCACCCTTACTACCCTAATAATAATTTTACTCCTCTCC
+	Anolis_loysiana      GGGCGGACTAAACCAAACACAGACCCGAAAAATTATAGCCTACTCATCAATCGCCCATCTAGGATGAATCGCCTCCATTTCCTCAATTATAACAAACATTATAATTATTAACCTACTAATCTACCTAATTATAACGACCTCCATATTTTTAACCCTTATTTTTTCTAACTCAAAAACAATCCAAAACACAGCAATTAATTGAACACTTTCTCCAACACTTACAACTATTATTCTACTTTCACTCCTATCA
+	Anolis_luteogularis  AGGGGGATTAAACCAAACCCAAACCCGAAAAATCATAGCCTACTCATCAATCGCCCATCTAGGTTGAATAGCTACAATCTCTTCAATCATAACCAATATTCTTGTTATAAACCTATTACTTTATATAATTATAACAACATCAATATTTTTTACCCTTATCTTATCAAAATCTAAAACAATTCAAGATACAACTACCTCATGAACACTATCTCCAACCCTAACCATCATTATAATATTATCACTTCTCTCA
+	Anolis_marcanoi      GGCAGGATTGAATCAGACACAAACACGAAAAATTATAGCATACTCATCAATTGCGCATCTTGGCTGAATAGCCCCTATTGCCTCAATTATAACAAACATTCTTATTATAAATTTACTTATTTACTTACTTCTTACAACGGCCCTATTTTCCTCTCTAACACTATCTAAATCAAAGACAATTCAAGATACATCAACAACCTGAACAATATCACCATATTTAACTATTATAACCATACTTATACTTCTTTCA
+	Anolis_occultus      AGGAGGCCTAAACCAAACACAAACCCGAAAAATTATAGCATACTCATCAATTGCACACTTGGGTTGAATGGCCGTAATTTCCACCCTAATAACAAACATCTTTATTATAAACCTAATTATGTATCTAATTATAACAACAACCGCATTCTGGGCCCTAATCTGCTTAGAATCTAAAACTGTAAAAGACACAACAACTGCCTGAACAACCTCACCAACCATCACTTTAACACTTCTTATTTCCCTCTTATCC
+	Anolis_olssoni       AGCCGGATTAAACCAAACACAAACCCGAAAAATTATAGCCTATTCATCAATTTCACACTTAGGCTGAATGGCCGCAATCTCCTCTATTATAACTAATATTCTTATTATAAACCTAACCCTTTATTTAATTATAACAACAACCATGTTTTATACCCTAATTTTAACTAAATCCAAAACAATCCAAGACTCAACCCTCACCTGATCACTTTCACCAGTACTAACAATTATTATAATACTAACACTCCTCTCA
+	Anolis_ophiolepis    AGCAGGACTTAACCAAACACAAACACGAAAAATTATAGCATACTCATCAATTGCTCACCTTGGATGAATAGTCGCTGTTTCTTCTATTATAATAAACCTCATAGTAATAAATCTAATTATTTATTTAATCATGACCTCTGCCCTATTTCAAGCACTAATTGTCTCTCAATCAAAAACAATTCAAGATACAACAATGACATGAGCACTATCACCAACCATTTCCATTTTAACCATAGCACTTCTACTATCA
+	Anolis_paternus      AGGGGGGTTAAACCAAACACAGACCCGAAAAATCATAGCATACTCATCAATTGCTCACCTCGGATGAATAGCTACAATTTCATCTATTATAACAAACATCTTAATTTTAAACCTAACTATTTACCTAATTATAACAACTTCAATATTTTTTTCCCTAATTATTTCTAAGTCAAAAACAATCCAAAACACAGCAGAGACCTGAACATTTTCACCCATACTAACGATTATAATGATACTTTCACTTCTTTCA
+	Anolis_sagrei        AGCTGGACTTAATCAAACACAAACACGGAAAATCATGGCATACTCATCAATTGCTCACCTAGGATGAATAATTGCTATTTCCTCTATTATGACGCATCTTATAGTAATAAACCTAATAATTTACTTAATTATAACCTCAGCCCTATTCCAAGCACTAATTTGCTCTAAATCAAAAACAATCCAAGACACAACAACAACCTGAGCCCTATCACCAGTTATTGCTACCATAACCATAGCACTATTATTATCA
+	Anolis_strahmi       AGCAGGACTTAACCAAACACAAACCCGAAAAATTATAGCATACTCATCAATTGCTCACCTTGGATGAATATCCACAATTGCCTCAATCTATACAAACATTTTTATTATAAACTTATTTATTTACTTACTACTAACAACAGCCATATTTTACTCCCTAATTTTTTCAAAATCAAAAACAATTCAAGATACATCAGTCACTTGAACAACTTCCCCATATTTAATGATTTTAACAACATTAACATTACTTTCA
+	Anolis_stratulus     AGGCGGACTTAACCAAACACAAACCCGAAAAATCATAGCATACTCATCAATCGCACACCTAGGATGAATAGCTGTAATTTCCTCAATTATAACAAACATTATAATTATAAACCTTTTAGTTTATTTAATAATAACAACAGCCCTATTTTTAGCCCTAATTTTATCTAAATCAAAAACAATTCAAGATACAACAAACACTTGAACAATATCCCCCACTTTAACTATTATTATGATACTTCTACTCCTCTCA
+	Anolis_valencienni   AGGGGGACTTAATCAAACACAAACCCGAAAAATTATGGCATTTTCATCAATTGCACACCTAGGGTGAATAATTACTGTTTCATCTATTATAACTAATATCATGATTATAAACTTAATAATCTACTTAATTATAACTACAGCCCTATTTTACTCATTAATTTTATCCAAATCAAAAACTATTCAAGATACAACAACAGCCTGAA?ACTATCACCCACCCTCACCACTATAATAATAATTTTACTTCTGTCC
+	Anolis_vanidicus     GGCCGGACTAAATCAAACACAAACCCGAAAAATTATAGCTTTCTCATCAATCGCCCACCTAGGATGAATAGCAGCTATCTCTTCTATTATAACAAACATTTTAATTCTAAACCTACTTATTTACCTAATTATAACAACCTGCATGTTTTGCCTACTTATCATTACAAAATCTAAAACAATTCAAAACTCAACCATTATTTGAACACTATCCCCCACAATTACAATTATCATAATACTTTCACTTCTTTCT
+	Diplolaemus_darwinii AGGCGGATTAAACCAAACACAGCTACGAAAAATTATAGCATTCTCATCAATCGCCCATATTGGCTGAATGGCGGCAATCTCAACAATTTCAGAAAACATTTTAACCCTAAATTTAATACTTTATCTATTAATAACTTCCTCAACCTTCTCAGCACTTATTTTATCTAAATCAAAAACCATCAAAGACACATCCACATCACTAACAACCTCCACAACACTAACCATCATAATAATACTTATGCTACTATCA
+
+	Anolis_ahli          CTTGGAGGCCTCCCACCATTAACTGGATTTATACCAAAATGATTAATTCTTGAAACACTAACAACCCAAAACTTTATTATAGCAGCAGTAGCTATAGCCATTTCAGCACTACTAAGCCTATTTTTTTACCTTCGACTTACCTACACTACAACCCTCACACTTGCACCAAATACTACACATACAAAACTAAAATGACGATTTAAACCAAACCTGCCAACCTTTCTAATACTTTCTTTTTCTACCACTTCAA
+	Anolis_aliniger      CTAGGCGGACTTCCACCATTAACCGGATTTATACCAAAATGATTAATTTTAGAAGAATTAACTACCCAAAAGTTAGCCCCCCTAGCTACTATTATAGCAGCATCCGCCTTACTCAGCTTATTTTTTTATCTCCGATTAGCCTACACTACAACACTCACATTTTCCCCAAACACTACACAAACAAAATTCAAGTGACGATTTAAACTACCCAACCTAGCTCCCCCACTAACAATTACCACCCCCCTAACTA
+	Anolis_alutaceus     CTAGGAGGACTACCGCCACTAACAGGATTTATACCAAAATGAATAATTATAGAAGAACTTATTAATCAAAACTTTACTACAATTACTACTATGATAGCACTATCGTCCTTATTAAGCCTATTTTTTTATATTCGACTAACATATACAACTTCACTTACACTATCCCCAAACACAACCCAAACGAAATTTAAATGACGATTTTACCCAAACATAAAAACCACAGTAATTATAGTCTCTACAACAGTCACAA
+	Anolis_angusticeps   TTAGGTGGACTACCACCCCTAACTGGGTTTATTCCAAAATGACTAGTTATAGAAGAACTAATTTTACAAAATTTTAATTTTCCAGCTATTTTAATAGCCATGTCCTCCCTACTAAGTCTATTTTTTTACCTTCGAATTACCTACACAACCACACTATCGCTATCACCTAATACAACTCAAATAAAATTTAAATGACGTTTTTATCCAAAAACCACAACCACCTTATCCTCTTCCACCGCAACAATAACAA
+	Anolis_bahorucoensis CTAGGGGGGCTACCTCCACTAACTGGCTTTATCCCAAAATGACTTATCCTAGAAGAACTTACTACCCAAAACCTTGCCCCACTAGCTATTATTATAGCAATATCAGCCCTTCTTAGCCTATTTTTTTATTTGCGTCTAGCCTATACTACAACACTAACACTTTCTCCTAATACAACCCAAATAAAACCTAATTGACGATTTAAACCACTAGCCCAAACCACCCCCCTAACAGCTATGACCCCCCTATCTA
+	Anolis_barahonae     TTAGGGGGATTACCCCCACTCACCGGATTTTTACCAAAATGACTAATTCTAGAAGAATTAACATCCCAAAACCTAACAACCCTGGCTATAATCATAGCAATATCCGCCCTGTTAAGTCTGTTTTTTTACCTTCGACTAACCTACACAACATCACTCACACTTTCCCCAAACACAGTATTTACAAAATTTAAATGACGATATAAGCCCATGATACCAACTCAAATAATAGTAACTTTTACTATTATATCTA
+	Anolis_brevirostris  TTAGGCGGACTTCCACCCCTAACAGGATTTGCACCAAAATGACTAATTCTAGAAGAGCTCACTACCCAAAACTTAATCCCCATAGCCGCTGTTATAGCCCTATTCTCACTTCTTAGCTTATTTTTTTACACTCGCCTAGTTTATACAACAACACTTACACTCCCGCCTAGCACACTTCAAACAAAATTTAAATGACGATTTAAACAGGCCCCACCAACCTCACCAATAACAATTTCATCAACAGCAGCCA
+	Anolis_coelestinus   CTTGGAGGCTTACCCCCCTTAACTGGATTCACACCAAAATGACTTATCTTAGAAGAATTAACCACCCAAAATCTACTCCCCCTAGCCACTACTATAGCGATATCTACCCTACTCAGCCTGTTTTTTTACTTACGTTTAACCTATACCACAACCCTTACATTCTCCCCAAACACTACACATACAAAATTTAAATGACGATTCAAGTCAACTAATTTAACAATACCACTAACACTTACAGCACCCCTGAGCG
+	Anolis_cristatellus  CTTGGGGGACTCCCACCTCTTACAGGATTTTTACCAAAATGACTAGTTTTAGAAGAAATAATTGTACAAAACTTAACCCCACTCGCCACAACCATAGCAATTTCCGCCCTTCTTAGTCTATTCTTCTATCTACGCCTAACCTACACCACAACACTAACATTAGCTCCAAACACCCTACAAATAAACTTTAAATGACGGTTTAAACCAACCACATCATTTATTCTAATAACCCTTTCAACTATGACCATTT
+	Anolis_cuvieri       TTAGGGGGATTACCACCACTAACCGGATTTATACCAAAATGACTAATTCTAGAAGAATTGACAACCCAAAACTTAACTTCACTAGCCGTAATCATAGCAATAACTGCCCTATTAAGCCTTTTTTTTTACTTACGACTAACATACACAACAACACTTACATTATCACCAAACACAACACAAACAAAATTTAAATGACGATTTAAACCAAATTTACCTACATATTTACTAATAATCTCCTCTACAACAACCA
+	Anolis_distichus     TTAGGGGGGCTTCCCCCAATAACAGGATTTGCACCAAAATGACTAATTCTAGAAGAACTCACAACCCAAAATCTAATTCCTCTAGCTGTTTTAATAGCAGTATTTTCCCTTCTTAGCCTGTTTTTTTATACTCGACTAGCCTACACAACAACACTTACACTATCGCCCAATACACTACA?A?AAAATTTAAATGACGATTCAAACAAACCCTATCAACTTCACTAATAGTAACTTTATCAACAATAGCTA
+	Anolis_equestris     TTAGGCGGACTACCCCCCCTAAGTGGATTTATACCAAAATGATTAATCCTAGAAGAACT??????CCAAAATCTTCCCCCACTAGCCACTATTATAGCAATATCTGCCCTACTTAGCTTATTCTTTTATCTACGACTTACCTACACTACTACCCTAACAATCTCCCCTAATACCTTACAAACTAAATTTAAATGACGATTCAAACCTACGACCTCAACCCTACCAATAATAATCTTTACCCCATTAACTA
+	Anolis_garmani       CTAGGGGGCCTCCCACCACTAACTGGCTTTATACCAAAATGA?TTATTCTAGAAGAACTAGTTGCCCAAAATCTTATCTCAACCGCCACTATTATAGCCATATCAGCACTACTAAGCCTATTTTTTTATCTACGACTAACCTATACAACAACACTAACCCTATCCCCGAACACTA?ACAAACAAAGTTTAAATGACGATTTAAACCAAACCGTACAACACCCGTTATTGGGGCCTCAGCTACTATCTCAA
+	Anolis_grahami       CTGGGAGGGCTACCACCACTAACGGGCTTTATGCCAAAATGACTTATCTTAGAAGAACTAGTAGCCCAAAACCTCACCCCAGCCGCCACTGCTATAGCCATATCAGCGCTACTAAGCCTGTTCTTCTAC?TGCGGCTAACCTATACAACAACACTAACCCTGTCCCCAAATACCACTCAAACAAAACTTAAATGACGATTTAAGCCAAACCACACAACACTTCTCATAGGGGCCTCCTCCACAATCTCAA
+	Anolis_insolitus     TTAGGCGGACTACCCCCACTTACTGGATTTATGCCCAAATGACTAATCCTAGAACAATTAGCCAGCCAAGACTTAGTGCCCCTAGCCACTATTATAACTATATCTGCCTTACTTAGCCTATTTTTTTATCTACGACTAACCTACACAACAACACTTACACTATCCCCTAACACTACACAAACAAAATTTAAATGACGATTTAAACTAAACCAACCTACCCAACTAACAACAACCACTATTACAATAGCAA
+	Anolis_krugi         CTTGGAGGATTACCTCCCCTAACAGGATTTTTACCAAAATGACTAATCCTAGAAGAA???????????????CTTGCCCCATTAGCCACCACC?TAGCAATATCCGCTCTTCTAAGCCTATTCTTTTACCTACGCCTGGCCTATACAACAACACTAACACTTTCACCAAATACACTTCAAATAAAATTTAAATGACGATTTAAACCAACCACTACACCACCACTAATAATCTTTTCATCTATAGCCGTTT
+	Anolis_lineatopus    CTGGGCGGCCTACCACCACTAACCGGATTTATACCAAAATGATTAATTCTAGAAGAATTGGTTGCCCAAAACCTTATCCCAACAGCTACTATTATAGCAATGTCGGCACTCCTCAGCCTATTTTTTTATTTACGACTTACCTATGTAACTG?ACTTACACTCTCCCCAAACACAGCACAAACAAAATTCAAATGACGACTTAAACCAAACTCACCAAAACTGTTCATAATAGCTTCCTCCAGCAATATCA
+	Anolis_loysiana      CTAGGAGGACTACCACCCCTAACAGGATTTATACCAAAGTGACTAGTTATAGAAGAACTAATTTTACAAAACTTCTTTTTATTAGCCAGTATAATAGCCCTATCATCTCTACTCAGCCTATTTTTTTACCTCCGACTAACCTACACTACCACACTAACACTTTCCCCAAACACAACACAAACAAAATTTAAATGACGATTTTACCCTAACACAAA?ACAACCCCAATAATAATCTCAGCTACAATCTCTA
+	Anolis_luteogularis  TTAGGCGGTCTACCCCCCCTAAGCGGATTTATACCAAAATGATTAATCCTAGAAGAACTCACAACCCAAAATCTTACACCACTAGCCACTATTATAGCAACATCTGCCCTACTCAGCTTATTTTTTTATCTACGACTAACCTATACTACCACCCTAACAATTTCCCCTAATACCTTACAAACTAAATTTAAATGACGATTCAAACCTAACACCTCAACCCTACCAATAATAATCTTTACCCCATTAACTA
+	Anolis_marcanoi      TTAGGCGGACTACCGCCACTTACAGGATTCATCCCAAAATGATTAGTATTAGAAGAACTAGTTACTCAAAACCTACTCCCACTAGCTACTATTATAGCAATAGCAGCTCTCCTTAGTCTTTTCTTTTATTTACGCCTAACCTATGCCACAGCACTAACACTTTCACCGAATACAATACAAACTAAATTTAAATGACGATTTAAACCTAATCACCCATCCGCAACAACAGCACTAACTTGTACAATCGCCA
+	Anolis_occultus      CTAGGAGGCCTTCCCCCTCTCTCTGGATTCTTACCAAAATGACTAATCCTAGAAGAACTTACAAACCAAAATCTACTACCATTAACCACCACTATAGCAGTCTCCTCCCTGCTAAGCCTGTTTTTTTACCTACGACTTACCTATAATACAACACTAACAATAGCCCCAAACACAATACAAACAAAATTCAAGTGACGATTTAAACCTAATAACCCACCCTTATTATTAACAGCTACTGCCCCACTAACCA
+	Anolis_olssoni       CTAGGAGGACTACCTCCCCTAACCGGATTTTTACCAAAATGAATAATCCTAGAAGAACTTACTACCCAAAACCTAACCCCACTGGCCACCATAATAGCCATTTCAGCTTTACTAAGCCTATTTTTTTACCTACGCCTAACTTATACAACAACCTTAACACTCTCCCCAAACACAATACAAACAAAACTCAAATGGCGATTTAAATTAAATAAACCAACAACACTTATACTAATAACTTCTACAATTACCA
+	Anolis_ophiolepis    CTTGGAGGCTTACCACCACTAACAGGATTTATCCCTAAATGATTAATTCTAGAAGAACTAGTAACCCAAAACCTCATTCCAACAGCAACAATAATAGCCCTATCTGCCTTACTAAGCCTTTTCTTTTACTTACGCCTAACTTATACCACAACACTAACACTATCACCAAACACAACTACTACAAAATTTAAATGACGACTTAAACCAAATCAACCTACACAACCCATACTTATTGCTACCACAACCTCTA
+	Anolis_paternus      CTAGGGGGACTACCACCACTAACTGGATTTATACCAAAATGGCTAGTTATAGAAGAATTAATTTTACAAAATTTTAATCTTCCAGCTATTTTAATAGCTATATCTTCCCTACTAAGCCTATTTTTCTACCTTCGAATTACCTACACAGCCACACTCTCACTATCACCTAATACAACTCAAATAAAATTCAAATGACGATTTTACCCAAAAACTACAACCACCTTAACCTCTTCCACCACAACAATAACAA
+	Anolis_sagrei        TTAGGAGGCCTTCCACCATTAACTGGTTTTATACCAAAATGACTAATTCTAGAAGAACTAGTAACCCAAAATCTCATTCCAATAGCAACAGTAATAGCCCTGTCCGCTCTACTAAGC???TTTTTTTATCTACGCCTAACATATACTACAACACTAACACTTTCCCCAAACACAACCGCTACAAAATTTAAATGGCGACTTAAACTAAACCAACCTACACCACTAATGCTAATTACTGCTACAACCTCTA
+	Anolis_strahmi       TTAGGTGGACTTCCTCCCCTAACAGGATTTATCCCAAAATGACTCGTACTAGAAGAACTAACAACTCAAAATCTAATCCCTTTAGCCACTGTCATAGTAATAGCCGCTCTCCTCAGCCTATTTTTTTACCTACGCTTAGCCTATACTACAA?ACTTACACTTTCCCCAAACACAA?ACAAACTAAATTTAAATGACGATTTAAACCTAACATTAAAACCCCCCTAATAACTGCAACCCTTGTGGTTTCAA
+	Anolis_stratulus     CTTGGTGGCCTGCCCCCCTTAACAGGGTTTTTACCGAAATGATTAATTTTAGAAGAACTAATAACCCAAAACCTTATTCCACTAGCAACACTTATAGCACTTACAGCCCTTCTTAGCTTATTCTTTTATCTTCGCCTAGCTTACACAACAACCTTAACACTTTCTCCAAACACACTACAAATAAAGTTTAAATGACGATTTAAACCAGCCACCAAGGCCTACCTAATATTATTTTCAACCCTAGCTATTT
+	Anolis_valencienni   TTAGGCGGACTACCACCATTAACAGGATTCATGCCTAAATGACTTATTTTAGAAGAACTAATTATTCAAAACCTTATCCCAACAGCCACTACTTTAGCAGTATCCACACTACTAAGCCTATTTTTTTAC?TACGGCTTGCCTACACAACAACACTCACCCTATCCCCAAACACTATTCAGACAAAATTTAAATGACGATTTAAATTAAAATTTACAACATTTTTTATAATGCCACTTTCCACAATTTCAA
+	Anolis_vanidicus     CTGGGGGGTTTACCACCACTTACTGGGTTCCTACCAAAATGATTTATTGTAGAAGAACTCATTACTCAAAACTTAAT?ACAGTTATTACCATTATAGCACTATCATCTCTACTTAGCTTATTCTTCTATATCCGACTAGCCTACACTACCACACTAACACTTTCTCCTAATACAACCCAAACAAAGTTCAAGTGACGATTTTACCCTAACACAAAATCTACCACAATTATAATCCCTGCAATAATTACTA
+	Diplolaemus_darwinii CTAGGAGGACTCCCACCCCTAACAGGCTTTTTACCAAAGTGATTAGTACTAAAAGAGCTAACAATACAAGGACTACTTATTATTTCCACAACCCTAGCCATGTCCTCCCTCCTAAGCCTATTTTTTTACCTACGACTTTCATATACAACAACACTTACACTTGCCCCAAATACACTACTAATAAAACACAAATGACGATTCAAACCAATATCAAAAACACTTTTAATATCTACATCAACACCACTAGCCC
+
+	Anolis_ahli          TATTTGCCCTACCACTTATGCCTCTCATAACACAAT-----AAAAACTTAGGAA---TAACTA----AACCAAAGGCCTTCAAAGCCCTAAATAAGGGTGCAATCCCCTTAGTTTTTG------TAAGACTTGTGGGAG-CTAACCCACATCTCCTGAATGCAACTCAAATGCTTTTATTAAACTAAAGCCTT---CCA?ACAGGTGGGCCTTGATCCCACAAAAA---CTAGTTAACAGCTAGTTACCC
+	Anolis_aliniger      TTTTTCTTCTCCCCCTTACACCATTAATTTTAGCATA----AGAAATTTAGGAT--AATATTA----AACCAAGGACCTTCAAAGTCCAAGACATGGGCGAAACCCCCATAATTTCTG------CAAGACTTGTAAAACATTAATTTACATCTCCTGAATGCAACTCAAGCACTTTTATTAAGCTAAAGCCTCT--CTGAATAAGCGGGCCTCGATCCCGCGACAA--ATTAGTTAACAGCTAATAACCC
+	Anolis_alutaceus     TTTTTATATTACCGATACTTCCAATAATTTTGATAT-----AAAAACTTAGGAT---AAACTA----AACCAAGAGCCTTCAAAGCTCAAAAAAGGGGTGTAACCCCCCTAGTTTTTG------TAAGACTTGTAAAATACTAATTTACATCTCTTGAATGCAACTTAAACACTTTAATTAAGCTAAAACCTTA--CTGAATAGGCGGGCTTTTAACCCACGAAAA--ATTAATTAACAGCTAATTTCCC
+	Anolis_angusticeps   CCCTCCTTCTTCCACTTACACCACTAATTTTGTTAT-----AAAAACTTAGGAT--AAAATTA----AACCAAGGGCCTTCAAAGCCCAAGACATGGGTTAAACTCCCATAGTTTTTG------TAAGACTTGTGAAACATTATTACACATCTCCTGAATGCAACTCAAGCACTTTTATTAAGCCAAAGCCTCA--CTGAATAGGCGGGCCTTGATCCCACGACAA--ATTAATTAACAGCTAAATACCC
+	Anolis_bahorucoensis TTTTTTTACTCCCACTTATGCCTTTAATTTTATACT-----AGAAACTTAGGAT--AACCTCAA---AACCAAGAGCCTTCAAAGCTCAAAATATGGGTGAAACCCCCGTAGTTTCTG-----CCAAAACTTGTGAAACTTTAATTCACATCTGCTGAATGCAACTCAAACACTTTTATTAAGCTAAAGCCTCA--CTGAATAGGCGGGCTTTGATCCCACAACAA--ATTAGTTAACAGCTAAACACCC
+	Anolis_barahonae     TCTTTTTACTTCCACTCGCCCCACTAATATTATTAT-----AAAGACTTAGGAT----AACTA----AACCAAGAGCCTTCAAAGCTCCAAATAGGAATGAGAACCTCCTAGTTTTTG------TAAGACTTGTAAAACATTAATTTACATCTCTTGAATGCAAATCAAGCACTTTAATTAAGCTAAAGCCTTC--CTGAATAGGCGGGCTTTGATCCCGCGACAA--ATTAATTAACAGCTAACTACCC
+	Anolis_brevirostris  TCTTTCTTCTGCCTTTAGTACCTCTAATGTTGATAT-----AAAAACTTAGGAT-----AATAA---AACCGAGAGCCTTCAAAGCTTTAAAAAAGGGTGTAAACCCCTTAGTTTTTG------TAAGACTTGTGAGAGACTAACCCACATCTTCTGAATGCAACCCAAACACTTTAATTAAGCTAAAGCCTTC--ATGAATAGGCGGGCCTTGATCCCACGAAAA--TTTAATTAACAGCTAACTGCCC
+	Anolis_coelestinus   TCCTCTTACTTCCTTTAGTCCCGCTAATTATAGTATA----AGAAATTTAGGAT--AATATTA----AACCAAGAGCCTTCAAAGCTCAAAATACGGGTGAAACCCCCATAATTTCTG------TAAGACTTGTGAAATACTAATCCACATCTCATGAATGCAACTCAAGCACTTTTATTAAGCTAAAGCCTTT--CTGAATAGGCGGGCCTCGAGCCCACGACAA--ATTAGTTAACAGCTAATTACCC
+	Anolis_cristatellus  TTTTACTACCTCTCATACCACTAACCCTTATA---T-----AAAAACTTAGGAT---AACATA----AACCAAGAACCTTCAAAGTTCAGAATAAGGGTGTAAACCCCTTAGTTTTTG------CAAGACTTGTAA?A?ATTAATTTACATCTCATGAATGCAACTCAAGCGCTTTTATTAAGCTAAAGCCTCT--CTGAATAGGCGGGCCTTGATCCCACGATAA--ATTAATTAACAGCTAATTACCC
+	Anolis_cuvieri       TCTTACTTCTTCCACTAACCCCCTTAATAATTTACT-----AAAAACTTAGGTT---AACATA----AACCGAGAGCCTTCAAAGCTCAAAACAGGAGTCAAAAACTCTTAGTTTTTG------TAAGACTTGTAAAATACTAATTTACATCTTCTGAATGCAACTCAAACACTTTAATTAAGCTAAAGCCTAC--CTGAATAGGCGGGCCTTGATCCCACGACAA--ATTAATTAACAGCTAATTACCC
+	Anolis_distichus     TTTTTCTTCTACCACTTACACCCTTAATGTTAATAT-----AAAAACTTAGGAT-----ATTAA---AACCAAGGGCCTTCAAAGCCCTAAAAAAGGGTGCAAACCCCTTAGTTTTTG------TAAGACTTGTGAAACACTAATCCACATCTTCTGAATGCAACCCAAACGCTTTCATTAAGCTAAAGCCTTT--CTGAATAGGCGGGCCTTGATCCCGCGATAA--ATTAATTAACAGCTAATTACCC
+	Anolis_equestris     TTTTTATGTTACCACTAACACCAATAATCATCATAT-----AGAAACTTAGGTT---TAAATA----AACCAAGAGCCTTCAAAGCTCAAAATATGGATGAAAACCCCATAGTTTCTG-----CTAAGACTTGTAAAATACTAATTTACATCTCCTGAATGCAACTCAAATGCTTTTATTAAGCTAAAGCCTTC--CTGAATAGGAGGGCCTTGATCCCACAATAA--ATTAATTAACAGCTAATTACCC
+	Anolis_garmani       TTTTCCTACTCCCTATAACCCCATTAATACTTCTAT-----AAAGACTTAGGAT----AATTA----AACCAAGGGCCTTCAAAGCCCTAAATAAGGGCCATACTCCCTTAGTTTTTG------TAAGACTTATGAGGGACTATCCCATATCTCCTGAATGCAACTCAAGCACTTTTATTAAGCTAAAGCCTTA-TCTAAATAGGCGGGCCTTGATCCCACAAAAA---CTAGTTAACAGCTAATTACCC
+	Anolis_grahami       TCTTTCTACTCCCCATGACCCCCTTAATACTTCTAT-----AAAAACTTAGGAT----AATTA----AACCAACGGCCTTCAAAGCCCTAAATAAGGCCACCATCCCCTTAGTTTT?G------TAAGACT?ATGGGTAACTACCCCATATCTCCTGAATG?AACTCAAACACTTTTATTAAGCTAAAGCCTT-ATCTAAA????????????????????AAAAA---TTAGTTAACAGCTAATTACCC
+	Anolis_insolitus     CCTTATTACTACCCATACTACCAATGCTCACACTAT-----AAAAACTTAAGTT---AAACCA----AACTAAGAGCCTTCAAAGCTCAAAATAAGGGTAGAACCCCCTTAGTTTTTG------TAAGACTTGTGAAACACTAACTCACATCTCCTGAATGCAACTCAGACACTTTTATTAAGCTAAAACCTTC--ATGAATAAGTGGGCCTTGATCCCACAACAA--ATTAATTAACAGCTAACTACCC
+	Anolis_krugi         TTTTACTACCACTTACACCTTTAATCTTATTG---T-----AAAAACTTAGGATAAGATAATA----AACCAAGAACCTTCAAAGTTCAAAATAAGGGTGAAAGTCCCTTAGTTTTTG------TAAGACTTGTGAAACATTAATTCACATCTCATGAATGCAACTCAAGCACTTTTATTAAGCTAAAGCCTCC--CTGAATAGGCGGGCTTTGATCCCACGAAAA--ATTAATTAACAGCTAACTACCC
+	Anolis_lineatopus    ATATTTTTACTTCCCTAACCCCCCTTATATTACTAT-----AAAAACTTAGGAT----AATTA----AACCAAGGGCCTTCAAAGCCCTAAACAAGGGCACTACCCCCTTAGTTTTTG------TAAGACTTATGGACAACTACACCATATCTTCTGAATGCAACTCAAACACTTTAATTAAGCTAAAGCCTCT-TCCAAATAGGGGGGCCTTGATCCCACAATAA--ACTAGTTAACAGCTAATCGCCC
+	Anolis_loysiana      TTTTCCTTCTACCACTAACCCCACTCATTTTATCAT-----AAA?ACTTAGGAT----AAACAA---AACCAAGAGCCTTCAAAGCTCAAAATAGGAGTGCAATCCCCCTAGTTTTTG------TAAGACCTGTGAAATACTATTACACATCTTCTGAATGCAACTCAAACACTTTTATTAAGCTAAAGCCTCC--CTGAATAGGCGGGCCTTGATCCCACGACAA--ATTAATTAACAGCTAATTACCC
+	Anolis_luteogularis  TTCTCATATTACCATTAACACCAATAATACTTATAT-----AGA?ACTTAGGAT---TAAATA----AACCAAGAGCCTTCAAAGCTCAAAATATGGATGAAAACCCCATAGTTTCTG-----CTAAGACTTGTAAAATACTAATTTACATCTCCTGAATGCAACTCAAATGCTTTTATTAAGCTAAAGCCTTC--CTGAATAGGAGGGCCTCGATCCCACAATAA--ATTAATTAACAGCTAATTACCC
+	Anolis_marcanoi      TTTTTTTACTCCCAATAACCCCTCTTATTTTGCTAT-----AAAAACTTAGGAT----AAACA----AACCAAGGGCCTTCAAAGCCCGAAATAAGGGTGCAAGTCCCCTAGTTTTTG------TAAAACTTGTACTATACTATAGCACATCTCTTGAATGCAACTCAAGCACTTTTATTAAGCTAAAGCCTCC--CTGAACAGACGGGCCTCGATCCCGCGACAA--ATTAATTAACAGCTAACTGCCC
+	Anolis_occultus      CTCTACTACTCCCGCTTACACCTCTTATATTAATAT-----AGAAACTTAGATT---TAAACA----AACCAAGAGCCTTCAAAGCTCAAAATATGGGTGTAACCCCCATAGTTTCTG------TAACACTTACAAAACTTTAATTTACATCTTTTGATTGCAACTCAAACACTTTTATTAAGCTAAAGCCTCC--TTGAATAGTCGGGCTTCGATCCCACGACAA--ATTAATTAACAGCTAACTGCCC
+	Anolis_olssoni       CCTTCTTACTCCCCCTATCACCACTCATTTTAATAT-----AAAAACTTAGGTT---TAACCA----AACCAAGAGCCTTCAAAGCTCAAAATAAGGGTCAAACACCCTTAGTTTTTG------TAAGACTTGTGAAATACTAATACACATCTTCTGAATGCAACTCAAACACTTTAATTAAGCTAAAGCCTCT--CTGAATAGGCGGGCCTCGATCCCGCGACAA--ATTAATTAACAGCTAACTACCC
+	Anolis_ophiolepis    TCCTTCTACTTCCACTAGCACCACTCATGCTTATATAAAATAAAAACTTAGGAT---AACCTA----AACCAAGGGCCTTCAAAGCCCTAAATAAGGGATAGACCCCCTTAGTTTTTG------TAAGACTTGTGAAATATTAATTCACATCTCATGAATGCAACTCAAGCACTTTTATTAAGCTAAAGCCTTT--AGGAATGGGCGGGCCTTGATCCCGCAAAAA--ATTAATTAACAGCTAATTACCC
+	Anolis_paternus      TCTTCCTCCTACCACTTACACCCATAATTTTATTAT-----AAAAACTTAGGAT---TAAATA----AACCAAGGGCCTTCAAAGCCCAAAATATGGGTTAAACACCCATAGTTTTTG------TAAGACTTGTGAAA?ACTATTACACATCTCCTGAATGCAACTCAAGCACTTTTATTAAGCTAAAGCCTCA--CTGAATAGGCGGGCTTTGATCCCACGACAA--ATTAATTAACAGCTAATTACCC
+	Anolis_sagrei        TTCTTTTACTTCCACTAACACCACTAATACTTCTAT-----AAAAACTTAGGAT---AACCTA----AACCAAGGGCCTTCAAAGCCCTAAATAAGCTAGACG--CCCTTAGTTTTTG------TAAGACTTGTGAAAAACTAATTCACATCTCATGAATGCAACTCAAGCACTTTTATTAAGCTAAAGCCTT---ATGAATGAGCGGGCCTCGATCCCACAAAAA--ATTAATTAACAGCTAATTACCC
+	Anolis_strahmi       TATTTTTACTTCCAATATCCCCAATACTTCTACTTT-----AAAGACTTAGGAT----AATTAA---AACCAAGAGCCTTCAAAGCTCAAAATAAGGGTGCAACCCCCTTAGTTTTTG------TAAGACTTGCACCATACTATAATGCATCTCCTGAATGCAACTCAAGCGATTTAATTAAACTAAAGCTTTA--CTGAACAGGCGGGCCTCGATCCCACGATAA--ATTAATTAACAGCTAATTACCC
+	Anolis_stratulus     TTCTTTTACCACTTACACCACTAATTTTACTA---T-----AAAAACTTAGGAT--AATCTTA----AACCAAGAGCCTTCAAAGTTCAAAATAAGGGTGCGATTCCCTTAGTTTTTG------TAAGACTTGTAAAATACTAATTTACATCTCATGAATGCAACTCAAGCGCTTTTATTAAACTAAAGCCTCC--CTGAACAGGCGGGCCTTGATCCCACGACAA--ATTAATTAACAGCTAACTGCCC
+	Anolis_valencienni   TTCTTCTCCTTCCTCTTACCCCGCTAATACTATTAT-----AAAAACTTAGGAT-???????A----AACCAAGGGCCTTCAAAGCCCTAAATAAGGG?CCCACCCCCTTAGTTTTTG------TAAGACTTATGGGTGTCTACTCCATATCTCCTGAATGCAAATCAAACACTTTTATTAAGCTAAAGCCTTGA-CCAAATAGGTGGGCCTTGATCCC??AAAAA---TTAGTTAACAGCTAATTACCC
+	Anolis_vanidicus     TCTTCATACTACCCTTAACACCAACAATCTTAATAT-----AAAGACTTAGGAT----AAACA----AACCAAGAGCCTTCAAAGCTCCAAACAAGGGTGCAACCCCCTTAGTTTTTG------TAAGACCTGT-AAATACTAATTTACATCTCCTGAATGCAACTCAAGCGCTTTAATTAAGCCAAGACCTAA--CTGAATAGACGGGCTTCGATCCCGCGATAA--GTTAATTAACAGCTAACCACCC
+	Diplolaemus_darwinii TAATATTACTACCAATAACCCCACTAATATTA---TA----AGAGACTTAGGCT----AACTAACCAAACCAAGGGCCTTCAAAGCCCAA?ATAGAGATGAAAACCCTCTAGTTTCTGA-----TAAGACCTGTGTAATACTAAAACACATCTCCTGAATGCAACCCAGACACTTTAATTAAGCTAAGGCCTCC--CTAGATAGGGGGGCTTTGATCCCACGAAAC--TTTAGTTAACAGCTAAACACCC
+
+	Anolis_ahli          AAGCCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCCTTTT--GGGCTCATCTTCAAACTTGCATTTTGATGTGG----GTCACTTCGGGACTTT-----GATAAAGAAAGGAATTAAACCAATGTAAGTAGGACTACAGCCTATCGCCT-AACACTCGGCCAATTTACCTGTGTCAACTAATCGTTGA
+	Anolis_aliniger      AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCCTTTA--GGGCTCTTCTTCAAACTTGCATTTTGACGTGG----AACACCCCGGGACTTT-----GATAAAGAGGGGAATTAAACCCCTATTAATGGGTCTACAGCCCACCGCCT-AACATTCGGCCACCCTACCTGTGTCTATTAATCGTTGA
+	Anolis_alutaceus     AAACCAACGGGCTTCTATTCG-CTTCCCCCGTACGGGAG-AAGCCCCGGAGCC-TTTAA-GGGCTCTTCTTCAAACTTGCAATTTGACGTAAATCACTTACTTCGGGGCTT------GATAAAGAAAGGAATTAAACCAATGTGAATAGGACTACAGCCTACCGCCT-ACCATTCGGCCACTTTACCTGTGTTTATTAATCGTTGA
+	Anolis_angusticeps   AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCC?CCGAGCC-TTTA--GGGCTCCTCTTCAGACTTGCATTTTGACGTGAA---AACACTTCGGGACTTTT----GATAAAGAAAGGAATTAAACCTGTGTAAGTAGGTCTACAGCCTACTGCCT-AACACTCGGCCACTTTACCTGTGTTTATTAACCGTTGA
+	Anolis_bahorucoensis AATCCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCTTTTTA-GGGCTCCTCTTCAAACTTGCATTTTGACGTGA----AACACCCCGGGACTGCAT---GATAAGGAAGGGAATTGAGCCCCTATAAATAGGACTACAGCCTACCACCT-AGCATTCGGTCACCTTACCTGTGTCCATTAATCGTTGA
+	Anolis_barahonae     AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCCTTTT--GGGCTCTTTTTCAAATTTGCATTTTGATGTGGA----ACACTTCGAGACTTT-----GATAAATAAAGGAATTAAACCAATGTAAGTAGGACTACAGCCTACTGCCT-AACATTCGGCCACTTTACCTGTGTC?????????????
+	Anolis_brevirostris  TAGCCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCTATT--GGGGCTCTTCTTCAAACTTGCATTTTGACGTAA----AACACCTCGAGGCTAT-----GATAAAGAAAGGACTTGAACCAATATGGGTAGGTTTACAGCCTACCACCT-AAACCTCGGTCACTTTACCTGTGTCTATTAATCGTTGA
+	Anolis_coelestinus   AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCCTTTA--GGGCTCTTCTTCAAACTTGCATTTTGATGTGG----AACACCCCAGGACTT------GATGAGGAAGGGAATTAAACCCCTGTTAATGAGTCTACAGCTCACCACCT-AACACTCGGCCACCTTACCTGTGTCTA???????????
+	Anolis_cristatellus  AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCAATA?--GGGCT?GCTTTCAAA?TTGCATTTTGACGTGA----AATACTACAGGACTCGT----AGTAAAGAAAGGGTTTAAA?CAATATAAA?AGATTTACA?GCTACCGCCT-AA?AGTCAGCCACTTTACCTGTGTCCATTAAGCGTTAA
+	Anolis_cuvieri       AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGGCCCGGAGCCCTTTT--GGGCTCTTCTTCAAATTTGCATTTTGACGTGAA----ACACTTCAGGACTTT-----GATAAAGAAGGGAATTAAACCAATGTAAGTAGGACTACAGCCTACCGCCT-AACATTCGGCCACTTTACCTGTGTTTATTAATCGTTGA
+	Anolis_distichus     TAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCCTTTT--GGGCTCTTCTTCAAACTTGCATTTTGACGTAA----AACACCTCGAGGCTTT-----GATAAAGAAAGGGCTTCAACCAATATAAATAAGTTTACAACTTACCGCCT-AAATTTCGGCCACTTTACCTGTGTTCATTAATCGTTGA
+	Anolis_equestris     AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCCTATT-GGGGCTCTTTTTCAAACTTGCATTTTGACGTGA----AACACTTCAGGGCTTT-----GATAAGAAAAGGAATTAAACCTAT??????AGGACTACAGCCTACCGCCT-AACACTCAGCCATCTTACCTGTGTCTATTAACCGTTA?
+	Anolis_garmani       AATCCAGCGGGCTTCTCTTTAGCTTCTCCCGTACGGGAG-AAGCCCC?GGGCCCTTTA--GGGCTCTTTTTCAAACTTGCATTTTGATGTGA----ATCACTTCAGAGCTGT-----GATAAAGAAAGGAATTAAACCAATGTAAA??GGTCTACAGCCTACCGCCT-AACATTCGGCCACTTTACCTGTGTCTATTAATCGTT??
+	Anolis_grahami       AATCCACGGG?CTTCTATTTAGCTTCTCCCGTACGGGA--AAG?CCCGGAGCCCTTTA--GGGCTCTTTTTCAAACTTGCATTTTGATGTGG----ATCACTTCAGGGCTGT-----GATAAAGAAAGGAATTAAACCAATGTAAATAGGACTACAGCCTACCGCCT--ACATTCGGCCACTTTACCTGTGTTCATTAATCGTT??
+	Anolis_insolitus     TAACCAGCGGGCTTTTATTCG-CTTCTCCCGTACGGGAG-AA??C?CGGAGCCTTTTT--GGGCTCCTTTTCAAACTTGCATTTTGACGTGA----AGCACTTCGGGACTTT-----GATAAAGAAAGGAATTAAACCAATGTAAATAGGACTACAGCCTACCGCCT-AGCACTCGGCCACTTTACCTGTGTTTATT?????????
+	Anolis_krugi         ATTCCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCCCTTA--GGGCTCTTTTTCAAACTTGCATTTTGACGTGA--AAGCCACTTCAAGGCTGT-----GACAAAGAAAGGATTCAAACCAATATAAGTAAGTTTACAGCCTACCGCCT-AATATTCGGCCACTTTACCTGTGTCTATTAATC?????
+	Anolis_lineatopus    AAGCCAGCGGGCTTCTATTTG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCTTTAA--GGGCTCCTTTTCAAACTTGCATTTTGATGTGA----ATCACTTCGGGGCTGT-----GATAAAGAAAGGAATTAAACCAATGTAAATAGGACTACAGCCTACCGCCT-ACCATTCGGCCACTTTACCTGTGTTTATTAATCGTTGA
+	Anolis_loysiana      TAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCTTTTA--TGGCCCTTCTTCAAACTTGCATTTTGACGTGAA---AACACTACGAGACTCT-----GATAAAGAAAGGAATCAAACCAGTGTAAGTAGGTCTACAGCCTACCGCCT-AACATTCGGCCACTTTACCTGTGTTTATTTACCGTTGA
+	Anolis_luteogularis  AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCC-TATT-GGGGCTCTTTTTCAAACTTGCATTTTGACGAGA----AACACTTCAGGGCTTT-----GATAAGAAAAGGAATTAAACCTATGTAAATAGGACTACAGCCTACCGCCT-AACACTCGGCCATCTTACCTGTGTCTATCAATCGTTGA
+	Anolis_marcanoi      AAACCAGCGGGCTTCAATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCTTTTA--GGGCTCATCTTTAAATTTGCATTTTAACGTAT----AACACCTCGGGACTTT-----GATAAAGAAGGGG-TTTAGCCCTCATGGGTGGAGCTACAAGCCACCGCCT-ATTATTCGGCCACTTTACCTGTGTTTTTTACTCGTTGA
+	Anolis_occultus      AAACCAGCGGGCTTCTACTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCC-TTTT-GGGGCTCCTTTTCAAACTTGCATTTTGACGTGAA---AACACTTCGAGACTTT-----AATAAG?AAAGGAATCAAACCCC?G?AAATAGGACTACAGCCTACCGCCT-AACACTCGGCCACCTTACCTGTGTCTATTAATCGTTA?
+	Anolis_olssoni       AAACCAGCGGGCTTCTACTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCGTTT--GGGGCTCTTCTTCAAACTTGCATTTTGATGTGA----AACACTTCGGGACTTT-----GATAAAGAAAGGAATTAAACCAATGTTAATAGGACTACAGCCTACTGCCT-ATCATTCGGCCACTTTACCTGTGTTCATTAAT??????
+	Anolis_ophiolepis    AAACCAGCGGGCTTCCATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCTTTTA--GGGCTCCTCTTCAAACTTGCATTTTGATGTGG----GTCACTTCGGGGCTTT-----GATAAAGAAAGGAATTGAACCAATGTTAGTAGGACTACAGCCTACCGCCT-ATTACTCAGCCACTTTACCTGTGTCTATTAATCGTTGA
+	Anolis_paternus      AAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCC-TTTA--GGGCTCTTCTTCAAACTTGCATTTTGATGTGGA----ACACTTCGGGACTTT-----GATAAATAAAGGAATTA?ACCAATGTAAATAGGACTACAGCCTACTGCCT-AACACTCGGCTACTTTACCCGTGTTTATTAACCGTTAT
+	Anolis_sagrei        AAACCAGCGGGCTTCCATTCG-CTTCTCCCGTACGGGAG-AA????CGGAGCCTTTTA--GGGCTCCTTTTCAAACTTGCATTTTGACGTGG----GTCACTTCGGGGCTTT-----GATAAAGAAAGGAATTGAACCAATGTTAGTAGGACTACAGCCTACCGCCT-ATCACTCGGCCACTTTACCTGTGTCTATTAATCGTTGA
+	Anolis_strahmi       AAACCAGCGGGCTTCAATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCCTTTTA--GGGCTCATCTTTAAACTTGCATTTTAATGTAGT---AACACTTCGGGGCTTT-----GGTACAGAAAGGAATT-AACCAATGTGAGTAGGACTACAGCCTACCGCCT-GACATTCGGCCACTATACCTGTGTACCTTAATCGTTGA
+	Anolis_stratulus     TAACCAGCGGGCTTCTATTCG-CTTCTCCCGTACGGGAG-AAGCCCCGGAGCC-TTTA--AGGCTCTTCTTCAAACTTGCATTTTGACGTGA---AAACACTACAGGGCTTTT----AGTAAAGAAAGGGATTAAACCAATGTAAGTAAGTTTACAGCTTACCGCCT-AACACTCAGCCACTTTACCTGTGTTTATTAATCGTTGA
+	Anolis_valencienni   AAACCAGAGGGCTTCCATTTG-CTTCTCCCGTACGGGAG-AACCCC?GGAGCCTTTCA--GGGCTCATTTTCAAACTTGCATTTTGATGTGA----ATCACTTCGGGGCT-------GATAAAGAAAGGAATTAAACCAATGTAAATAGGACTACAGCCTACCGCCT-ACCATTCGGCCACTTT??????????????????????
+	Anolis_vanidicus     AAACCAGCGGGCTTCAATTCTGCTTCTCCCGTACGGGAG-AAGCCCCGGAGCC-TTTA-GGGGCTCTTCTTCAAACTTGCAATTTGACGTAA----GTCACTTCGGAGCTGT---GTGATAAAGAAAGGAATTAAACCAATATTAGTAGGACTACGGCCTACCGCCT-ATCATTCGGCCACTTTACCAGTGTTTATTAATCGTTGA
+	Diplolaemus_darwinii AAACCAGCGGGCTTCTATCCG-CTTCTCCCGCACGGGAG-AA??CCCGGAGCCCTTTAT-GGGCTC---TTCAAATTTGCATTTTGACGTGCT---TACACCACAGGACTTT-----GATAAAAAGAGGAGTTAAACCCCTGTAAATAGGACTACAGCCTACCTCCTAAACGCTCGGCCATTTTACCTGTGTTTATTAA???????
+	;
+end;
+
+begin mrbayes;
+	[The following line sets up a GTR model with gamma-distributed rate variation
+	 and a proportion of invariant sites. Note that proportion of invariants, gamma
+	 shape (alpha), revmat rates and state frequencies will all be estimated automatically
+	 using the default priors unless you specify otherwise using prset. The starting values
+	 are set arbitrarily for substitution model parameters and it normally makes little
+	 sense to override this behavior by forcing specific values onto any parameter.]
+	lset nst=6 rates=invgamma;
+end;
\ No newline at end of file
diff --git a/test/NTSValidIn/associates.nex b/test/NTSValidIn/associates.nex
new file mode 100644
index 0000000..65a4cf2
--- /dev/null
+++ b/test/NTSValidIn/associates.nex
@@ -0,0 +1,30 @@
+#NEXUS
+BEGIN TAXA;
+	TITLE Taxa;
+	DIMENSIONS NTAX=3;
+	TAXLABELS
+		taxon_1 'taxon '' & 2' taxon_3 
+	;
+END;
+
+
+
+BEGIN TAXA;
+	TITLE Taxa2;
+	DIMENSIONS NTAX=3;
+	TAXLABELS
+		t1 t2 t3 
+	;
+END;
+
+
+BEGIN TaxaAssociation;
+    TITLE rename;
+    TAXA Taxa ,  Taxa2;
+    ASSOCIATES 
+        taxon_1 /  t1 , 
+        'taxon '' & 2' /  t1 , 
+        taxon_3 /  t3
+    ;
+END;
+
diff --git a/test/NTSValidIn/avian_ovomucoids.nex b/test/NTSValidIn/avian_ovomucoids.nex
new file mode 100644
index 0000000..a57b2a9
--- /dev/null
+++ b/test/NTSValidIn/avian_ovomucoids.nex
@@ -0,0 +1,114 @@
+#NEXUS
+
+[This is an amino-acid data set]
+
+[Data from:
+     Laskowski, M., Jr., and W.M. Fitch.  1989.  Evolution of avian ovomucoids and of birds.
+        Pp. 371-387 in B. Fernholm, K. Bremer, and H. Jornvall (eds.),  The Hierarchy of Life.
+        Elsevier Press, Amsterdam.]
+
+begin data;
+	dimensions ntax=89 nchar=88;
+	format datatype=protein missing=? gap=- matchchar=.;
+
+	matrix
+	[                                        10        20        30        40        50        60        70        80       ]
+	[                                        .         .         .         .         .         .         .         .        ]
+	Struthio_camelus                VKYPNTNEEGKEVVLPKILSPIGSDGVYSNELANIEYTNVSK??????FAT--VDDYKPVPLDYMLDSKTSNKNNVVESSGTLRHFGK
+	Rhea_americana                  .............L..E..N.V.T................?.D?????...--...H...S.E..........D.....N...S....
+	Pterocnemia_pennata             .............L..E..N.V.A..................DHD?EV...--...H...S.E..........D.....N...S....
+	Casuarius_casuarius             ........D....L.....N.........DD......A....DHDKEV...--..E....SPE.......N..DS....N...G....
+	Dromaius_novaehollandiae        ........D....L.....N..........D......A..??D?????...--.......S.E.......N..D.....N...G....
+	Nothoprocta_cinerascens         .....A.D.....P...TP...A.NA.FGS....V....I..DHDK?????T-..G...AT.E.F..NQ.A..A....KNV....L..
+	Eudromia_elegans                .R.....D.....P...TP..V.AN....S....V....I?.?????????S-I.G...AT.EFF..NQ....A.A..KNV..N.I.E
+	Pygoscelis_adeliae_f            .TF..........LVT.......T..................DHDKEVI..--.......S.E..............D.N...S....
+	Pygoscelis_adeliae_y            .T...........LVT.......T..................DHDKEVI..--.......S.E..............D.N...S....
+	Spheniscus_humboldti            .T.S.........LIT.......T..................D?DKEVI..--I......S.E..............D.N.I.S....
+	Phalacrocorax_sulcirostris      .S.SK.......ALVT.......T..............KI..DHDKEVI..--.......S.E.............AD.N...S....
+	Anhinga_novaehollandeae         .L.S.........LVT.......T................T.DHDKEVI.S--.......S.E..............D.N...S....
+	Nycticorax_nycticorax           .T.S.A....R..LVT.......A..........M....I..DHDGEVIV.--.......SPEN.V.......D..AD.N...S....
+	Chauna_chavaria                 .R...........L.T.T.....T..................DRDKEAV..--......AT.E....NQ....S...D.N...S....
+	Anseranas_semipalmata           .R...S.......L.T.D...................A....DHDKEAV..--..E...AT.E....NQ........D.N...S....
+	Dendrocygna_arcuata             .RF..........L.T.E...V.................I..D?DKEAV..--......AT.E....N..G......D.N...S....
+	Dendrocygna_autumnalis          .RF..........L.T.D.....................I..DHDKEAV..--......AT.E....N..G......D.N...S....
+	Dendrocygna_eytoni_d            .RF..........L.T.DVI.V............L....I..DHDKEAV..--....R.DT.E....N..G......D.N...S....
+	Dendrocygna_eytoni_e            .RF..........L.T.DVI.V............L....I..DHDKEAV..--..E.R.DT.E....N..G......D.N...S....
+	Dendrocygna_viduata             .RFS.........L.T.E...V.................I..D?D?EAV..--......AT.E....N..G.R....D.N...S....
+	Coscoroba_coscoroba             ..F..........L.T.D.I...T...............I..DHDKEAV..--..G...ATME....N..G......D.N...S....
+	Cygnus_atratus                  .RF..........L.T.D.....T...............I..DHDKEAV..--......ATME....N..G......D.N...S....
+	Goose                           .RF..........L.T.D.....T...............I..DHDKEAV..--......ATVE....N..D......D.N...S....
+	Anser_indicus                   .RF..........L.T.D.A...T...............I..DHDKEAV..--......ATVE....N..D......D.N...S....
+	Branta_canadensis               .RF.......R..L.T.D.....T...............I..DHD???V..--......ATVE....N..G......D.N...S....
+	Cereopsis_novaehollandiae       ..F..........L...DVI.T.T...............I..D?D??AV..--......ARME....N..G......D.N...S....
+	Chloephaga_picta                .RF..........L.T.E.....T...............I..D??KEAV..--..G...ATME....N..G......D.N...S...E
+	Duck                            .RF..........L.T.E...V.T...............I..DHDKEAV..--..G...ATME....N..G......D.N...S...E
+	Anas_platyrhynchos              .RF........D.L.T.E...V.T...............I..DHDKEAV..--..G...ATME....N..G......D.N...S...E
+	Megapodius_freycinet            .R...........LVTQDV?...T....?....G...??I????????LV.--......ST.EDK..NQ....S...D.N...S....
+	Leipoa_ocellata                 IRH..........LVTEDS....T...............I..E?DK??VV.--..G.THAT.ELK..NQ....G..AQ.N...S....
+	Ortalis_vetula                  ...........D.LA.EDPNL.......T-.......???????????..PN-...H..ALQEQKI.N..D..S...D.N...S....
+	Penelope_jacquacu               ...........D.LA.EDP.........T-.........I..ERDKEA..PN-...H..ALQEQK..N..D..S...D.N...S....
+	Penelope_superciliaris          ...........D.LVAEDP....................I..E?DKEA..PN-...H..ALQEQK..N..D..S...D.N...S....
+	Bonasa_umbellus                 .RF........V.LV.EDPR...T.A.....M.......I..EHD???L.AS-..E...ATME.R..N..G........N.N.S...T
+	Tympanuchus_cupido              .RF........D.LVTED.H...T...............I..EHD???L.AS-..E...ATME.R..N..G........N...S....
+	Oreortyx_pictus                 .RF........D.LAT.E.H...T........S......I..EHDTEA..AS-..E...AT.E.R.....A........N...S....
+	Callipepla_squamata_n           .RF........D.LAT.E.H...T........Y......I..EHD??A..AS-..E...DT.E.R..N..A........N...S....
+	Callipepla_squamata_s           .RF........D.LAT.E.H...T........Y......I..EHD??A..AS-..E...DT.E.R..N..AS.......N...S....
+	Lophortyx_californicus          .RF........D.LVT.E.Q...T........Y......I..EHD?EA..AS-..E...AT.E.R..N..A........N...S....
+	Colinus_virginianus             .RF........D.LATEE.H...T....MS.MF......T..EHDTEA..AS-..E...AMSE.R..N..V........N...S....
+	Cyrtonyx_montezumae_l           .RF........D.LVTEEV....T........S..A.?.I.?E?D???..AS-..E...AT.E.VI.N..G........N...S....
+	Cyrtonyx_montezumae_s           .RF........D.LVTEEV....T........S..A.?.I.?E?D???..AS-..E...ATSE.VI.N..G........N...S....
+	Alectoris_chukar                ARF..A.....D..VTED.R...T....T-.........I..EHDGETL.A--..E...AT.E.R.....G........N...S....
+	Alectoris_rufa                  ARF..A.....D..VTED.H...T....T-.........I..EHD???L.A--..E...AT.E.R.....G........N...S....
+	Francolinus_afer                .RF..A....RD..VSEN.R...TH........SM....I..EHDREAP.AS-..E...ATME.RV.NI.G......K.N...S....
+	Francolinus_erckelii            .RF..A.....D.AVSEN.R...T...N-.....M....I??EHD?EAP.AS-..E...ATME.RV.NI.G......K.N...S.K..
+	Francolinus_coqui_v             .RF..A....RD..VSEN.R...T.........SMN...I..E?D?EA???S-..E...GTME.RV.NI.G......K.N...S....
+	Francolinus_coqui_a             .RF..A....RD.AVSEN.R...T.........SMN...I..E?D?EA???S-..E...GTME.RV.NI.G......K.N...S....
+	Francolinus_francolinus_a       ARF........V.LDS.D.I...T..LHDS..S...H.KIK.EHDRE????S-..G...ETAEET..N..R........N........
+	Francolinus_francolinus_v       .RF........V.LDS.D.I...T..LHDS..S...H.KIK.EHDRE????S-..G...ETAEET..N..R........N........
+	Francolinus_pondicerianus       ARFS.A.....D.LVIDDPR.M.T....DS..F.M....I..EHD???LPAS-..E...DTTEER..N..G........N...S....
+	Perdix_perdix                   .RF........D.LVTED.Q...T...............I..EHT???L.AS-..E...ATME.R..N..G..D.....N...N....
+	Coturnix_delegorguei            .RF........DE.V.DE.RF..T....NH.MF.K....I..EQDGET???S-..E...A.K..RV.N..G........N...NR...
+	Coturnix_coturnix_japonica_1    .RF........DE.V.DE.RL..T....NH.MF.K....I..EQDGETL.AS-..E...A.K..RV.N...........N...N....
+	Coturnix_coturnix_japonica_2    .RF........DE.V.DE.RL..T....NH.MF.K....I..EQDGETL.AS-..E...A.K..RV.N..G........N...N....
+	Arborophilia_torqueola          .RF..S.....V..VKEDPR...T.........H..T??I?.?????????S-....M.ATME.RV.N..G........N...S....
+	Bambusicola_thoracica           ARF..A.....V.LDTQE.R...T.......MS......I.IK?DKE?L.AS-..E...ETAEERI.N..G........N....N...
+	Tragopan_satyra                 .RF........D.LVTED.H...T...............I..GHDREAL.AS-..E...ATME.R..N..G........N...S....
+	Tragopan_temmincki              .RF........D.LVTED.R...T...............I..GHD???L.AS-..E...ATME.R..N..G........N...S....
+	Lophophorus_impejanus           .RF..A.....D.LVTED.R...T...............I..EHDREAL.AS-..E...ATME.R..N..G........N...S....
+	Crossoptilon_auritum            .RF........D.LVAED.R...T...............I..ERDGEAL.AS-..E...ATME.R..N..G........N...S....
+	Lophura_edwardsi                .RF........D.LVAED.R...T.......M.......I..ERDGEAL.AS-..E...ATME.R..N..G........N...S....
+	Lophura_ignita                  .RF........D.LVGEDIR...T.......M.......N..ERDGEAL.AS-..E...ATME.R..N.SD........N...S....
+	Gallus_gallus                   ARF..ADK...D.LVN.D.R...T....T.D..S..F..I..EHDKETL.AS-..E...DTAEDR..N..G........N...S....
+	Grey_jungle_fowl                ARF..ADK...D.LVN.D.R...T....T.D..S..F..I..EHDKETL.AS-..E...DTVEDR..N..G........N...S....
+	Phasianus_colchicus             .RF..........LVAED.R.V.T.....S.........I..EHEGEAL.AS-..E...ATME.R..N..G........N...NR..Q
+	Syrmaticus_ellioti              .RF..K.....D.LVAED.H...T...............I..ER?G??L.AS-..E...ATME.R..N..G........N...S....
+	Syrmaticus_reevesii             .RF..K.......LVAED.H...T.....S.........I..ERNGEAL.AS-..E...ATME.R..N..G........N...SR..E
+	Chrysolophus_amherstiae         .RFL.....S.D-LVAED.H...T...............I..EHDG?AL.AS-..E...ATME.R..N..G........N...N....
+	Polyplectron_bicalcaratum       .RF....K...D.LA.EEVR...T.....D.S..RD...I..EHDR?????S-..E.Q.TTTEHRVNNE.G......K.N..VS....
+	Argusianus_argus_argus          .RF........D.LVSEDRH...T.....H..T......I..EHD?EAL.A--..EH..AT.EDR..N.I...D..L..N...S....
+	Pavo_cristatus                  .RF..A.....D.LVSED.H...T.....H.........I..EHDREAL.AS-..E...AT.EHR..N..G........N...S....
+	Afropavo_congensis              .RF........D.SAS.D.R...T.....H.........I..EHDGEAL.AS-..E...ATMEQR..N..G........N...S....
+	Numida_meleagris                .RF..A.....D.LVTED.R...T......D........I.?????EAL.A--..E...ATME.R..N..D........N...S....
+	Acryllium_vulturinum            .RF..A.....D.LVIED.R...T......D........I..EHD???L.A--..E...ATME.R..N..D........N...S....
+	Meleagris_gallopavo             .RF........D.LVTED.R...T...H.-.........I..EHDREAL.AS-..E...AT.E.R..N..G........N...S....
+	Grus_carunculatus               .T...........LVT.......T..................DHDKEAT..--......AT.E..F...........D.N...S....
+	Anthropoides_virgo              .T...........LVT.......T..................DHDKEVT..--......AT.E..F...........D.N...S....
+	Grus_vipio                      IT...........LVT.......T..................DHDKEAT..--......AT.E..F...........D.N...S....
+	Fulica_atra                     .T...........LVT.....V.TN......S..........DYDKEVT..--..G.Q.AS.E.VF.N.....D..AD.N...S....
+	Vanellus_spinosus               .T...........LVT.......T..........L.......DYDKEVI..--......AS................D.N...S..E.
+	Larus_rudibundus                .T...........LAT.A...V....................DYDKEDI..--......AS................D.N...S..E.
+	Turnix_sylvatica                .RF........DT.AD.D.P.........-.M.......I..EHD??T???S-..E...GMMERL..N..ND.......N...N...E
+	Gallirallus_australis           .T.........V.LVT.NI..V.TN...T..S.I...S....DYD???T..??..G.QSA.Q..VF.N........AD.N...S....
+	Geococcyx_californianus         .A...A......ALVTTARLH..T....G.....L.H..I..DYNKEVI.S--.N.....S.L....N..G.....AD.N...S....
+	Dacelo_novaeguineae             .......D.....LVTE......T.R................EHDKEAI..-Q..EH..AT...RI.......D..MD.N...S....
+	Carpococcyx_renauldi            .R...S......GLATT.R....T....G.....L....I..DYD???I..--.......T.ED...NI.H..Y..AH.N..FS....
+	Podargus_strigoides             .T.......S...LVDEV.....T..........L.-..I..DRDK??I..--....Q..MG...............D.N...N....
+	;
+end;
+
+begin mrbayes;
+	[The following line will let the mcmc chain integrate
+	 over the ten fixed amino-acid rate matrices. You can also fix
+	 the rates to those in one of the rate matrices.]
+	prset aamodelpr=mixed;
+end;
diff --git a/test/NTSValidIn/basic-bush-dos.nex b/test/NTSValidIn/basic-bush-dos.nex
new file mode 100644
index 0000000..77b5bf2
--- /dev/null
+++ b/test/NTSValidIn/basic-bush-dos.nex
@@ -0,0 +1,25 @@
+#NEXUS
+
+BEGIN TAXA;
+      dimensions ntax=8;
+      taxlabels A B C D E F G H;  
+END;
+
+BEGIN CHARACTERS;
+      dimensions nchar=6;
+      format datatype=protein missing=? gap=-;
+      charlabels one two three four five six;
+      matrix
+A     WITH-B
+B     WITH-A
+C     WITH-D
+D     WITH-C
+E     WITH-F
+F     WITH-E
+G     WITH-H
+H     WITH-G;
+END;
+
+BEGIN TREES;
+       tree basic_bush = (((A:1,B:1):1,(C:1,D:1):1):1,((E:1,F:1):1,(G:1,H:1):1):1);
+END;
diff --git a/test/NTSValidIn/basic-bush-mac.nex b/test/NTSValidIn/basic-bush-mac.nex
new file mode 100644
index 0000000..eedd2dd
--- /dev/null
+++ b/test/NTSValidIn/basic-bush-mac.nex
@@ -0,0 +1 @@
+#NEXUS

BEGIN TAXA;
      dimensions ntax=8;
      taxlabels A B C D E F G H;  
END;

BEGIN CHARACTERS;
      dimensions nchar=6;
      format datatype=protein missing=? gap=-;
      charlabels one two three four five six;
      matrix
A     WITH-B
B     WITH-A
C     WITH-D
D     WITH-C
E     WITH-F
F     WITH-E
G     WITH-H
H     WITH-G;
END;

BEGIN TREES;
       tree basic_bush = (((A:1,B:1):1,(C:1,D:1):1):1,((E:1,F:1):1,(G:1,H:1):1):1);
       tree basic_bushu = [&U](((A:1,B:1):1,(C:1,D:1):1):1,((E:1,F:1):1,(G:1,H:1):1):1);
END;
\ No newline at end of file
diff --git a/test/NTSValidIn/basic-bush-mixed-line-endings.nex b/test/NTSValidIn/basic-bush-mixed-line-endings.nex
new file mode 100644
index 0000000..7fcf6aa
--- /dev/null
+++ b/test/NTSValidIn/basic-bush-mixed-line-endings.nex
@@ -0,0 +1,18 @@
+#NEXUS
+
+BEGIN TAXA;
+      dimensions ntax=8;
+      taxlabels A B C D E F G H;  
+END;
+
+

BEGIN CHARACTERS;
      dimensions nchar=6;
      format datatype=protein missing=? gap=-;
      charlabels one two three four five six;
      matrix
A     WITH-B
B     WITH-A
C     WITH-D
D  
+     WITH-C
+E     WITH-F
+F     WITH-E
+G     WITH-H
+H     WITH-G;
+END;
+
+BEGIN TREES;
+       tree basic_bush = (((A:1,B:1):1,(C:1,D:1):1):1,((E:1,F:1):1,(G:1,H:1):1):1);
+END;
diff --git a/test/NTSValidIn/basic-bush-unix.nex b/test/NTSValidIn/basic-bush-unix.nex
new file mode 100644
index 0000000..2b6b747
--- /dev/null
+++ b/test/NTSValidIn/basic-bush-unix.nex
@@ -0,0 +1,25 @@
+#NEXUS
+
+BEGIN TAXA;
+      dimensions ntax=8;
+      taxlabels A B C D E F G H;  
+END;
+
+BEGIN CHARACTERS;
+      dimensions nchar=6;
+      format datatype=protein missing=? gap=-;
+      charlabels one two three four five six;
+      matrix
+A     WITH-B
+B     WITH-A
+C     WITH-D
+D     WITH-C
+E     WITH-F
+F     WITH-E
+G     WITH-H
+H     WITH-G;
+END;
+
+BEGIN TREES;
+       tree basic_bush = (((A:1,B:1):1,(C:1,D:1):1):1,((E:1,F:1):1,(G:1,H:1):1):1);
+END;
\ No newline at end of file
diff --git a/test/NTSValidIn/basic-rake.nex b/test/NTSValidIn/basic-rake.nex
new file mode 100644
index 0000000..e41513e
--- /dev/null
+++ b/test/NTSValidIn/basic-rake.nex
@@ -0,0 +1,160 @@
+#NEXUS
+[written Thu Dec 20 00:38:47 CST 2007 by Mesquite  version 2.01 (build j28) at eunice.local/192.168.2.1]
+
+BEGIN TAXA;
+	TITLE Untitled_TAXA_Block_1;
+	DIMENSIONS NTAX=8;
+	TAXLABELS
+		A B C D E F G H 
+	;
+
+END;
+
+
+BEGIN CHARACTERS;
+	TITLE  Untitled_CHARACTERS_Block_1;
+	DIMENSIONS  NCHAR=9;
+	FORMAT DATATYPE = Protein GAP = - MISSING = ?;
+CHARSTATELABELS 
+		1 one, 2 two, 3 three, 4 four, 5 five, 6 six, 7 seven, 8 eight, 9 nine ; 
+	MATRIX
+	A  THIS-IS-A
+
+	B  THIS-IS-{D,N}
+
+	C  THIS-IS-C
+
+	D  THIS-IS-D
+
+	E  THIS-IS-E
+
+	F  THIS-IS-F
+
+	G  THIS-IS-G
+
+	H  THIS-IS-H
+
+
+;
+
+
+END;
+
+BEGIN TREES;
+	Title Untitled_TREES_Block_1;
+	LINK Taxa = Untitled_TAXA_Block_1;
+	TRANSLATE
+		1 A,
+		2 B,
+		3 C,
+		4 D,
+		5 E,
+		6 F,
+		7 G,
+		8 H;
+	TREE basic_rake = (1:1.0,2:1.0,3:1.0,4:1.0,5:1.0,6:1.0,7:1.0,8:1.0);
+
+END;
+
+
+BEGIN CODONS;
+CODESET * UNTITLED   =  universal:  1 -  9;
+
+
+END;
+
+BEGIN ASSUMPTIONS;
+	CHARSET * UNTITLEDo   =  1 - 3 \ 2 4 7-9;
+	CHARSET * UNTITLED   =  1 2  3 4 7-9;
+
+END;
+BEGIN ASSUMPTIONS;
+	TYPESET * UNTITLED   =  unord:  1 -  9;
+END;
+
+BEGIN MESQUITECHARMODELS;
+	ProbModelSet * UNTITLED   =  'Mk1 (est.)':  1 -  9;
+END;
+
+Begin MESQUITE;
+		MESQUITESCRIPTVERSION 2;
+		TITLE AUTO;
+		tell ProjectCoordinator;
+		getEmployee #mesquite.minimal.ManageTaxa.ManageTaxa;
+		tell It;
+			setID 0 2002854640106134798;
+		endTell;
+		getEmployee #mesquite.charMatrices.ManageCharacters.ManageCharacters;
+		tell It;
+			setID 0 5914780497712519392;
+			checksum 0 1033486703 null;
+		endTell;
+		getEmployee  #mesquite.charMatrices.BasicDataWindowCoord.BasicDataWindowCoord;
+		tell It;
+			showDataWindow #5914780497712519392 #mesquite.charMatrices.BasicDataWindowMaker.BasicDataWindowMaker;
+			tell It;
+				getWindow;
+				tell It;
+					setExplanationSize 30;
+					setAnnotationSize 20;
+					setFontIncAnnot 0;
+					setFontIncExp 0;
+					setSize 700 564;
+					setLocation 370 38;
+					setFont SanSerif;
+					setFontSize 10;
+					getToolPalette;
+					tell It;
+					endTell;
+					setTool mesquite.charMatrices.BasicDataWindowMaker.BasicDataWindow.arrow;
+					colorCells  #mesquite.charMatrices.ColorByState.ColorByState;
+					setBackground White;
+					toggleShowNames on;
+					toggleShowTaxonNames on;
+					toggleTight off;
+					toggleShowChanges off;
+					toggleSeparateLines off;
+					toggleShowStates on;
+					toggleAutoWCharNames off;
+					toggleShowDefaultCharNames off;
+					toggleConstrainCW on;
+					setColumnWidth 16;
+					toggleBirdsEye off;
+					toggleColorsPanel off;
+					birdsEyeWidth 2;
+					toggleLinkedScrolling on;
+					toggleScrollLinkedTables off;
+				endTell;
+				showWindow;
+				getEmployee #mesquite.categ.StateNamesStrip.StateNamesStrip;
+				tell It;
+					showStrip off;
+				endTell;
+				getEmployee #mesquite.charMatrices.AnnotPanel.AnnotPanel;
+				tell It;
+					togglePanel off;
+				endTell;
+				getEmployee #mesquite.charMatrices.CharReferenceStrip.CharReferenceStrip;
+				tell It;
+					showStrip off;
+				endTell;
+				getEmployee #mesquite.charMatrices.ColorCells.ColorCells;
+				tell It;
+					setColor Red;
+					removeColor off;
+				endTell;
+				getEmployee #mesquite.charMatrices.QuickKeySelector.QuickKeySelector;
+				tell It;
+					autotabOff;
+				endTell;
+				getEmployee #mesquite.align.AlignToDropped.AlignToDropped;
+				tell It;
+					gapCosts 8 3 2 2;
+					subCosts  5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 [...]
+				endTell;
+			endTell;
+		endTell;
+		endTell;
+end;
+
+
diff --git a/test/NTSValidIn/bglobin.nex b/test/NTSValidIn/bglobin.nex
new file mode 100755
index 0000000..07a09be
--- /dev/null
+++ b/test/NTSValidIn/bglobin.nex
@@ -0,0 +1,46 @@
+#NEXUS
+
+begin data;
+   dimensions ntax=17 nchar=432;
+   format datatype=dna missing=?;
+   matrix
+   human       ctgactcctgaggagaagtctgccgttactgccctgtggggcaaggtgaacgtggatgaagttggtggtgaggccctgggcaggctgctggtggtctacccttggacccagaggttctttgagtcctttggggatctgtccactcctgatgctgttatgggcaaccctaaggtgaaggctcatggcaagaaagtgctcggtgcctttagtgatggcctggctcacctggacaacctcaagggcacctttgccacactgagtgagctgcactgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggtctgtgtgctggcccatcactttggcaaagaattcaccccaccagtgcaggctgcctatcagaaagtggtggctggtgtggctaatgccctggcccacaagtatcac
+   tarsier     ctgactgctgaagagaaggccgccgtcactgccctgtggggcaaggtagacgtggaagatgttggtggtgaggccctgggcaggctgctggtcgtctacccatggacccagaggttctttgactcctttggggacctgtccactcctgccgctgttatgagcaatgctaaggtcaaggcccatggcaaaaaggtgctgaacgcctttagtgacggcatggctcatctggacaacctcaagggcacctttgctaagctgagtgagctgcactgtgacaaattgcacgtggatcctgagaatttcaggctcttgggcaatgtgctggtgtgtgtgctggcccaccactttggcaaagaattcaccccgcaggttcaggctgcctatcagaaggtggtggctggtgtggctactgccttggctcacaagtaccac
+   bushbaby    ctgactcctgatgagaagaatgccgtttgtgccctgtggggcaaggtgaatgtggaagaagttggtggtgaggccctgggcaggctgctggttgtctacccatggacccagaggttctttgactcctttggggacctgtcctctccttctgctgttatgggcaaccctaaagtgaaggcccacggcaagaaggtgctgagtgcctttagcgagggcctgaatcacctggacaacctcaagggcacctttgctaagctgagtgagctgcattgtgacaagctgcacgtggaccctgagaacttcaggctcctgggcaacgtgctggtggttgtcctggctcaccactttggcaaggatttcaccccacaggtgcaggctgcctatcagaaggtggtggctggtgtggctactgccctggctcacaaataccac
+   hare        ctgtccggtgaggagaagtctgcggtcactgccctgtggggcaaggtgaatgtggaagaagttggtggtgagaccctgggcaggctgctggttgtctacccatggacccagaggttcttcgagtcctttggggacctgtccactgcttctgctgttatgggcaaccctaaggtgaaggctcatggcaagaaggtgctggctgccttcagtgagggtctgagtcacctggacaacctcaaaggcaccttcgctaagctgagtgaactgcattgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggttattgtgctgtctcatcactttggcaaagaattcactcctcaggtgcaggctgcctatcagaaggtggtggctggtgtggccaatgccctggctcacaaataccac
+   rabbit      ctgtccagtgaggagaagtctgcggtcactgccctgtggggcaaggtgaatgtggaagaagttggtggtgaggccctgggcaggctgctggttgtctacccatggacccagaggttcttcgagtcctttggggacctgtcctctgcaaatgctgttatgaacaatcctaaggtgaaggctcatggcaagaaggtgctggctgccttcagtgagggtctgagtcacctggacaacctcaaaggcacctttgctaagctgagtgaactgcactgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggttattgtgctgtctcatcattttggcaaagaattcactcctcaggtgcaggctgcctatcagaaggtggtggctggtgtggccaatgccctggctcacaaataccac
+   cow         ctgactgctgaggagaaggctgccgtcaccgccttttggggcaaggtgaaagtggatgaagttggtggtgaggccctgggcaggctgctggttgtctacccctggactcagaggttctttgagtcctttggggacttgtccactgctgatgctgttatgaacaaccctaaggtgaaggcccatggcaagaaggtgctagattcctttagtaatggcatgaagcatctcgatgacctcaagggcacctttgctgcgctgagtgagctgcactgtgataagctgcatgtggatcctgagaacttcaagctcctgggcaacgtgctagtggttgtgctggctcgcaattttggcaaggaattcaccccggtgctgcaggctgactttcagaaggtggtggctggtgtggccaatgccctggcccacagatatcat
+   sheep       ctgactgctgaggagaaggctgccgtcaccggcttctggggcaaggtgaaagtggatgaagttggtgctgaggccctgggcaggctgctggttgtctacccctggactcagaggttctttgagcactttggggacttgtccaatgctgatgctgttatgaacaaccctaaggtgaaggcccatggcaagaaggtgctagactcctttagtaacggcatgaagcatctcgatgacctcaagggcacctttgctcagctgagtgagctgcactgtgataagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggtggttgtgctggctcgccaccatggcaatgaattcaccccggtgctgcaggctgactttcagaaggtggtggctggtgttgccaatgccctggcccacaaatatcac
+   pig         ctgtctgctgaggagaaggaggccgtcctcggcctgtggggcaaagtgaatgtggacgaagttggtggtgaggccctgggcaggctgctggttgtctacccctggactcagaggttcttcgagtcctttggggacctgtccaatgccgatgccgtcatgggcaatcccaaggtgaaggcccacggcaagaaggtgctccagtccttcagtgacggcctgaaacatctcgacaacctcaagggcacctttgctaagctgagcgagctgcactgtgaccagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgatagtggttgttctggctcgccgccttggccatgacttcaacccgaatgtgcaggctgcttttcagaaggtggtggctggtgttgctaatgccctggcccacaagtaccac
+   elephseal   ttgacggcggaggagaagtctgccgtcacctccctgtggggcaaagtgaaggtggatgaagttggtggtgaagccctgggcaggctgctggttgtctacccctggactcagaggttctttgactcctttggggacctgtcctctcctaatgctattatgagcaaccccaaggtcaaggcccatggcaagaaggtgctgaattcctttagtgatggcctgaagaatctggacaacctcaagggcacctttgctaagctcagtgagctgcactgtgaccagctgcatgtggatcccgagaacttcaagctcctgggcaatgtgctggtgtgtgtgctggcccgccactttggcaaggaattcaccccacagatgcagggtgcctttcagaaggtggtagctggtgtggccaatgccctcgcccacaaatatcac
+   rat         ctaactgatgctgagaaggctgctgttaatgccctgtggggaaaggtgaaccctgatgatgttggtggcgaggccctgggcaggctgctggttgtctacccttggacccagaggtactttgatagctttggggacctgtcctctgcctctgctatcatgggtaaccctaaggtgaaggcccatggcaagaaggtgataaacgccttcaatgatggcctgaaacacttggacaacctcaagggcacctttgctcatctgagtgaactccactgtgacaagctgcatgtggatcctgagaacttcaggctcctgggcaatatgattgtgattgtgttgggccaccacctgggcaaggaattcaccccctgtgcacaggctgccttccagaaggtggtggctggagtggccagtgccctggctcacaagtaccac
+   mouse       ctgactgatgctgagaagtctgctgtctcttgcctgtgggcaaaggtgaaccccgatgaagttggtggtgaggccctgggcaggctgctggttgtctacccttggacccagcggtactttgatagctttggagacctatcctctgcctctgctatcatgggtaatcccaaggtgaaggcccatggcaaaaaggtgataactgcctttaacgagggcctgaaaaacctggacaacctcaagggcacctttgccagcctcagtgagctccactgtgacaagctgcatgtggatcctgagaacttcaggctcctaggcaatgcgatcgtgattgtgctgggccaccacctgggcaaggatttcacccctgctgcacaggctgccttccagaaggtggtggctggagtggccactgccctggctcacaagtaccac
+   hamster     ctgactgatgctgagaaggcccttgtcactggcctgtggggaaaggtgaacgccgatgcagttggcgctgaggccctgggcaggttgctggttgtctacccttggacccagaggttctttgaacactttggagacctgtctctgccagttgctgtcatgaataacccccaggtgaaggcccatggcaagaaggtgatccactccttcgctgatggcctgaaacacctggacaacctgaagggcgccttttccagcctgagtgagctccactgtgacaagctgcacgtggatcctgagaacttcaagctcctgggcaatatgatcatcattgtgctgatccacgacctgggcaaggacttcactcccagtgcacagtctgcctttcataaggtggtggctggtgtggccaatgccctggctcacaagtaccac
+   marsupial   ttgacttctgaggagaagaactgcatcactaccatctggtctaaggtgcaggttgaccagactggtggtgaggcccttggcaggatgctcgttgtctacccctggaccaccaggttttttgggagctttggtgatctgtcctctcctggcgctgtcatgtcaaattctaaggttcaagcccatggtgctaaggtgttgacctccttcggtgaagcagtcaagcatttggacaacctgaagggtacttatgccaagttgagtgagctccactgtgacaagctgcatgtggaccctgagaacttcaagatgctggggaatatcattgtgatctgcctggctgagcactttggcaaggattttactcctgaatgtcaggttgcttggcagaagctcgtggctggagttgcccatgccctggcccacaagtaccac
+   duck        tggacagccgaggagaagcagctcatcaccggcctctggggcaaggtcaatgtggccgactgtggagctgaggccctggccaggctgctgatcgtctacccctggacccagaggttcttcgcctccttcgggaacctgtccagccccactgccatccttggcaaccccatggtccgtgcccatggcaagaaagtgctcacctccttcggagatgctgtgaagaacctggacaacatcaagaacaccttcgcccagctgtccgagctgcactgcgacaagctgcacgtggaccctgagaacttcaggctcctgggtgacatcctcatcatcgtcctggccgcccacttcaccaaggatttcactcctgactgccaggccgcctggcagaagctggtccgcgtggtggcccacgctctggcccgcaagtaccac
+   chicken     tggactgctgaggagaagcagctcatcaccggcctctggggcaaggtcaatgtggccgaatgtggggccgaagccctggccaggctgctgatcgtctacccctggacccagaggttctttgcgtcctttgggaacctctccagccccactgccatccttggcaaccccatggtccgcgcccacggcaagaaagtgctcacctcctttggggatgctgtgaagaacctggacaacatcaagaacaccttctcccaactgtccgaactgcattgtgacaagctgcatgtggaccccgagaacttcaggctcctgggtgacatcctcatcattgtcctggccgcccacttcagcaaggacttcactcctgaatgccaggctgcctggcagaagctggtccgcgtggtggcccatgccctggctcgcaagtaccac
+   xenlaev     tggacagctgaagagaaggccgccatcacttctgtatggcagaaggtcaatgtagaacatgatggccatgatgccctgggcaggctgctgattgtgtacccctggacccagagatacttcagtaactttggaaacctctccaattcagctgctgttgctggaaatgccaaggttcaagcccatggcaagaaggttctttcagctgttggcaatgccattagccatattgacagtgtgaagtcctctctccaacaactcagtaagatccatgccactgaactgtttgtggaccctgagaactttaagcgttttggtggagttctggtcattgtcttgggtgccaaactgggaactgccttcactcctaaagttcaggctgcttgggagaaattcattgcagttttggttgatggtcttagccagggctataac
+   xentrop     tggacagctgaagaaaaagcaaccattgcttctgtgtgggggaaagtcgacattgaacaggatggccatgatgcattatccaggctgctggttgtttatccctggactcagaggtacttcagcagttttggaaacctctccaatgtctccgctgtctctggaaatgtcaaggttaaagcccatggaaataaagtcctgtcagctgttggcagtgcaatccagcatctggatgatgtgaagagccaccttaaaggtcttagcaagagccatgctgaggatcttcatgtggatcccgaaaacttcaagcgccttgcggatgttctggtgatcgttctggctgccaaacttggatctgccttcactccccaagtccaagctgtctgggagaagctcaatgcaactctggtggctgctcttagccatggctacttc
+   ;
+end;
+
+begin mrbayes;
+   [The following block illustrates how to set up two data partitions
+    and use different models for the different partitions.]
+   charset non_coding = 1-90 358-432;
+   charset coding     = 91-357;
+   partition region = 2:non_coding,coding;
+   set partition = region;
+   
+   [The following lines set a codon model for the second data partition (coding) and
+    allows the non_coding and coding partitions to have different overall rates.]
+   lset applyto=(2) nucmodel=codon;
+   prset ratepr=variable;
+   
+   [Codon models are computationally complex so the following lines set the parameters
+    of the MCMC such that only 1 chain is run for 100 generations and results are printed
+    to screen and to file every tenth generation. To start this chain, you need to type
+    'mcmc' after executing this block. You need to run the chain longer to get adequate
+    convergence.]
+   mcmcp ngen=100 nchains=1 printfreq=10 samplefreq=10;
+end;
diff --git a/test/NTSValidIn/characters.nex b/test/NTSValidIn/characters.nex
new file mode 100644
index 0000000..3592b86
--- /dev/null
+++ b/test/NTSValidIn/characters.nex
@@ -0,0 +1,148 @@
+#nexus
+
+begin taxa;
+  dimensions ntax=6;
+  taxlabels
+	'P. fimbriata'
+	'P. robusta'
+	'P. americana'
+	'P. myriophylla'
+	'P. polygama'
+	'P. macrophylla'
+  ;
+  blockid bogus;
+end;
+
+[!
+*************
+* dna       *
+*************
+]
+begin characters;
+  dimensions nchar=45;
+  format  missing=? gap=- datatype=dna Equate="Q=(AC)";
+  title dna_forty_five;
+  matrix
+	P._fimbriata    {a, G}cctcggcttaacgaacctcggcttaacgaacctcggcttaacga
+	P._robusta      (a, , C)cctcggcttaaccaacctcggcttaacgaacctcggcttaacga
+	P._americana    Qcgtcgctttca---acgtcgctttcaccaacgtcgctttcacca
+	P._myriophylla  acgtcgctttca---acgtcgctttcaccaacgtc?ctttcacca
+	P._polygama     acgtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca
+	P._macrop[i]hylla  acgtcgctctcaccaacgtcgctttcaccaacgtcgctttcacca
+  ;
+end;
+
+[!
+*************
+* rna       *
+*************
+]
+begin characters;
+  dimensions nchar=45;
+  format datatype=rna missing=? gap=-;
+  title rna_forty_five;
+  matrix
+	P._fimbriata    YR?ucggcuuaacgaaccucggcuuaacgaaccucggcuuaacga
+	P._robusta      Nc{ACGU-}ucggcuuaaccaaccucggcuuaacgaaccucggcuuaacga
+	P._americana    acgucgcuuuca---acgucgcuuucaccaacgucgcuuucacca
+	P._myriophylla  acgucgcuuuca---acgucgcuuucaccaacguc?cuuucacca
+	P._polygama     acgucgcucucaccaacgucgcuuucaccaacguc?cuuucacca
+	P._macrophylla  acgucgcucucaccaacgucgcuuucaccaacgucgcuuucacca
+  ;
+end;
+
+[!
+**********
+* Tokens *
+**********
+]
+begin characters;
+  dimensions nchar=3;
+  charstatelabels
+	1 'leaf margins' / entire fimbriate,
+	2 'flower color' / 'white to cream' crimson,
+	3 'breeding system' / hermaphroditic gynomonoecious gynodioecious dioecious
+  ;
+  format tokens;
+  matrix
+	P._fimbriata    fimbriate  crimson         gynomonoecious
+	P._robusta      fimbriate  crimson         gynomonoecious
+	P._americana    entire     white_to_cream  hermaphroditic
+	P._myriophylla  entire     white_to_cream  hermaphroditic
+	P._polygama     entire     white_to_cream  dioecious
+	P._macrophylla  entire     crimson         gynodioecious
+  ;
+end;
+
+[!
+***********
+* Symbols *
+***********
+]
+begin characters;
+  dimensions nchar=3;
+  charstatelabels
+	1 'leaf margins' / entire fimbriate,
+	2 'flower color' / 'white to cream' crimson,
+	3 'breeding system' / hermaphroditic gynomonoecious gynodioecious dioecious
+  ;
+  format notokens symbols="0123";
+  matrix
+	P._fimbriata    111
+	P._robusta      111
+	P._americana    000
+	P._myriophylla  000
+	P._polygama     003
+	P._macrophylla  012
+  ;
+end;
+
+[!
+*****************************
+* Interleaved, missing taxa *
+*****************************
+]
+begin characters;
+  dimensions ntax=4 nchar=15;
+  format datatype=dna interleave;
+  matrix
+	P._fimbriata    acctcggc
+	P._robusta      acctcggc
+	P._americana    acgtcgct
+	P._myriophylla  acgtcgct
+
+	P._fimbriata    ttaacga
+	P._robusta      ttaacca
+	P._americana    ctcacca
+	P._myriophylla  ttcacca
+  ;
+end;
+
+[!
+****************
+** transposed **
+****************
+]
+
+begin characters;
+  dimensions nchar=15;
+  format datatype=dna transpose;
+  matrix
+      site_1   aaaaaa
+      site_2   cccccc
+      site_3   ccggcc
+      site_4   tttttt
+      site_5   cccccc
+      site_6   gggggg
+      site_7   ggcccc
+      site_8   cctttt
+      site_9   ttcttt
+      site_10  tttttt
+      site_11  aacccc
+      site_12  aaaaaa
+      site_13  cccccc
+      site_14  gcccgg
+      site_15  aaaaaa
+  ;
+end;
+
diff --git a/test/NTSValidIn/charsets.nex b/test/NTSValidIn/charsets.nex
new file mode 100644
index 0000000..6d744cc
--- /dev/null
+++ b/test/NTSValidIn/charsets.nex
@@ -0,0 +1,54 @@
+#nexus
+
+begin taxa;
+  dimensions ntax=6;
+  taxlabels
+	'P. fimbriata'
+	'P. robusta'
+	'P. americana'
+	'P. myriophylla'
+	'P. polygama'
+	'P. macrophylla'
+  ;
+  blockid bogus;
+end;
+
+[!
+*************
+* dna       *
+*************
+]
+begin characters;
+  dimensions nchar=45;
+  format datatype=dna missing=? gap=-;
+  title dna_forty_five;
+	CHARLABELS labone labtwo labthree labfour labfive labsix labseven;
+
+  matrix
+	P._fimbriata    {a, G}cctcggcttaacgaacctcggcttaacgaacctcggcttaacga
+	P._robusta      (a, , C)cctcggcttaaccaacctcggcttaacgaacctcggcttaacga
+	P._americana    rcgtcgctttca---acgtcgctttcaccaacgtcgctttcacca
+	P._myriophylla  acgtcgctttca---acgtcgctttcaccaacgtc?ctttcacca
+	P._polygama     acgtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca
+	P._macrophylla  acgtcgctctcaccaacgtcgctttcaccaacgtcgctttcacca
+  ;
+end;
+BEGIN SETS;
+    CHARSET csone (STANDARD CHARACTERS='dna forty five') = 1-3;
+    CHARSET cstwo (CHARACTERS='dna forty five' STANDARD) = csone;
+    CHARSET csthree = 5 labfour cstwo;
+    CHARSET csfour = 4 labone - . \ 3 7;
+    CHARSET csfive = 44 43 csthree  41   10 - 16 \2 18  40 42 45;
+    CHARSET cssix (CHARACTERS='dna forty five') = labseven csthree csfour 6;
+end;
+
+
+BEGIN ASSUMPTIONS;
+    
+    EXSET csone (STANDARD CHARACTERS='dna forty five') = 1-3;
+    EXSET cstwo (CHARACTERS='dna forty five' STANDARD) = csone;
+    EXSET csthree = 5 labfour cstwo;
+    EXSET * csfour = 4 labone - . \ 3 7;
+    EXSET csfive = 44 43 csthree  41   10 - 16 \2 18  40 42 45;
+    EXSET cssix (CHARACTERS='dna forty five') = labseven csthree csfour 6;
+end;
diff --git a/test/NTSValidIn/chs.html b/test/NTSValidIn/chs.html
new file mode 100644
index 0000000..e7ae127
--- /dev/null
+++ b/test/NTSValidIn/chs.html
@@ -0,0 +1,469 @@
+Content-Type: text/html; charset=ISO-8859-1
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+    <head>
+        <!-- site meta data -->  
+        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+        <meta name="description" content="NeXML is a file format for encoding phyloinformatic data using XML." />
+        <meta name="keywords" content="NeXML, XML, NEXUS, phyloinformatics, phylogenetics, phylogenies, trees, dna, rna, nucleotide, standard, continuous, amino, acid, matrix, tree, network, data" />
+        <meta name="author" content="Rutger Vos" />
+        <meta name="robots" content="index,follow" />
+        <meta name="verify-v1" content="mYceuNu58e0c0TNJ/gJ2NO63bxeH1nu28sZ2rtzcLoM=" />
+        
+        <!-- RSS feeds -->
+        <link
+          rel="alternate"
+          type="application/rss+xml"
+          title="nexml-discuss mailing list - RSS 2.0"
+          href="http://mailbucket.org/nexml_discuss.xml"/>
+        <link 
+          rel="alternate" 
+          type="application/rss+xml" 
+          title="SourceForge project summary - RSS 2.0" 
+          href="http://sourceforge.net/export/rss2_projsummary.php?group_id=209571"/>
+        <link
+          rel="alternate"
+          type="application/rss+xml" 
+          title="Wiki changes - RSS 2.0"
+          href="https://www.nescent.org/wg/evoinfo/index.php?title=Future_Data_Exchange_Standard&action=history&feed=rss"/>
+    
+        <link
+          rel="alternate"
+          type="application/rss+xml"
+          title="SVN revision history - RSS 2.0"
+          href=""/>        
+        
+        <title>FAIL</title>  
+        <link rel="stylesheet" href="/nexml/html/include/style.css" type="text/css" />
+        <link rel="stylesheet" href="/nexml/html/include/schema.css" type="text/css" />
+        <style type="text/css">
+            <!--
+                                    /* inclusions for validation service */
+
+li.debug {    
+    list-style-image: url('/nexml/html/include/bug.png'); 
+}
+
+li.info {
+   list-style-image: url('/nexml/html/include/lightbulb.png'); 
+}
+
+li.warn {
+   list-style-image: url('/nexml/html/include/error.png'); 
+}
+
+li.error {
+   list-style-image: url('/nexml/html/include/exclamation.png'); 
+}
+
+li.fatal {
+   list-style-image: url('/nexml/html/include/bomb.png'); 
+}                            -->
+        </style>
+        <script type="text/javascript" src="/nexml/html/include/functions.js"></script>
+        <script type="text/javascript" src="/nexml/html/include/schema.js"></script>
+                    <link rel="shortcut icon" href="/nexml/html/include/cross.png" />
+            </head>
+    <body>
+    
+    <!-- This heading is only here for text browsers without css -->
+    <h1 class="hide">FAIL</h1>
+    
+    <div id="thetop">
+      <a id="top" name="top"></a>
+      <p class="hide">
+        Skip to: 
+        <a href="#sitemenu" accesskey="2">Site menu</a> |
+        <a href="#maincontent" accesskey="3">Main content</a>
+      </p>
+    </div>
+    
+    <div id="container">
+      <div id="main">
+
+        <!-- main banner in the top-left -->
+        <div id="logo">       
+          <h1>
+            [<a href="/" accesskey="4">NeXML</a>]
+          </h1><span id="tagline">Rich phyloinformatic data</span>
+
+        </div>
+        
+        <!-- site blurb in the top-middle -->
+        <div id="intro">
+          <h2>
+            <a id="maincontent" name="maincontent"></a>
+            The future data exchange standard is here!
+          </h2>
+          <p>
+            NeXML is an exchange standard for representing 
+            phyloinformatic data — inspired by the commonly used 
+            NEXUS format, but more robust and easier to process.
+          </p>
+        </div>
+        <div class="clear"></div>    
+        
+        <!-- validate form -->   
+        <div id="validateDiv">
+            <form 
+                action="/nexml/validator" 
+                enctype="multipart/form-data" 
+                method="post" 
+                id="validateForm">
+                <fieldset id="validateFieldset">
+                    <legend class="hide">Process nexml data</legend>
+                    <select id="validateSelect">
+                    	<option value="validator.cgi">validate</option>
+                    	<option value="nex2xml.cgi">nexus -> nexml</option>
+                    	<option value="newick2xml.cgi">newick -> nexml</option>
+                    	<option value="xml2json.cgi">nexml -> json</option>
+                    	<option value="xml2rdf.cgi">nexml -> rdf</option>
+                    </select>
+                    <input type="file" name="file" id="validateUpload"/>
+                    <input type="button" onclick="submitForm()" id="validateSubmit" value="Submit"/>
+                </fieldset>
+            </form>          
+        </div>   
+        
+        <!-- main heading of this page -->
+        <h3 class="headerstyle">FAIL</h3>
+        
+        	<!-- http://www.nexml.org/nexml/nex2xml -->
+                <div style="padding-bottom:1em;margin-top: 1em; margin-left: 10px;color: #888888">
+            <small>
+                                                            <a href="/">~</a> /
+                                                                                <a href="/nexml">nexml</a> /
+                                                                                nex2xml                                                </small>
+        </div>
+                
+    <div class="linkshare credit">
+               <a rel="nofollow" href="http://digg.com/submit?phase=2&url=http://www.nexml.org/nexml/nex2xml">
+            <img class="icon" src="/nexml/html/include/digg.gif" alt="digg"/>
+        </a> 
+        <a rel="nofollow" href="http://reddit.com/submit?url=http://www.nexml.org/nexml/nex2xml">
+            <img class="icon" src="/nexml/html/include/reddit.gif" alt="reddit"/>
+        </a> 
+        <a rel="nofollow" href="http://del.icio.us/post?url=http://www.nexml.org/nexml/nex2xml">
+            <img class="icon" src="/nexml/html/include/delicious.gif" alt="del.icio.us"/>
+        </a>   
+        <a rel="nofollow" href="http://www.facebook.com/share.php?u=http://www.nexml.org/nexml/nex2xml">
+            <img class="icon" src="/nexml/html/include/facebook.gif" alt="facebook"/>
+        </a>        
+        <small> | Last updated: Thu Aug 25 05:35:56 EDT 2011
+ —</small>        
+    </div> 
+        
+                
+                
+<h3 class="plain">Detailed results</h3>
+<p>
+    Below are the messages received from the parsing and validation operations (if any). They
+    are organized as debugging messages (<img class="icon" src="/nexml/html/include/bug.png"/>),
+    informational (<img class="icon" src="/nexml/html/include/lightbulb.png"/>),
+    warnings (<img class="icon" src="/nexml/html/include/error.png"/>), errors
+    (<img class="icon" src="/nexml/html/include/exclamation.png"/>) and fatal
+    exceptions (<img class="icon" src="/nexml/html/include/bomb.png"/>):
+</p>
+<ul>
+    <li class="info validator">
+                    going to parse nexus data            </li>
+    <li class="info validator">
+                    going to split nexus data on lines            </li>
+    <li class="info validator">
+                    going to split lines on tokens            </li>
+    <li class="info validator">
+                    going to split non-quoted/commented fragments on whitespace            </li>
+    <li class="info validator">
+                    tokenized and split data, going to parse blocks            </li>
+    <li class="info validator">
+                    found nexus token            </li>
+    <li class="info validator">
+                    starting taxa block            </li>
+    <li class="info validator">
+                    number of taxa: 6            </li>
+    <li class="info validator">
+                    starting taxlabels            </li>
+    <li class="info validator">
+                    starting characters block            </li>
+    <li class="info validator">
+                    number of characters: 45            </li>
+    <li class="info validator">
+                    datatype: dna            </li>
+    <li class="info validator">
+                    missing character: ?            </li>
+    <li class="info validator">
+                    gap character: -            </li>
+    <li class="info validator">
+                    block has title 'dna_forty_five'            </li>
+    <li class="info validator">
+                    charlabels: labone labtwo labthree labfour labfive labsix labseven            </li>
+    <li class="info validator">
+                    adding matrix metadata            </li>
+    <li class="fatal validator">
+                    Can't call method "set_name" on an undefined value at perl/lib/Bio/Phylo/Matrices/Matrix.pm line 431, <DATA> line 1.
+            </li>
+</ul>
+<h3 class="plain">Submitted contents</h3>
+<p>
+    Below are the contents (if any) that were submitted to this query:
+</p>
+<div style="width:470px;overflow:auto;margin-left:2em;padding-bottom:1em">
+                    <a name="line1"></a>
+        <div title="1" style="white-space:pre;font-family:courier"><span style="color:silver">1</span> #nexus
+</div>
+                    <a name="line2"></a>
+        <div title="2" style="white-space:pre;font-family:courier"><span style="color:silver">2</span> 
+</div>
+                    <a name="line3"></a>
+        <div title="3" style="white-space:pre;font-family:courier"><span style="color:silver">3</span> begin taxa;
+</div>
+                    <a name="line4"></a>
+        <div title="4" style="white-space:pre;font-family:courier"><span style="color:silver">4</span>   dimensions ntax=6;
+</div>
+                    <a name="line5"></a>
+        <div title="5" style="white-space:pre;font-family:courier"><span style="color:silver">5</span>   taxlabels
+</div>
+                    <a name="line6"></a>
+        <div title="6" style="white-space:pre;font-family:courier"><span style="color:silver">6</span> 	'P. fimbriata'
+</div>
+                    <a name="line7"></a>
+        <div title="7" style="white-space:pre;font-family:courier"><span style="color:silver">7</span> 	'P. robusta'
+</div>
+                    <a name="line8"></a>
+        <div title="8" style="white-space:pre;font-family:courier"><span style="color:silver">8</span> 	'P. americana'
+</div>
+                    <a name="line9"></a>
+        <div title="9" style="white-space:pre;font-family:courier"><span style="color:silver">9</span> 	'P. myriophylla'
+</div>
+                    <a name="line10"></a>
+        <div title="10" style="white-space:pre;font-family:courier"><span style="color:silver">10</span> 	'P. polygama'
+</div>
+                    <a name="line11"></a>
+        <div title="11" style="white-space:pre;font-family:courier"><span style="color:silver">11</span> 	'P. macrophylla'
+</div>
+                    <a name="line12"></a>
+        <div title="12" style="white-space:pre;font-family:courier"><span style="color:silver">12</span>   ;
+</div>
+                    <a name="line13"></a>
+        <div title="13" style="white-space:pre;font-family:courier"><span style="color:silver">13</span>   blockid bogus;
+</div>
+                    <a name="line14"></a>
+        <div title="14" style="white-space:pre;font-family:courier"><span style="color:silver">14</span> end;
+</div>
+                    <a name="line15"></a>
+        <div title="15" style="white-space:pre;font-family:courier"><span style="color:silver">15</span> 
+</div>
+                    <a name="line16"></a>
+        <div title="16" style="white-space:pre;font-family:courier"><span style="color:silver">16</span> [!
+</div>
+                    <a name="line17"></a>
+        <div title="17" style="white-space:pre;font-family:courier"><span style="color:silver">17</span> *************
+</div>
+                    <a name="line18"></a>
+        <div title="18" style="white-space:pre;font-family:courier"><span style="color:silver">18</span> * dna       *
+</div>
+                    <a name="line19"></a>
+        <div title="19" style="white-space:pre;font-family:courier"><span style="color:silver">19</span> *************
+</div>
+                    <a name="line20"></a>
+        <div title="20" style="white-space:pre;font-family:courier"><span style="color:silver">20</span> ]
+</div>
+                    <a name="line21"></a>
+        <div title="21" style="white-space:pre;font-family:courier"><span style="color:silver">21</span> begin characters;
+</div>
+                    <a name="line22"></a>
+        <div title="22" style="white-space:pre;font-family:courier"><span style="color:silver">22</span>   dimensions nchar=45;
+</div>
+                    <a name="line23"></a>
+        <div title="23" style="white-space:pre;font-family:courier"><span style="color:silver">23</span>   format datatype=dna missing=? gap=-;
+</div>
+                    <a name="line24"></a>
+        <div title="24" style="white-space:pre;font-family:courier"><span style="color:silver">24</span>   title dna_forty_five;
+</div>
+                    <a name="line25"></a>
+        <div title="25" style="white-space:pre;font-family:courier"><span style="color:silver">25</span> 	CHARLABELS labone labtwo labthree labfour labfive labsix labseven;
+</div>
+                    <a name="line26"></a>
+        <div title="26" style="white-space:pre;font-family:courier"><span style="color:silver">26</span> 
+</div>
+                    <a name="line27"></a>
+        <div title="27" style="white-space:pre;font-family:courier"><span style="color:silver">27</span>   matrix
+</div>
+                    <a name="line28"></a>
+        <div title="28" style="white-space:pre;font-family:courier"><span style="color:silver">28</span> 	P._fimbriata    {a, G}cctcggcttaacgaacctcggcttaacgaacctcggcttaacga
+</div>
+                    <a name="line29"></a>
+        <div title="29" style="white-space:pre;font-family:courier"><span style="color:silver">29</span> 	P._robusta      (a, , C)cctcggcttaaccaacctcggcttaacgaacctcggcttaacga
+</div>
+                    <a name="line30"></a>
+        <div title="30" style="white-space:pre;font-family:courier"><span style="color:silver">30</span> 	P._americana    rcgtcgctttca---acgtcgctttcaccaacgtcgctttcacca
+</div>
+                    <a name="line31"></a>
+        <div title="31" style="white-space:pre;font-family:courier"><span style="color:silver">31</span> 	P._myriophylla  acgtcgctttca---acgtcgctttcaccaacgtc?ctttcacca
+</div>
+                    <a name="line32"></a>
+        <div title="32" style="white-space:pre;font-family:courier"><span style="color:silver">32</span> 	P._polygama     acgtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca
+</div>
+                    <a name="line33"></a>
+        <div title="33" style="white-space:pre;font-family:courier"><span style="color:silver">33</span> 	P._macrophylla  acgtcgctctcaccaacgtcgctttcaccaacgtcgctttcacca
+</div>
+                    <a name="line34"></a>
+        <div title="34" style="white-space:pre;font-family:courier"><span style="color:silver">34</span>   ;
+</div>
+                    <a name="line35"></a>
+        <div title="35" style="white-space:pre;font-family:courier"><span style="color:silver">35</span> end;
+</div>
+                    <a name="line36"></a>
+        <div title="36" style="white-space:pre;font-family:courier"><span style="color:silver">36</span> BEGIN SETS;
+</div>
+                    <a name="line37"></a>
+        <div title="37" style="white-space:pre;font-family:courier"><span style="color:silver">37</span>     CHARSET csone (STANDARD CHARACTERS='dna forty five') = 1-3;
+</div>
+                    <a name="line38"></a>
+        <div title="38" style="white-space:pre;font-family:courier"><span style="color:silver">38</span>     CHARSET cstwo (CHARACTERS='dna forty five' STANDARD) = csone;
+</div>
+                    <a name="line39"></a>
+        <div title="39" style="white-space:pre;font-family:courier"><span style="color:silver">39</span>     CHARSET csthree = 5 labfour cstwo;
+</div>
+                    <a name="line40"></a>
+        <div title="40" style="white-space:pre;font-family:courier"><span style="color:silver">40</span>     CHARSET csfour = 4 labone - . \ 3 7;
+</div>
+                    <a name="line41"></a>
+        <div title="41" style="white-space:pre;font-family:courier"><span style="color:silver">41</span>     CHARSET csfive = 44 43 csthree  41   10 - 16 \2 18  40 42 45;
+</div>
+                    <a name="line42"></a>
+        <div title="42" style="white-space:pre;font-family:courier"><span style="color:silver">42</span>     CHARSET cssix (CHARACTERS='dna forty five') = labseven csthree csfour 6;
+</div>
+                    <a name="line43"></a>
+        <div title="43" style="white-space:pre;font-family:courier"><span style="color:silver">43</span> end;
+</div>
+                    <a name="line44"></a>
+        <div title="44" style="white-space:pre;font-family:courier"><span style="color:silver">44</span> 
+</div>
+                    <a name="line45"></a>
+        <div title="45" style="white-space:pre;font-family:courier"><span style="color:silver">45</span> 
+</div>
+                    <a name="line46"></a>
+        <div title="46" style="white-space:pre;font-family:courier"><span style="color:silver">46</span> BEGIN ASSUMPTIONS;
+</div>
+                    <a name="line47"></a>
+        <div title="47" style="white-space:pre;font-family:courier"><span style="color:silver">47</span>     
+</div>
+                    <a name="line48"></a>
+        <div title="48" style="white-space:pre;font-family:courier"><span style="color:silver">48</span>     EXSET csone (STANDARD CHARACTERS='dna forty five') = 1-3;
+</div>
+                    <a name="line49"></a>
+        <div title="49" style="white-space:pre;font-family:courier"><span style="color:silver">49</span>     EXSET cstwo (CHARACTERS='dna forty five' STANDARD) = csone;
+</div>
+                    <a name="line50"></a>
+        <div title="50" style="white-space:pre;font-family:courier"><span style="color:silver">50</span>     EXSET csthree = 5 labfour cstwo;
+</div>
+                    <a name="line51"></a>
+        <div title="51" style="white-space:pre;font-family:courier"><span style="color:silver">51</span>     EXSET * csfour = 4 labone - . \ 3 7;
+</div>
+                    <a name="line52"></a>
+        <div title="52" style="white-space:pre;font-family:courier"><span style="color:silver">52</span>     EXSET csfive = 44 43 csthree  41   10 - 16 \2 18  40 42 45;
+</div>
+                    <a name="line53"></a>
+        <div title="53" style="white-space:pre;font-family:courier"><span style="color:silver">53</span>     EXSET cssix (CHARACTERS='dna forty five') = labseven csthree csfour 6;
+</div>
+                    <a name="line54"></a>
+        <div title="54" style="white-space:pre;font-family:courier"><span style="color:silver">54</span> end;
+</div>
+    </div>      </div>
+      
+      <div id="sidebar">
+      
+        <!-- top-right site navigation menu -->
+        <h2 class="quicklinks">
+          <a id="quicklinks" name="quicklinks"></a>Quick links:
+        </h2>
+          <a class="quicklink" href="/manual">Manual</a>
+          <a class="quicklink" href="/nexml/html/doc/schema-1/">Schema documentation</a>
+          <a class="quicklink" href="/nexml/examples">Example files</a>  
+          <a class="quicklink" href="/nexml/downloads">Downloads</a>  
+          <a class="quicklink" href="http://docs.google.com/Present?docid=dc3k7mhr_8g9j2j7ct&invite=g56xcjx">Slide show</a>      
+        <br />
+        <h2 class="sidelink menuheader">
+          <a name="sitemenu"></a>Bindings:
+        </h2>
+        
+        <a class="sidelink" href="/nexml/java/">Java</a> 
+        <span class="hide">|</span>
+        
+        <a class="sidelink" href="/nexml/python/">Python</a>
+        <span class="hide">|</span> 
+        
+        <a class="sidelink" href="/nexml/perl/">Perl</a> 
+        <span class="hide">|</span>
+        
+		<a class="sidelink" href="/nexml/cpp/">C++</a> 
+        <span class="hide">|</span>		
+        
+        <a class="sidelink" href="/nexml/javascript/">JavaScript</a> 
+        <span class="hide">|</span> 
+        
+        <a class="sidelink" href="/nexml/ruby/">Ruby</a> 
+        <span class="hide">|</span>                          
+        
+        <br />
+        
+        <h2 class="sidelink menuheader">
+          <a name="sitemenu"></a>Goings on:
+        </h2>
+        
+        <a class="sidelink" href="/wiki/">Wiki</a> 
+        <span class="hide">|</span>
+        
+        <a class="sidelink" href="/mail/">Mailing list</a>
+        <span class="hide">|</span> 
+        
+        <a class="sidelink" href="/code/">SVN repository</a> 
+        <span class="hide">|</span>
+
+        <a class="sidelink" href="/tracker/">Issue tracker</a>
+        <span class="hide">|</span>
+           
+        
+        <a class="hide" href="#top" accesskey="1">Top of page</a>
+        
+        <!-- links at the bottom right -->
+        <h3>
+          External links
+        </h3>
+        <ul>        
+          <li class="external">
+          	<a href="http://sourceforge.net/projects/nexml/" rel="nofollow">SF.net project</a>
+          </li>
+          <li class="external">
+          	<a href="http://www.nescent.org/wg_evoinfo/Future_Data_Exchange_Standard" rel="nofollow">EvoInfo wiki</a>
+          </li>
+          <li class="external">
+          	<a href="http://www.evolutionaryontology.org/" rel="nofollow">CDAO</a>
+          </li>
+        </ul>
+      </div>
+      <div class="clear">
+         
+      </div>
+    </div>
+    <div id="footer">
+      <p>
+        Site implementation and technology:
+        © <a href="http://rutgervos.blogspot.com" class="credit">Rutger Vos</a>. 
+        Site design: © <a href="http://andreasviklund.com/" class="credit">Andreas Viklund</a> 
+        of <a href="http://jokkmokk.biz/" title="ITUS Jokkmokk">Jokkmokk</a>.
+      </p>
+    </div>
+    <!--
+	    <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
+	    </script>
+	    <script type="text/javascript">
+	    _uacct = "UA-3174308-1";
+	    urchinTracker();
+	    </script>  
+    -->  
+  </body>
+</html>
diff --git a/test/NTSValidIn/cynmix.nex b/test/NTSValidIn/cynmix.nex
new file mode 100755
index 0000000..2b4698f
--- /dev/null
+++ b/test/NTSValidIn/cynmix.nex
@@ -0,0 +1,716 @@
+#NEXUS 
+[This is an example of a mixed data set]
+
+[Data from Nylander, J., F. Ronquist, J. P. Huelsenbeck and J. L. Nieves-Aldrey. 2004. Bayesian phylogenetic analysis of combined data. Systematic Biology 53:47-67.]
+
+begin data;
+	dimensions ntax=32 nchar=3246;
+
+	[Note the specification of the mixed data type. This is a MrBayes-specific extension to the Nexus standard.]
+	format datatype=mixed(Standard:1-166,DNA:167-3246) interleave=yes gap=- missing=?;
+
+	matrix
+	[morphology]
+	Synergus        1-1-100000000202110201011010110100000000010121001120101010101000000001100020000000111000102010000211010010001001110110000011100000100111000000011112100001001101100005
+	Periclistus     1-1-100000000202110201011110110100000000010100101000101010011000000001100021001000111000112010000211010010000001110111000011100000100111010000111112100001001111100002
+	Ceroptres       1-1-1000100002021002010111101001000000000111000???10101010010000000000100021001000111000100000000200010010101001010111000011100000100111100000101112101001100111????05
+	Synophromorpha  1-1-00001000021-100101001111110100000000010100101000100010010000000000100001200000111000110000000200010010001001000111000011100001120011110000111112100001001101100002
+	Xestophanes     1-1-00001000011-10-110001011010100000000010110101000100010010101000000100001201000121000110000000100111010001000000111000011100000110011100000010012100000100120001002
+	Diastrophus     011-10101000021-10-210001011010100000100000011101000100010012000000000001101201100101000110000000100100000000000000011000011100001120011100100000012000000100120001002
+	Gonaspis        1-1-10001000011-10-210001011010100000100000021101000100010012000000000000101201000100000110000000200110000000000000111000011100101120011100101000010-00000100120001002
+	Liposthenes_gle 01000030000101022020000010110111000001001000101100001000100120000000010000112011001010001120100001001110000000000000100000100010011210111-0201100012000000000120000003
+	Liposthenes_ker 0000102000000101????????????????????????????110???0?10001001000000??00000011101100101000112010000????1000000000??????1?1?0100000011210111-01011000???0?000?001?1????03
+	Antistrophus    1-010120000?01001010000110110001000001020000101???001011111100210000000002210011101210101110200001001100021000000000110000100000011210011-1201000112000000000120????00
+	Rhodus          1-01000000000000????????????0??????????0????1010000?10101111000000??00000121001110121010112010000????1000200001??????1?000100010011211011-12010000?200?001?001?0????03
+	Hedickiana      1-01010000000000?????0??10101??????1???0????0010000110101111000000??00000121001100121010111010000???11000100000??????1?000100000011200111012010001??00?001?00??0????03
+	Neaylax         1-01010000000000100000011010000100010000000000{01}???0110001111000000000000002100110010201011{12}010000100111001000000000011000010000001120011100101000110-00001000110????03
+	Isocolus        0100001000000100100100011110000100000000000010110001101010110000000000000020000010002000112010000100010001001000000010000010001001020011011100000111000001001100000100
+	Aulacidea       00000000000001001002000110100001000000000000101???01101010110000000000000021000000000000112010000100010001001000000011000010000001010011110100100111000001001100????00
+	Panteliella     0000003000100200??1?000????0??010?00????????200???1?101010111020?0??000001210010101200001{12}2110010???11?01100?????00????0?010?000021210111-020000?1?????000100120????03
+	Barbotinia      1-010100000?0100002000000011000100010200000020010021101010111001000000000021001000100000111000000100110000101000000011000010000001110111110100001012010000100011001101
+	Aylax           0100002000100101101000010010100110010200000020010021101010110000000003000021001010100000110010000100110000000000001011010010010001120111110200100010-10000000110001101
+	Iraella         0100003000100100101100010010100110010200000020{01}???21101010110001100000000021000010110010121020000100111000000000001011000000020001120111110100100010-00000000020????01
+	Timaspis        0000002000100201001100010010100101000000000021100120102010201001100003000021011000111000121001100000111100000100001011000010010000010101100210000010-01000000120000100
+	Phanacis_1      00011000001001011011000110101001010000000010201???0110201021000010000300012101100012100012102100000011011000000000101100001001000011011111021000001000001000000200??00
+	Phanacis_2      00000020001002000002010110101001110000000000111???01102010210001100003000021010000122000121021100000110010000010001011000010010000010111100110000010-00000100020????00
+	Eschatocerus    000010310-1012002002000100101-110?101-0---20112101311--1112100011011120-0021-1001--321-012102110-00010--0011-1-1001001-0-000010001131--01-1200001-10-010-00?0120010106
+	Diplolepis      000000300010120220020000001011111100120000202110013011-11021100110111201002101001001200011000100000010010001-110001011001000000111010111100210000010-01000000010????02
+	Pediaspis       000000201011021-20100000001111111100121000{012}021010111100?101101011110010110011011011001-1110001001100101100000010000011001100010001120011100210000010-01010100020001117
+	Plagiotrochus   000000000110120120010000001201101100121000102000013011-01021001110100001101120001111100012{01}0010011001011001001110110?1011000010002120011100210000000-010-0110120011015
+	Andricus        0{01}00002001{01}01202200100001012011{01}1000111000{01}0{12}100003111-1101110101010000110{12}1{01}000011020001100000{01}010010{01}0001010110100110110010100{01}2120111110210{01}01110-01111110010011015
+	Neuroterus      00001031021112022020001000121110111012121020310???3011-0102110101011010110012100010320001200011000001011001001-1011001111001020002120011000200000000-01110110000????15
+	Biorhiza        010000310211120220200010001201101110121110202100103111-110111011101101011001200001101000110000010100101100100011010001111001020012120011100210000000-01111100020010015
+	Parnips         1-00000000000100???????????????1????????????11110001111000101000?-??00000021001000021000112000000?0??00100000000?????0?00010?001000001010002110001???-?00??001?1????01
+	Paramblynotus   0100000002000000100000000000110100000100000010{01}10000001000-0000000000000000000000--00000000001000200100-1-001000000-010000100000000111100-01000000020000000001000???0-
+	Ibalia          000000000000002-000000000000??00000000000000100{01}0100001-00100000-0000000000010000-000000000011010000-0000000000-0---000000000200---01010000100000000-000000??00000000-
+
+	Synergus        TATACTATACTTTATATTTGGTATTTGAACTGGAATAATTGGATCAGCATTAAGATTAATTATTCGTATAGAATTAAGATCAACATTACAATTAATTAATAATGATCAAATTTATAATTCAATTGTAACTGCTCATGCATTTATCATAATTTTTTTTATAGTAATA
+	Periclistus     ATTAATATATTTTATTTTAGGGATTTGATCAGGTATAATTGGGTCAAGATTAAGAATAATTATTCGATTAGAACTTGGTAATCCTTTACAATTAATTGGAAATGATCAAATTTATAATTCAATTGTAACTGTTCATGCATTTATTATAATTTTTTTTATAGTTATA
+	Ceroptres       TATATTATATTTTATATTTGGGGTATATTCTGGAATAATTGGATCATCCTTAAGAATAATTATTCGAATAGAATTAGGAACTCCTACTCAGTTAATTAATAATGACCAAATTTATAATTCAATTGTAACTGCTCATGCTTTTATTATAATTTTTTTTATAGTTATA
+	Synophromorpha  AATACTATATTTTATTTTTGGAATTTGATCTGGTATAATTGGATCTAGATTAAGAATAATTATTCGAATAGAACTTGGTAATCCATCTCAATTAATTGGAAATGATCAAATTTATAATTCAATTGTTACAATTCATGCTTTTATTATAATTTTTTTTATAGTTATA
+	Xestophanes     AATATTATATTTTATTTTTGGAATTTGATCTGGTATAATTGGATCTAGATTAAGAATAATTATTCGAATAGAACTTGGAATTCCTACACAATTAATTGGTAATGACCAAATTTATAATTCAATTGTAACAATTCATGCATTTATTATAATTTTTTTTATAGTAATA
+	Diastrophus     AATATTATATATAGTTTTTGGTATTTGATCTGGAATAATTGGATCAAGATTAAGAATAATTATTCGTACAGAACTTGGAACTCCTACACAATTAATTGGTAATGATCAAATTTATAACTCAATTGTTACAATTCATGCATTTATTATAATTTTTTTTATAGTAATA
+	Gonaspis        TATATTATATATAATTTTTGGTGTTTGATCTGGCATAATTGGGTCTAGATTAAGAATAATTATTCGGACAGAACTTGGTACACCATTACAATTAATTGGTAATGATCAAATTTATAATTCAATTGTTACAACTCATGCATTTATTATAATTTTTTTTATAGTTATA
+	Liposthenes_gle AATTTTATATTTTATTTTTGGTATATGATCAGGTATATTAGGTTCAGCTTTAAGAATGATTATTCGTATAGAGTTAGGGACTCCCTCTCAATTAATTGGAAATGATCAAATTTATAATACAATTGTTACAGCTCATGCTTTTGTAATAATTTTTTTTATGGTTATA
+	Liposthenes_ker AATATTATACTTTATATTTGGAATCTGATCTGGAATAATTGGATCAGGATTAAGAATAATTATCCGTATAGAACTAGGATCCCCCGGCCAACTAATTGGAAATGATCAAATCTATAACTCTATCGTTACAGCTCATGCATTTATTATAATTTTTTTTATAGTAATA
+	Antistrophus    TATATTATACTTTTTATTTGGAATTTGATCTGGATTAATTGGATCAGCTTTAAGTATACTTATTCGAATAGAACTAGGAACCCCTTCTCAATTAATTGGTAATGATCAAATTTATAATTCAGTAGTTACTTCTCATGCTTTTGTAATAATTTTTTTTATAGTAATA
+	Rhodus          ATTACTTTATTTTTTATTCGGTATATGATCAGGAATAGTTGGAGCAAGATTAAGAGTTATTATCCGTATAGAACTAGGAACCCCCTCTCAACTACTTGAAAATGACCAAGTTTATAATTCAATTGTAACTGCTCATGCATTTATCATAATCTCCTTTATAGTCATA
+	Hedickiana      TATATTATATTTTTTATTTGGTGCATGATCTGGGACTATTGGATCTGCATTAAGTATACTTATTCGTAGAGAATTAGGGACTCCAAATCAATTTATTGGAAATGATCAAATTTATAATTCAATTGTCACATCTCATGCATTTGTAATAATTTTTTTTATAGTTATA
+	Neaylax         TATATTATACTTTTTATTTGGGATTTGGTCAGGAATTATTGGATCTGCATTAAGAATAATTATTCGAATAGAATTAGGGTCACCCTCCCCATTAATTGGTAATGACCAAATTTATAATTCAATTGTTACTGCTCATGCATTTGTAATAATTTTTTTTATAGTCATG
+	Isocolus        AATATTATATTTTTTATTTGGTATTTGATCAGGGATAATTGGGTCTGCTTTGAGAGTAATTATTCGAATAGAGTTAGGGACTCCTGGGCAATTAATTGGAAATGATCAAATTTATAATTCAATTGTTACAGCTCATGCTTTTGTAATAATTTTTTTTATAGTAATA
+	Aulacidea       AATATTATATTTTTTATTTGGAATTTGATCTGGAATAATTGGATCAGCATTAAGAATAATTATTCGTTTAGAATTAGGGACCTCTGGACAATTAATTGGAGATGATCAAGTTTATAACTCTATTGTTACAGCTCATGCATTCGTAATAATTTTTTTTATAGTTATA
+	Panteliella     ATTATTATATTTTATATTTGGTATTTGAGCAGGAATAATTGGGCCAGCTTTAAGAATAATTATTCGTATAGAGTTAGGGTTGCCTTCCCAATTAATTGGAAATGATCAAATTTATAATTCTATTGTTACGGCTCACGCTTTTATTATAATTTTTTTTATAGTTATA
+	Barbotinia      AATATTATATTTTATATTTGGAATCTGATCAGGAATAATTGGGTCAGCTTTAAGAATATTAATTCGAATGGAATTAGGTACTCCAGGTCAATTAATTGGTAATGATCAAATTTACAATTCAATTGTTACTATTCATGCATTTATTATAATTTTTTTTATAGTTATA
+	Aylax           TATATTATATTTTATATTTGGAATTTGATCTGGAATAATTGGATCTGCTTTAAGTATATTAATTCGAATAGAATTAGGAACACCTAATCAATTAATTGGAAATGATCAAGTTTATAATTCAATTGTTACTACTCATGCATTTATTATAATTTTTTTTATAGTTATA
+	Iraella         AATAATATATTTTATTTTTGGTATTTGATCAGGAATAATTGGATCAGCCTTAAGAATATTAATTCGAATAGAATTAGGTACTCCAGGTCAATTAATTGGAAATGATCAAATTTATAATTCAATTGTTACAGCTCATGCTTTTATTATAATTTTTTTTATAGTTATA
+	Timaspis        AATATTATATTTTATTTTTGGTATTTGATCTGGAATAATTGGATCAGCTTTAAGAATAATTATTCGTATAGAATTAGGGACTCCTTCACAATTAATTGGTAATGATCAAATTTATAATTCAGTAGTTACAGCTCATGCTTTTATTATAATTTTTTTTATAGTTATA
+	Phanacis_1      TATATTATATTTTGTATTTGGGATTTGATCAGGAATAATTGGGTCTGCTTTAAGTATAATTATTCGGATAGAATTAGGTACACCTTCCCAATTAATTGGGAATGATCAGATTTATAATGCTATTGTTACAGCTCATGCATTTATTATAATTTTTTTTATAGTTATA
+	Phanacis_2      GGTATTATATTTTATTTTTGGGATTTGATCTGGTATAATTGGAACAGGATTAAGATTAATTATTCGTATAGAATTAGGGTCTCCTTCACAATTAATTGGGAATGATCAGATTTATAACTCAGTTGTTACTGCTCATGCATTTATTATAATTTTTTTTATGGTTATA
+	Eschatocerus    AATCATATATTTTATTTTAGGAATTTGATCAGGAATTTTAGGGGCATCATTAAGTATACTTATTCGAATAGAATTAGGTACCCCTAATCAATTTATTGGAAATGATCAAATTTATAATTCTATTGTAACAGCTCATGCATTTATCATAATTTTCTTTATAGTTATA
+	Diplolepis      TGTATTATATTTTATATTTGGTATTTGGTGTGGGATGGTTGGGGCAGCTTTAAGAATAATTATTCGTATTGAGTTAGGAATAACAGGGCAGTTAATTGGTAATGATCAAATTTATAATTCTATTGTTACTTCTCATGCTTTTATTATAATTTTTTTTATAGTTATG
+	Pediaspis       AATATTATATTTTATTTTTGGAACATGATCTGGAATAATAGGAAGTTCATTAAGAATAATTATTCGAATAGAATTAGGAATACCTGGACAATTAATTAGAAATGATCAAATTTATAATATAATTGTAACTTCTCATGCTTTTATTATAATTTTTTTTATAGTAATA
+	Plagiotrochus   TATATTATATTTTATATCTGGAATCTGATCAGGATTAATTGGATCAAGATTAAGAATAATTATTCGAATAGAATTAGGAACCCCTTCACAATTAATTGGAAATGATCAACTCTATAACTCAATCGTAACTGCACATGCATTTATTATAATTTTTTTTATAGTTATA
+	Andricus        AATATTATATTTTATATTTGGTATTTGATCAGGAATAATTGGATCAGGATTGAGAATAATTATTCGAATAGAGTTAGGGATACCTTTACAATTAATTGGAAATGACCAAATTTATAATTCTATTGTTACTGCTCATGCTTTTGTAATAATTTTTTTTATAGTTATA
+	Neuroterus      AATATTATATTTTATATTTGGAATTTGAGCAGGAATAATTGGATCAGGATTAAGAATAATTATTCGAATAGAATTAGGGATACCTTTACAATTAATTGGAAATGATCAAATTTATAACTCTATTGTTACAGCCCATGCTTTTGTAATAATTTTTTTTATAGTAATA
+	Biorhiza        TATAATATATTTTATATTTGGAATTTGATCAGGAATAATTGGATCTAGTTTAAGAATAATTATTCGAATAGAATTAGGGACTCCATTACAATTAATTATAAATGATCAAATTTATAATTCAATTGTTACAGCTCATGCTTTTGTAATAATTTTTTTTATAGTTATA
+	Parnips         AATATTATATTTTATTTTTGGAATTTGATCAGGAATTATTGGGTCAGCATTAAGAATAATTATTCGAATAGAATTAGGGACTCCTGAACAATTAATTGGGAATGACCAAATTTATAATTCTATTGTGACAGCTCATGCTTTTATTATAATTTTTTTTATAGTTATA
+	Paramblynotus   TATCTTATATTTTATTTTTGGAATATGAGCAGGAATAATTGGAGCATCAATAAGAATAATTATTCGTATAGAATTAGGTACACCAAATCAATTAATTAATAATGATCAAATTTATAATTCTATTGTAACTGCTCATGCATTTATTATAATTTTTTTTATAGTTATA
+	Ibalia          GCTGCTATATTTTATTTTTGGGATTTGATCCGGAATAATTGGATCTAGACTAAGAATAATTATTCGAATAGAATTAGGAGCCCCTTCCCAATTAATTGGGAATGATCAAATTTATAATTCTATTGTAACAATTCATGCTTTTATTATAATTTTTTTTATAGTAATA
+
+	Synergus        CCAATTACAATTGGAGGATTTAGAAATTACCTAATTCCATTAATATTAAGAACTCCTGATATAGCTTTCCCACGACTTAATAATATAAGATTTTGATTATTAATCCCATCTTTAATTTTATTAACATCAAGTATATTTATTGACCAAGGAGCTGGAAGAGGTTGAA
+	Periclistus     CCTATTATAGTTGGAGGATTTGGTAATTATTTAATTCCTATTATATTAATTACTCCTGATATGGCTTTTCCTCGATTAAATAATATAAGTTATTGACTTTTAATTCCCTCTTTATTATTAATATTATCTACAATATTTATTGATCAGGGTGCAGGAACAGGATGAA
+	Ceroptres       CCTATTATAGTAGGTGGATTTGGAAATTATATGATTCCTTTAATATTAATTTCTCCTGATATAGCATATCCTCGTTTAAATAATATAAGGTTTTGATTATTAATTCCTTCTTTAATTTTATTGATCATGGGAATATTTATTGATCAAGGGGCGGGGACAGGATGAA
+	Synophromorpha  CCTATTATAGTTGGTGGATTTGGAAATTATTTAATTCCTTTAATATTATCAGTTCCTGATATAGCTTTTCCACGAATAAATAATATAAGGTATTGACTTTTAATTCCTTCATTATTATTAATAGTATCAAGAATATTTATTGATCAAGGAGCAGGAACAGGATGAA
+	Xestophanes     CCTATTATAGTAGGAGGATTTGGAAATTATTTAATTCCTTTAATATTATCTGTACCTGATATAGCTTTTCCTCGAATAAATAATATAAGATATTGACTTTTAGTCCCTTCTTTATTATTAATAATATCTAGAATATTTATTGATCAAGGAGCAGGTACAGGATGAA
+	Diastrophus     CCAATTATAGTAGGAGGATTTGGAAATTATTTAATTCCTTTAATATTATCAGTACCTGATATAGCTTTTCCTCGAATAAATAATATAAGATTTTGACTTTTAGTCCCTTCTTTATTATTAATAATTTCTAGTATATGTGTAGATCAAGGGTCTGGTACAGGTTGAA
+	Gonaspis        CCTATTATAGTTGGGGGATTTGGAAATTATTTAATTCCTCTTATATTAAGGGTTCCTGATATAGCTTTCCCTCGTATAAATAATATAAGATTTTGGCTTTTAATTCCTTCTTTAATATTAATATTATCTAGAATATATGTTGATCAAGGATCAGGGACAGGATGAA
+	Liposthenes_gle CCAATTATAGTAGGAGGATTTGGAAATTATTTAATTCCATTAATATTATCAGTACCTGATATAGCTTTCCCTCGTTTAAATAATTTAAGATATTGAATATTAGTCCCTGCATTATTATTATTATCATCAAGAATGTTTATTGATCAAGGGGCGGGTACAGGTTGAA
+	Liposthenes_ker CCTATTATAGTTGGAGGTTTTGGAAACTATTTAATTCCATTAATAATAACGGCCCCTGATATAGCTTTCCCTCGATTAAATAATATAAGATACTGAATATTAATCCCAGCCTTATTATTATTAATTTCAAGAATATTTATTGATGAAGGTGCTGGAACTGGATGAA
+	Antistrophus    CCAATTATAGTAGGGGGATTTGGTAATTATTTAATTCCTTTAATATTATCAGCTCCTGATATAGCTTTCCCACGTTTAAATAATATAAGATTTTGATTATTAATTCCTTCTATATTATTAATATTATCAAGAATTTTTATTGATAGAGGAGCAGGGACTGGATGAA
+	Rhodus          CCAATTATAGTAGGAGGATTTGGTAATTATTTAACTCCTCTAATATTATCCTCACCAGACATAGCTTTCCCTCGATTAAATAATATAAGATTCTGATTATTAATCCCAGCATTATTATTATTATTATCTAGAATACTTATTGATCAAGGGGCTGGAACAGGATGAA
+	Hedickiana      CCTATTATAGTTGGTGGATTTGGCAATTATTTAATTCCTTTAATAATTTCAGCTCCTGATATAGCTTTCCCTCGATTAAATAATTTAAGATATTGGTTACTTGCCCCAGCTTTATTATTATTATTATCAAATTTATTTATTGATCAGGGGGCTGGGACTGGATGAA
+	Neaylax         CCTATTATAGTAGGGGGGTTTGGAAATTATTTAATTCCTTTAATATTAACAGCCCCAGATATAGCTTTCCCACGATTAAATAATATAAGATATTGATTACTACCCCCAGCATTATTTTTATTACTTTCTAGTATATTTATTGATCAAGGGGCAGGGACAGGATGAA
+	Isocolus        CCAATTATAGTTGGAGGATTTGGGAATTATTTAGTTCCTTTAATGTTAACTGCCCCAGATATAGCATTCCCTCGATTAAATAATATAAGATATTGGCTTTTAATCCCTTCTTTATTATTAATAATAACAAGAATATTTATTGACCAAGGAGGGGGTACTGGATGAA
+	Aulacidea       CCAATTATAGTAGGTGGATTTGGTAATTATTTAATTCCTTTAATATTGACAGCACCTGATATGGCATTTCCACGATTAAATAATATAAGATACTGATTATTACTTCCAGCTTTATTATTAATAATAACTAGGATATTTATTGATCAAGGGGCCGGTACTGGGTGGA
+	Panteliella     CCAATTATAGTTGGTGGGTTTGTAAATTATTTAGTTCCATTAATGTTATCAGCCCCTGATATAGCTTTCCCTCGTTTAAATAACATAAGATATTGATTATTAATCCCTTCATTATTACTATTGTTATCTAGAATTTTTATTGATCAGAGGGCAGGGACGGGGTGAA
+	Barbotinia      CCTCTTATATTAGGAGGGTTTGGTAATTATTTAATTCCATTAATATTATCAGCTCCTGATATAGCTTTCCCTCGATTAAATAATATAAGATATTGATTATTAATCCCACCATTATTATTATTATTATCAAGAATATTAGTAGATCAAGGGGCAGGGACAGGATGAA
+	Aylax           CCTATTATAGTTAGAGGATTTGGTAATTATTTAGTACCTTTAATATTAACAGCTCCTGATATAGCTTTCCCTCGATTAAATAATATAAGATATTGATTATTAATCCCCTCTATATTATTATTATTATCAAGATTATTTATTGATGAAGGGGCAGGGACAGGATGAA
+	Iraella         CCAATTATAGTTGGAGGATTTGGAAATTATTTAATTCCTTTAATACTAACAGCACCTGACATAGCTTTTCCACGATTAAATAATATAAGATATTGATTATTAATTCCTTCTTTATTATTATTATTATTAAGAATATTTGTTGATCAGGGAGCTGGAACAGGTTGAA
+	Timaspis        CCAATTATAGTAGGAGGATTTGGTAATTATTTAATTCCTTCAATATTAAGAATTCCCGATATAGCTTTCCCTCGAATAAATAATATAAGTTATTGGTTATTAATCCCTTCTTTATTTTTATTATTATCAGGGATATTTATTGATCAAGGGGCTGGAACAGGATGAA
+	Phanacis_1      CCAATTATAGTTGGAGGATTTGGGAATTATTTAGTCCCTTTAATATTAAGAGTTCCTGATATAGCTTTCCCTCGAATAAATAATATAAGATATTGATTATTAATCCCAGCTTTATTATTATTATTATCTAGAATAGTAGTTGATCAAGGGGCTGGGACAGGATGAA
+	Phanacis_2      CCTATTATAGTAGGGGGGTTTGGGAATTATTTAATTCCATTAATATTAAGAATTCCTGATATAGCATTTCCTCGAATAAATAATATAAGATATTGATTATTAATCCCTTCATTAATGTTATTATTATCTAGGATAATTGTTGATCAAGGGGCTGGGACAGGATGAA
+	Eschatocerus    CCTATTATAATTGGAGGATTTGGTAATTATTTAATTCCTTTAATACTTGGGGTTCCAGATATATGCTTTCCACGATTAAATAATTTAAGATTTTGGTTACTTCTACCTTCTTTAGGTTTATTATTAAGAAGAATGCTTTTAGATTCTGGTGCGGGTACAGGATGAA
+	Diplolepis      CCTTTAATATTAGGGGGATTTGGTAATTATTTAATTCCATTAATATTATCTTCTCCAGATATATCTTTTCCTCGATTAAATAATATAAGATTTTGATTATTAGTTCCTTCTTTTATTTTGTTAATTATAAGTATATTTATTGATCAAGGAGCAGGTACAGGGTGAA
+	Pediaspis       CCTATTATATTAGGAGGATTTGGTAATTATTTAATTCCTTTAATATTAATAAGACCAGATATATCTTTTCCTCGATTAAATAATTTAAGATTTTGATTATTAATTCCTTCTTTAATTTTATTAACATCAAGAATATTTATTGATCAAGGAGCTGGAACTGGTTGAA
+	Plagiotrochus   CCAATTATAGTTGGAGGATTTGGTAATTATTTAATTCCTCTAATATTAATTGCTCCGGATATAGCATTCCCTCGTTTAAATAATATAAGATATTGATTATTAACTCCTGCTCTATTACTATTAATATCAAGAATATTTATTGATCAAGGAGCAGGAACAGGATGAA
+	Andricus        CCAATTATAGTTGGGGGGTTTGGAAATTATTTAGTTCCATTAATATTAACTGCTCCTGATATAGCTTTTCCTCGATTAAATAATATAAGATATTGACTTTTAATTCCTTCTTTATTTTTATTATTAGCAGGGATATTAGTTGATCAAGGGGCTGGAACAGGATGAA
+	Neuroterus      CCTATTATAGTAGGAGGGTTTGGTAATTATTTAGTTCCTTTAATATTAGCTGCTCCAGATATAGCTTTTCCTCGATTAAATAACATAAGATATTGATTATTAATCCCTTCATTATTATTATTATTAGCCGGAATATTAGTGGACCAAGGGGCAGGAACAGGATGAA
+	Biorhiza        CCTATTATAGTTGGAGGATTTGGAAACTATTTAGTGCCTTTAATGTTAGTAATTCCTGATATATCTTTCCCTCGATTAAATAATATAAGATATTGACTTTTAATTCCTTCATTATTTTTATTATTATCTGGTATATTAGTTGATCAGGGAGCTGGAACAGGATGAA
+	Parnips         CCTATTATAGTAGGAGGGTTTGGAAATTATTTAGTTCCATTAATATTATCTGCCCCTGATATGGCTTTTCCTCGATTAAATAATATAAGATATTGATTATTAATCCCTTCTTTAATTTTATTAATAATAGGTATATTTGTTGATCAAGGAGCTGGGACTGGGTGAA
+	Paramblynotus   CCAATTATAGTTGGAGGGTTTGGAAATTATTTAATTCCAATTATATTAATTTTACCTGATATATCATATCCACGTTTAAATAATATAAGATATTGATTATTACCCCCTTCTTTATTTTTATTAATTTCAAGAATAATAATTGATCAAGGAGCAGGAACTGGATGAA
+	Ibalia          CCTATTATAGTAGGGGGATTTGGAAATTATTTAATTCCTTTAATATTAGCAATACCAGATATGGCTTTCCCTCGTTTAAATAATATAAGATTTTGGTTATTAATTCCTGCCCTAATATTTTTAATATCTGGAATATTCATTGATCAGGGAGCAGGGACGGGATGAA
+
+	Synergus        CAGTTTATCCACCTTTATCTTCAAATTTAGGACATCCAGGAATTTCAGTAGATTTAGCTATTTATTCATTACATATATCAGGAATTTCATCAATTTTAGGTTCAATTAATTTTATTACCACAATTTTAAATATACGTCCTAATTTTATAATAATAGATAAAATTTC
+	Periclistus     CTGTTTATCCTCCTTTATCCTCAAATTTAGGTCATAATACAATTTGTGTAGATTTAATTATTTTTTCATTACATTTGACTGGTATTTCTTCAATTTTAGGAGGGATTAATTTTATCACTACAATTTTAAATATACGACCAAATTTAATATCTATAGATAAAATTAC
+	Ceroptres       CAGTGTATCCCCCTTTATCTTCTAGGTTAGGGCATTCAGGGTTATCTGTAGATTTAACTATTTATTCATTACATTTAAGAGGAATTTCTTCTATTTTAGGATCCATTAATTTTATTTCTTCTATTATAAATATACGCCCTAAATTAATATTAATAGATAAAATTTC
+	Synophromorpha  CTGTGTATCCTCCTTTATCTTCAAATTTAGGTCATAATGGAATATCAGTTGATTTAGTAATTTTTTCTTTACATTTAAGAGGTATTTCTTCAATTTTAGGTTCAATTAATATTATTACTACAATTTTAAATATACGACCTTATTTAATATGTATAGATAAAATTAC
+	Xestophanes     CTATTTATCCTCCTTTATCTTCAAATTTAGGACATAATGGTATTTCAGTTGATTTAGTAATTTTTTCTTTACATTTAAGAGGAATTTCATCAATTATAGGATCAATTAATATTATTACTACAATTTTAAATATACGACCATATTTAATATATATAGATAAAATTAC
+	Diastrophus     CTGTTTATCCCCCTTTATCTTCAACTTTAGGACATAATGGTATTTCAGTAGATTTAGTAATTTATTCATTACATTTAAGAGGCATTTCATCTATTATAGGGTCAATTAATATTATTACAACAATTTTAAATATACGACCATATTTATTATCTATAGATAAAATTAG
+	Gonaspis        CGGTTTATCCTCCTTTATCTTCAATTTTGGGTCATAATGGTATTTCTGTTGATTTAGTAATTTATTCTTTACATTTAAGAGGAGTTTCTTCTATTTTAGGATCTATTAATATTATCACAACAATTTTAAATATACGTCCATATTTATTAAGAATAGATAAAATTAG
+	Liposthenes_gle CAGTATATCCCCCATTGTCATCTAATTTAGGCCATGCAGGGATATCAGTAGATTTAACTATTTATTCTTTACATATAAGAGGAATTTCTTCAATTTTAGGGTCAATTAATTTTATTACAACAATTTTAAATTTACGACCAAATATAGTTAGAATAGATAAAATTTC
+	Liposthenes_ker CAGTTTACCCACCTTTATCATCTTTATTAAGACATAGAGGAATCTCCGTAGATTTAACAATTTATTCCCTTCATATAAGAGGAATTTCATCAATTTTAGGATCAATTAATTTTATCTCAACTATCTTAAACATACGACCCAATAATTTGTCAATAGATAAAATTTC
+	Antistrophus    CAATTTACCCCCCACTTTCTTCATTAAATGGTCATTCAGGTATTTCTGTAGATTTAACTATTTATTCATTACATATAAGAGGAATTTCATCAATTTTAGGTTCAATTAATTTTATTACAACAATTTTAAATATACGACCTAATTTAATGTCTATAGATAAAATTAC
+	Rhodus          CAATTTACCCCCCATTATCTTCAACCATAGGCCATAATAGAATCTCTATAGATTTAGTTATTTACTCTCTTCATATAAGTGGAATTTCCTCTATTTTAAGATCTATCAATTTTATTACAACTATTTTAAATATACGCCCCCCTATAATCAGAATAGATAAATTATC
+	Hedickiana      CAGTTTATCCTCCATTATCTTCTTCTATTGGACATGAAGGAATTTCAGTAGATTTAATTATTTATGCATTACATTTAAGAGGGATCTCTTCAATTTTAGGGTCAATTAATTTTATTACCACTATTTTAAATATACGACCTGAAAAAGTTTCTATAGATAAAATTTC
+	Neaylax         CAATTTATCCTCCTTTATCTTCAAGATTAGGCCATATAGGGGTTTCTGTTGATTTAGTGATTTACTCTTTACACTTAAGAGGAGTATCTTCAATTTTAGGGTCAATTAATTTCATTACTACAATTTTAAACATACGCCCAAATATAATTACTATAGATAAAATTTC
+	Isocolus        CAGTTTACCCCCCTTTATCTTCAAATATTGGGCATTTAGGAGTTTCAGTAGATTTAATTATTTATTCATTACATATAAGAGGGGTTTCTTCAATTTTAGGGTCAATTAATTTTATTACAACTATTTTAAATATGCGACCTAATAATTTATCAATAGATAAAATTTC
+	Aulacidea       CAGTTTATCCACCCTTATCTTCAAATATAGGTCATTCTGGAATTTCAGTTGATCTTGTTATTTATTCATTACACATAAGAGGTATTTCTTCAATTTTAGGGTCCATTAATTTTATTACCACTATTTTAAATATACGACCAAATATATTATCTATAGATAAGATTTC
+	Panteliella     CAGTCTACCCTCCATTATCATCAAATTTAGGGCATAGAGGAATATCAGTTGACCTAACAATTTATTCATTACATATAAGAGGGGTATCGTCAATTTTACGATCAATTAATTTTATTACTACAATTTTAAATATGCGTCCTTTATACATATCAATAGATAAAATTTC
+	Barbotinia      CGGTTTATCCTCCTTTATCTTCAAATATTGGGCATCCAGGAATTTCAGTAGATTTAACAATTTACTCTTTACATTTAACAGGAATTTCATCGATTTTAGGATCAATTAATTTTATTACAACAATTTTAAATATACGACCAGAAATATTAACTATAGATAAGATTTC
+	Aylax           CAGTTTATCCTCCTTTATCTACAGAAGTTAGACATTCAGGTATATCTGTTGATTTAATTATTTATTCTTTACATTTAAGAGGAATTTCTTCTATTTTAGGTTCTATTAATTTTATTACAACAATTTTAAATATACGTCCAAATATATTAACAATAGATAAAATTCC
+	Iraella         CAGTTTATCCTCCTTTATCTTCAAATATAGGTCATCCAGGGATCTCTGTAGATCTTACAATTTATTCTTTACATTTAAGAGGGAYTTCTTCAATTTTAGGGTCAATTAACTTTATTACAACTATTTTAAATATACGACCTTATATAGTTACTATAGATAAAATTTC
+	Timaspis        CTGTATATCCTCCTTTATCTTCAAATATAGGTCATTTAGGTTTATCAGTAGATTTAACTATTTATTCTTTACATATAAGAGGGGTATCTTCAATTTTAGGGTCTATTAATTTTATTACAACAATTTTAAATATACGACCTTTAATAATATCAATAGATAAAATTTC
+	Phanacis_1      CTGTGTATCCACCTTTATCTTCAAATATTGGTCATTTAGGTATTTCAGTAGATTTAACAATTTATTCATTACATATAAGAGGAATTTCATCAATTTTAGGATCAATTAATTTTATTACTACAATTTTAAATATACGACCTTTAAAAATAATAATAGATAAAGTTAC
+	Phanacis_2      CTGTTTATCCTCCTTTATCTTCTAATATAGGGCATTTAGGAATATCAGTTGATTTAACTATTTACTCTTTACATATAAGGGGGGTTTCTTCTATTTTAGGATCAATTAATTTTATTACTACTATTTTAAATATACGACCCATAAAAATAACTATAGATAAAATTGC
+	Eschatocerus    CAGTTTATCCTCCTTTATCTTCTCTTATTGGACATCCTGGAGTATCTGTTGATTTTGCAATTTTTTCTTTACATTTAAGGGGAGCATCCTCTATTTTAGGATCTATTAACTTTATTTCCACAATTATTAATATACGGACAATGAAATTTTCAATAGATAAAATTTC
+	Diplolepis      CTGTTTATCCTCCATTATCATTAAATATTGGGCATGAAGGGGTTTCTGTTGATTTAGTAATTTTTTCATTACATTTAAGTGGGATTTCATCAATTTTAGGTTCAATTAATTTTATTACTACAATTTTAAATATACGTCCTGTAATAATAAGAATAGAAAAAATTAC
+	Pediaspis       CTATTTACCCTCCTTTATCTTCAAATATAGGTCATATAGGAATTTCTATGGATTTAATTATTTTTTCTTTACATATAAGTGGAATATCTTCAATTTTAGGTTCAATTAATTTTATTACTACTATTTTAAATATACGTCCATTAAATTTAACTATAGATAAAATTTC
+	Plagiotrochus   CCATTTACCCCCCATTATCATCCAATTTAGGACATTCAGGAATTTCAGTNGATTTGACTATTTATTCTCTTCATATAAGAGGAATTTCTTCAATTTTAGGATCAATTAATTTCATTACAACAATTTTAAATATACGCCCTTATTTAATATCTATAGATAAAATTCC
+	Andricus        CTGTTTATCCTCCTTTATCTTCAAATTTAGGACACCCAGGAATTTCTGTTGATTTAACTATTTATTCTTTACATTTAACTGGGATTTCCTCAATTTTAGGTTCAATTAATTTTATTACAACAATTTTAAATATACGACCTAATTTAATAGATATAGATAAAATCCC
+	Neuroterus      CTGTTTATCCTCCTTTATCCTCAAATTTAGGGCATCCAGGTATCTCTGTAGACTTAACTATTTATTCTTTACATTTAACAGGAATTTCTTCAATTTTAGGTTCAATTAATTTTATTACTACAATTTTAAATATACGTCCTAATTTAATAGAAATAGATAAAATTCC
+	Biorhiza        CTGTTTACCCTCCTTTATCTTCAAATTTAGGACATTCAGGAATTTCTGTTGATTTAACAATTTATTCTTTACATTTAACTGGAATTTCTTCAATTTTAGGATCAATTAATTTTATTACTACAATTTTAAATATACGATCTAATTTAATAACAATAGATAAAATTCC
+	Parnips         CTGTTTACCCTCCTTTATCAGCAAATTTAGGTCATCCAGGAGTTTCAGTTGATTTAACTATTTTTTCTTTACATTTAAGTGGAATTTCATCTATTTTAGGATCAATTAATTTTATTTCAACTATTTTAAATATACGACCTAATTATGTATCTATAGATAAAATTTC
+	Paramblynotus   CTGTTTATCCTCCTCTTTCATCAAATTTAGGTCATAGAGGAATTTCTGTAGATTTAACAATTTTTTCTTTACATTTAAGTGGTGTATCTTCAATTTTAGGATCAATTAATTTTATTACTACAATTTTAAATATACGATTAAATAATATAAGTATAGATAAAATTAC
+	Ibalia          CAGTTTATCCTCCTTTATCTTCTTATTTAGGCCACCCTAGGATTTCAGTTGATTTAACTATTTTTTCTTTACATTTAAGGGGAGTTTCTTCTATTTTAGGTTCTATTAATTTTATTACAACTATTTTAAATATACGA------ATTATAATAATAGATAAAATTAC
+
+	Synergus        ACTATTTATTTGATCAATTTTACTAACTACAATCTTATTATTATTATCATTACCTGTTCTAGCTGGAGGAATTACAATATTATTATTCGATCGTAATATAAACACATCATTTTTTGACCCTATAGGAGGAGGAGACCCTATCTTATATCAACACTTATTTTGATTT
+	Periclistus     TTTATTTGTTTGATCTATTTTTTTAACAGTAATTTTATTAGTAGTTTCTCTCCCAGTATTAGCTGGTGGTATTACAATATTATTATTTGATCGAAATATAAATACTTCTTTTTTTGATCCATTAGGAGGTGGAGATCCTATTTTATATCAACATTTATTTTGATTT
+	Ceroptres       TTTATTTATTTGATCAATTTTATTAACTACTATTTTATTATTATTATCTTTACCTGTTTTAGCTGGAGGAATTACAATATTATTATTTGATCGAAATATAAATACTTCATTTTTTGATCCTATAGGAGGAGGTGACCCAATTTTATATCAACATTTATTTTGATTT
+	Synophromorpha  TTTATTTATTTGATCTTTTATTTTAACAACAATTTTATTATTATTATCATTACCTGTATTAGCAGGAGGAATTACAATATTATTATTTGATCGAAATATAAATTCTTCTTTTTTTGATCCATTAGGAGGTGGTGATCCTATTCTTTATCAACATTTATTTTGATTT
+	Xestophanes     TTTATTTATTTGATCTTTATTTTTAACTACAATTTTATTATTATTATCATTACCTGTATTAGCTGGGGGAATTACAATATTATTATTTGATCGAAATATAAATTCTTCTTTTTTTGATCCATTAGGAGGAGGAGACCCTATTCTTTATCAACATTTATTTTGATTT
+	Diastrophus     TTTATTTACTTGATCTATCTTTTTAACTACTATTTTATTATTATTATCTTTACCAGTGTTAGCCGGAGGAATTACTATATTATTAATAGATCGAAATATAAATTCTTCTTTTTTTGACCCTTTAGGAGGAGGGGATCCTATTCTTTATCAACATTTATTTTGATTT
+	Gonaspis        GTTATTTATTTGATCTATTTTATTAACAACTATTTTATTATTATTATCTTTACCAGTTTTAGCAGGAGGAATTACTATATTATTAATAGATCGAAATATAAATTCTTCTTTTTTCGATCCGTTAGGTGGAGGAGATCCTATTCTTTATCAACATTTATTTTGATTT
+	Liposthenes_gle TTTATTTATATGATCAATTTTTTTAACTACTATTTTACTTTTATTATCTTTACCAGTGTTAGCGGGAGGAATTACAATATTATTATTTGACCGAAATTTAAATACTTCGTTTTTTGACCCCTTAGGAGGAGGAGACCCTATTTTATATCAACATTTATTTTGATTT
+	Liposthenes_ker TTTATTTTCCTGATCAATTTTACTAACGACAACTTTATTATTATTATCATTGCCAGTATTAGCAGGAGGAATTACAATACTTCTTTTTGACCGTAATATAAATACTTCTTTTTTTGACCCTATAGGAGGAGGAGACCCAATTTTATATCAACATCTATTTTGATTC
+	Antistrophus    ATTATTTTCTTGATCAATTATATTAACAACTATTTTATTATTATTATCTTTACCAGTTTTAGCTGGAGGAATTACAATATTACTCTTTGATCGAAATATAAATACATCTTTTTTTGATCCTTTAGGGGGAGGAGATCCAATTTTATATCAACATTTATTTTGATTT
+	Rhodus          ATTATTTTTATGGTCCATTTTATTAACTACTATTTTATTATTACTTTCCTTACCCGTCTTAGCTGGTGGAATTACAATATTACTTTTTGATCGAAATTTTAATACCTCCTTTTTTGACCCTATAGGAGGTGGAGACCCAATCTTATTCCAACATTTATTTTGATTC
+	Hedickiana      ATTATTTTCATGATCTATTTTATTAACAACAATTTTACTTTTACTTTCTTTACCTGTATTAGCAGGAGGTATTACAATATTACTTTTTGATCGTAATTTAAATACATCTTTTTTTGACCCAATAGGAGGGGGGGATCCAATTTTATACCAACATTTATTTTGATTT
+	Neaylax         TTTATTTCTATGATCAATTTTTTTAACTACAATTTTACTATTACTTTCATTACCTGTATTAGCCGGGGGGATTACAATATTATTATTTGATCGAAACTTAAACACATCTTTCTTTGACCCAATAGGAGGAGGAGACCCTATTTTATTCCAGCATTTATTTTGATTT
+	Isocolus        TTTATTTATTTGATCAATTTTATTAACAACAATTTTATTATTATTATCTTTACCTGTGTTAGCTGGAGGAATTACTATATTATTATTTGACCGAAATTTAAATACTTCTTTTTTTGACCCTATAGGAGGAGGAGACCCAATTTTATACCAACATTTATTTTGATTT
+	Aulacidea       ATTATTTATATGGTCAATTTCTTTAACAACAATTTTATTATTATTATCATTGCCTGTATTAGCTGGAGGAATTACAATATTATTATTTGATCGAAATATAAATACTTCATTTTTTGACCCTATAGGAGGAGGAGACCCTGTGTTATATCAACATTTATTTTGATTT
+	Panteliella     ATTATTCATGTGAACTATTCTATTAACTACTATTTTATTATTATTATCTTTACCTGTTTTAGCTGGAGGAATTACAATATTATTATTTGATCGTAATTTAAATACCTCATTTTTTGATCCTGTAGGCGGGGGAGAGCCAGTATTATACCAACATTTATTTTGATTT
+	Barbotinia      TTTATTTATTTGATCAATTTTTTTAACAACTATTTTACTATTACTTTCTTTACCTGTTTTAGCTGGAGGAATTACAATATTATTATTTGATCGTAATATAAATACTTCATTTTTTGATCCAATAGGAGGGGGTGACCCAATTTTATATCAACATTTATTTTGATTT
+	Aylax           TTTATTTATTTGATCTATTTTTTGAACAACAATTTTATTATTATTATCTTTACCAGTTTTAGCTGGGGGAATTACAATATTATTATTTGATCGGAATATAAATACATCTTTTTTTGACCCTATAGGGGGAGGAGATCCAATTTTATATCAACATTTATTTTGATTT
+	Iraella         TTTATTTATTTGATCAATTTTTTTAACAACAATTTTATTATTATTATCTTTACCAGTATTAGCAGGTGGAATTACAATATTATTATTTGATCGTAATATAAATACTTCATTTTTTGACCCAATAGGAGGAGGAGATCCAGTATTATATCAACATTTATTTTGATTT
+	Timaspis        TTTATTTGTATGATTTATTTTTTTAACAACTATTTTATTACTATTATCTTTACCTGTTTTAGCAGGAGGGATTACAATATTATTATTTGATCGAAATTTAAATACTTCTTTTTTTGACCCTATAGGAGGAGGAGATCCTGTATTATATCAACATTTATTTTGATTT
+	Phanacis_1      TTTATTTGTTTGATCAATTTTTTCAACAACTATTTTATTATTATTATCTTTACCAGTTCTTGCTGGAGGTATTACTATATTATTATTTGATCGAAATTTAAATACTTCATTTTTTGACCCTATAGGAGGAGGAGACCCAGTATTATACCAACATTTATTTTGATTT
+	Phanacis_2      TTTATTTGTTTGATCGATTTTTTTAACAACAATTTTACTATTATTATCTTTACCTGTATTAGCGGGAGGAATTACAATATTATTATTTGATCGAAATTTAAATACATCTTTTTTTGACCCTATAGGAGGGGGGGACCCTGTATTATACCAACATTTATTTTGATTT
+	Eschatocerus    TTTGTTTGTTTGATCTATTTTATTAACTACTATTTTATTATTATTATCTTTACCTGTATTAGCAGGAGGAATTACAATACTTTTATTTGATCGAAATCTAAATACTTCTTTCTTTGACCCTATTGGAGGTGGGGACCCCATTTTATATCAACATTTATTTTGATTT
+	Diplolepis      TTTATTTTCTTGATCAATTTTATTAACTACTATTTTATTATTATTGTCTTTACCTGTTTTAGCTGGGGGTATTACTATATTATTATTTGATCATAATTTAAATACTTCTTTCTTTGATCCTATAGGGGGCGGGGATCCAGTTTTATATCAACATTTATTTTGATTT
+	Pediaspis       ATTATTTACATGATCAATTTTATTAACAACAATTTTATTATTATTATCATTACCTGTTTTAGCTGGAGGAATTACAATATTATTATTTGATCGTAATTTAAATACTACTTTTTTTGATCCTATAGGAGGCGGAGATCCAATTTTATTTCAACATTTATTTTGATTT
+	Plagiotrochus   TCTTTTTGTATGATCAATTTTTTTAACTACAATTTTATTATTATTATCATTACCAGTATTAGCAGGTGCAATTACTATGTTACTTTTTGATCGAAATATAAATACTTCTTTTTTTGACCCAACTGGAGGAGGAGATCCTATCTTATATCAACATTTATTTTGATTT
+	Andricus        TTTATTTGTTTGATCAATTTTTTTAACAACTATTTTATTATTATTATCTTTACCTATTTTAGCTGGTGCAATTACTATATTATTATTTGATCGTAATATAAATACTTCATTTTTTGATCCTATAGGAGGAGGGGATCCAATTTTATACCAACATTTATTTTGATTT
+	Neuroterus      TTTATTTGTTTGATCTATTTTTTTAACTACAATTTTATTACTTTTATCTTTACCAATTTTAGCAGGAGCAATTACAATATTATTATTTGATCGAAATATAAATACCTCATTTTTTGATCCTATAGGAGGGGGGGATCCTATTTTATATCAACATTTATTTTGATTT
+	Biorhiza        TTTATTTGTATGATCAATTTTTTTAACTACAATTTTATTATTATTATCTTTACCAATTTTAGCCGGAGCAATTACAATATTATTATTTGATCGTAATATAAATACTTCTTTTTTTGACCCTATAGGAGGAGGAGACCCAATTTTATATCAACATTTATTTTGATTT
+	Parnips         TTTATTTATTTGATCTATTTTATTAACAACTATTTTACTTTTATTGTCATTACCTGTATTGGCTGGAGGGATTACTATATTATTGTTTGATCGGAATTTAAATACTTCATTTTTTGATCCTTTAGGAGGTGGGGACCCTGTTTTATATCAACATTTATTTTGATTT
+	Paramblynotus   ATTATTTATTTGATCTATTTATTTAACAACAATTTTATTATTATTATCTTTACCAGTTTTAGCAGGAGGAATTACAATATTATTATTTGATCGTAATTTAAATACTTCATTTTTTGATCCAATAGGTGGAGGAGATCCAATTCTTTACCAACATTTATTTTGGTTT
+	Ibalia          TTTATTTATTTGATCTATTTTATTGACTACAATTTTATTATTATTATCTTTACCTGTATTAGCAGGAGGAATTACAATATTATTGTTTGATCGTAATTTAAATACTTCATTTTTTGACCCCATAGGGGGAGGGGACCCTATTTTATACCAACATTTATTTTGATTT
+
+	Synergus        TTTGGTCACCCCGAAGTATATATTTTAATTTTACCAGGTTTTGGAATAATTTCACATATAATTTACATAGAATCAGGAAAAAAAATAACTTTTGGATCTTTAGGAATAATATATGCAATAATTTCAATTGGAATTTTAGGATTTATTGTATGAGGGCATCATATAT
+	Periclistus     TTTGGTCATCCTGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAGTATCTCATATAATTTATACTGAGTGTGGTAAAAAAGGTACTTTTGGATCTTTAGGAATAATATATGCAATAATTTCAATTGGATTATTAGGATTTGTTGTTTGAGGGCATCATATAT
+	Ceroptres       TTTGGACATCCTGAAGTTTATATTTTAATTTTACCAGGATTTGGAATAATTTCTCATATAATTTATTTAGAAACTGGAAAAAAAATTACTTTTGGATCTTTAGGAATAATTTATGCAATAATTTCTATTGGAATGTTAGGTTTTATTGTATGAGGACATCATATAT
+	Synophromorpha  TTTGGTCATCCTGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAATTTCTCATATAATTTGTGTAGAATGTGGAAAAAAAAATACTTTTGGTTCATTAGGAATAATATATGCTATAATTTCTATTGGTATATTAGGATTTATTGTTTGAGGACATCATATAT
+	Xestophanes     TTTGGTCATCCTGAAGTTTATATTTTAATTTTACCGGGATTTGGTATAATTTCTCATATAATTTTTATAGAATGTGGAAAAAAAAATACTTTTGGTTCTTTAGGAATAATTTATGCTATAATTTCTATTGGAATATTAGGATTTATTGTTTGAGGGCATCATATAT
+	Diastrophus     TTTGGACACCCTGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAATTTCTCATATAATTTATACAGAATGTGGAAAAAAAATTACTTTTGGTTCTTTAGGAATAATATATGCAATAATTTCTATTGGAATATTAGGATTTATTGTATGAGGACATCATATAT
+	Gonaspis        TTTGGTCATCCTGAAGTTTATATTTTAATTTTACCAGGATTTGGAATAATTTCTCATATAATTTATACAGAATGTGGAAAAAAAATTACTTTTGGATCTTTAGGTATAATATATGCTATAATTTCTATTGGAATATTAGGATTTATTGTTTGAGGTCATCATATAT
+	Liposthenes_gle TTTGGTCATCCTGAAGTTTATATTTTAATTTTGCCCGGATTTGGAATAATTTCTCATATAATTTATTTAGAATGTGGGAAAAAAATTACATTTGGGTCTTTAGGTATAATATATGCAATAATTTCAATTGGAATATTAGGATTTATTGTATGGGGTCATCATATAT
+	Liposthenes_ker TTTGGTCATCCTGAAGTTTATATTTTAATTCTTCCAGGATTTGGAATAGTCTCTCACTTAATTTATTCTGAATGTGGAAAAAAAAACACTTTTGGATCCTTAGGGATAACATATGCTATAATCTCTATTGGATTATTAGGATTTATTGTCTGAGGACATCATATAT
+	Antistrophus    TTTGGTCACCCAGAAGTTTATATTTTAATTTTACCAGGATTTGGAATAATTTCCCATATAATTTATTCAGAATGTGGTAAAAAAACAACATTTGGTGTATTAGGAATAATTTATGCTTTAATTTCAATTGGTATATTAGGATTTATTGTATGAGGACATCATATAT
+	Rhodus          TTTGGTCACCCTGAAGTCTATATCTTAATTTTACCTGGATTTGGTATAATCTCTCATATAATTTATATAGAATGTGGAAAACCCACAACCTTTGGTTCATTAGGTATAATATACGCAATAATTTCAATTGGAATATTAGGATTTATCGTATGAGGACATCATATAT
+	Hedickiana      TTTGGTCACCCAGAAGTTTATATTTTAATTCTTCCAGGATTTGGAATAATTTCTCATATAATTTATTCAGAATGTGGTAAAAAAACAACATTTGGTTCATTAGGGATATTATATGCAATAATTTCTATTGGAATATTAGGTTTTATTGTTTGAGGCCATCATATAT
+	Neaylax         TTTGGTCATCCAGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAATTTCTCATATAATTTTTTTAGAGTGTGGGAAAAAAACAACATTTGGGTCATTAGGAATAATATACGCCATAATTTCAATTGGAATACTAGGATTTATTGTATGAGGCCATCATATAT
+	Isocolus        TTTGGTCACCCAGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAATTTCTCATATAATTTATAGTGAGTGTGGGAAAAAAACTACATTTGGATCTTTAGGAATAATATATGCTATAATTTCAATTGGTGTTTTAGGGTTTCTTGTTTGAGGTCATCATATAT
+	Aulacidea       TTTGGTCATCCTGAGGTTTATATTTTAATTTTACCAGGATTTGGGATAATTTCACATATAATTTATATAGAATGTGGTAAAAGAATTACTTTTGGAGCTTTAGGGATAATATATGCAATAATTTCCATTGGAATATTAGGATTTATTGTTTGAGGCCATCACATAT
+	Panteliella     TTTTGTCACCCTGAAGTTTATATTCCAATTTTAGCTGGATTTGGGATAGTGTCTCATATAATTTATTTAGAATGTGGGGAAAAAATTACATTTGGGTCTTTAGGAATAATATACGCAATAATTTCAATTGGTATATTAGGTTTTATTGTATGAGGACATCATATAT
+	Barbotinia      TTTGGTCATCCTGAAGTTTATATTTTAATTTTACCTGGGTTTGGAATAATTTCTCATATAATTTATAGAGAATGTGGAAAAAAAACTACTTTTGGATCATTAGGTATAATATATGCAATAATTTCAATTGGTTTACTAGGATTTATTGTTTGAGGTCATCATATAT
+	Aylax           TTTGGTCATCCTGAAGTTTATATTTTAATTTTACCAGGATTTGGTATAATTTCTCATATAATTTATAGTGAAAGAGGAAAAAAAACTACTTTTGGATCTTTAGGAATAATTTATGCTATAATTTCAATTGGATTATTAGGATTTATTGTATGAGGGCATCATATAT
+	Iraella         TTTGGTCATCCTGAAGTATATATTTTAATTTTACCAGGATTTGGGATAATTTCTCATATAATTTATAATGAATGTGGGAAAAAAACTACTTTTGGATCTTTAGGAATAATATATGCAATAATTTCTATTGGAATATTAGGATTTATTGTTTGAGGTCATCATATGT
+	Timaspis        TTTGGCCATCCAGAAGTTTATATTTTAATTTTACCAGGATTTGGAATAATTTCACATATAATTTACACAGAATGTGGGAAAAAAATTACTTTTGGATCTTTAGGAATAATATATGCAATAATTTCTATTGGAATATTAGGGTTTATTGTATGAGGCCATCATATAT
+	Phanacis_1      TTTGGTCATCCAGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAATCTCTCATATAATTTATAATGAATGTGGTAAAAAAATTACTTTTGGATCATTAGGAATAATATACGCTATAATTTCAATTGGTATATTAGGATTTATTGTATGAGGTCACCATATAT
+	Phanacis_2      TTTGGGCATCCTGAAGTGTATATTTTAATTCTTCCAGGATTTGGGATAGTGTCTCATATAATTTTTACTGAATGTGGACAAAAAACTACTTTTGGATCATTAGGGATAATATATGCTATAATTTCAATTGGAATATTAGGATTTATTGTTTGAGGTCATCATATAT
+	Eschatocerus    TTTGGTCATCCTGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAATTTCTCATATAATTTTTACTGAATGTGGTAAAAAATCTACTTTTGGTTCTTTAGGAATATTATATGCTATAATTTCTATTGGAGCTTTAGGATTTATGGTTTGAGGTCATCATATAT
+	Diplolepis      TTTGGTCATCCAGAAGTTTATATTTTAATTTTGCCAGGATTTGGTATAATTTCTCATATAATTTATTCTGAATGTGGTAAAAAATTTACTTTTGGTTCATTAGGTATGATATATGCTATAATTTCAATTGGTATATTAGGGTTTATTGTATGAGGACATCATATAT
+	Pediaspis       TTTGGACACCCTGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAATTTCTCATATAATTACAAATGAATGTGGAAAAAAAACTACTTTTGGTTCTTTAGGAATAATATATGCTATAATTTCAATTGGTATATTAGGTTTTATTGTATGAGGACATCATATAT
+	Plagiotrochus   TTTGGTCATCCTGAAGTTTATATTTTAATTTTACCTGGGTTTGGAATAATTTCTCATATAATTTATTTGGAATGTGGAAAAAAAAATACTTTTGGATCATTAGGAATAATATATGCTATAAATTCAATTGGTATATTAGGATTTATTGTATGAGGTCATCATATAT
+	Andricus        TTTGGTCATCCAGAAGTTTATATTTTAATTTTACCTGCTTTTGGTATAATTTCTCATATAATTTATATAGAATGTGGGAAAAAAAATACTTTTGGTTCATTAGGAATAATATATGCTATAATTTCAATTGGTATATTAGGATTTATTGTTTGGGGTCATCATATAT
+	Neuroterus      TTTGGGCATCCAGAAGTTTATATTTTAATTTTACCAGCATTTGGTATAATTTCACATATAATTTATATAGAATGTGGAAAAAAAAATACTTTTGGGTCTTTAGGAATAATATATGCAATAATTTCAATTGGTATATTAGGATTTATTGTTTGAGGTCATCATATAT
+	Biorhiza        TTTGGGCACCCAGAAGTTTATATTTTAATTTTACCTGCTTTTGGAATAGTTTCTCATATAATTTATATAGAATGTGGAAAAAAAAATACTTTTGGATCTTTGGGAATAATATATGCAATAATTTCAATTGGTATATTAGGATTTATTGTTTGAGGACATCATATAT
+	Parnips         TTTGGTCATCCAGAAGTATATATTTTAATTTTACCAGGATTTGGTATAATTTCCCATATAATTTATACAGAATGTGGAAAAAAAACTACATTTGGATCTTTAGGAATAATATATGCTATAATTTCTATTGGAATATTAGGGTTTATTGTTTGAGGCCATCATATAT
+	Paramblynotus   TTTGGCCATCCAGAAGTTTACATTTTAATTTTATCAGGATTTGGTATAATTTCTCATATGATTTATACTGAATGTGGGAAAAAAAATACTTTTGGTTCATTAGGAATAATTTATGCAATAATTTCTATTGGTATGTTAGGATTTATTGTTTGAGGTCATCATATAT
+	Ibalia          TTTGGTCATCCAGAAGTTTATATTTTAATTTTACCTGGATTTGGAATAATTTCTCATATAATTTATACAGAATGTGGTAAAAAAAGAACTTTTGGGGCATTAAGAATAATATATGCAATAATTTCTATTGGGATATTAGGATTTATCGTATGAGGACATCATATAT
+
+	Synergus        TTACAGTAGGTATAGATGTAGATACTCGAGCTTATTACACATCTGCGACTATAATTATTGCTATCCCAACAGGTATTAAAATTTTTAGTTGATTAGCAACTATATATGGGTCAAAAATTAAATTTAATTTATCTATAATTTGATCTATAGGATTTATTTTTTTATT
+	Periclistus     TTACTATTGGTATAGATATTGACACGCGAGCTTATTATACTTCTGTAACAATAGTTATTGCTATTCCTACAGGAATAAAAATTTTTAGATGACTAGCAACAATATATGGTTCAAAAATTAATTGTAGGGTTCCTATATTTTGATCATTAGGTTTTATTTTTTTATT
+	Ceroptres       TTACAGTAGGAATAGATGTAGATACTCGAGCTTATTATACTTCAGCTACTATAATTATTGCAATTCCCACAGGAATCAAAATTTTTAGATGATTGGCTACAATATATGGATCAAAATTAGACATTAATATTTCAATAATATGATCTTTAGGATTTATTTTTTTATT
+	Synophromorpha  TTACTGTAGGAATAGATATTGATACACGAGCTTATTATACATCTGTAACTATAATTATTGCAATTCCYACGGGAATTAATATTTTTAGATGATTAGCTACAATATATGGATCAAAAATTAATTTTAATTTATCAATTATATGATCATTAGGTTTTATTTTTTTATT
+	Xestophanes     TTACTGTAGGAATAGATATTGATACACGAGCTTATTATACTTCTGTAACTATAATTATTGCAATTCCTACTGGAATTAAAATTTTTAGATGATTAGCTACAATATATGGATCAAAAATTAATTTTAATTTATCAATTAAATGATCATTAGGATTTATTTTTTTATT
+	Diastrophus     TTACTGTAGGGATAGATATTGATACACGAGCTTATTATACTTCAGTAACTATAATTATTGCTATTCCAACAGGAATTAAAATTTTTAGATGGTTAGCAACAATATATGGTACAAAAATTAATTTTAATCCTTCAATTATTTGATCATTAGGCTTTATTTTTTTATT
+	Gonaspis        TTACTGTAGGTATAGATATTGATACTCGAGCTTATTATACGTCAGTAACTATAATTATTGCAATTCCTACAGGGATTAAAATTTTTAGATGATTAGCTACTATATATGGATCAAAAATTAATTTTAATCCCTCAATTATTTGATCATTAGGCTTTATTTTTTTATT
+	Liposthenes_gle TTACTGTAGGAATAGATGTAGATACACGGGCATACTACACTTCAGCTACAATAATTATTGCAGTCCCTACAGGTATTAAAATTTTTAGATGATTGGCAACAATATATGGGTCAAGAATTAATTTAAATTTATCAATTATATGATCTTTAGGGTTTATTTTTTTATT
+	Liposthenes_ker TTACTGTAGGAATGGATGTCGACACCCGAGCTTATTATACTTCTGCAACTATAATTATTGCAATTCCACCAGGAATCAAAATTTTTAGATGATTAGCTACAATATATGGATCTAAAATTTACATAAATTTATCAATTTTATGATCCTTAGGATTTATTTTTCTATT
+	Antistrophus    TTACAGTTGGCATAGATGTAGATACACGAGCCTATTACACATCAGCAACTATAATTATTGCTATTCCTACAGGTATTAAAATTTTTAGTTGATTGGCAACAATATATGGAATAAAGATTAATTATAATTTATCAATAATTTGAGCTTTAGGATTTATCTTTTTATT
+	Rhodus          TTACTGTAGGAATAGATGTAGACACCCGAGCATATTACACATCCGCTACCATAATTATTGCAATTCCTACTGGAATTAAAATTTTTAGGTGATTAGCTACAATATACGGATCAAAAATTAATTTTAATTTATCCATTATATGATCCTTAGGATTTATTTTTTTATT
+	Hedickiana      TTACTGTGGGTATAGATGTAGATACACGAGCTTATTACACATCAGCAACTATAATTATTGCAGTTCCTACTGGTATTAAAGTATTTAGTTGATTGGCATCAATATATGGAGCAAAAGTTAATTTTAATTTATCAATTCTTTGATCATTAGGATTTATTTTTTTATT
+	Neaylax         TTACTGTTGGGATAGATGTTGATACACGTGCATATTATACTTCAGCAACAATAATTATTGCAATTCCTACTGGTATTAAAATTTTTAGATGATTAGCAACTATTTATGGAACAAAAATTAATTTTAATCCATCAATTATTTGATCTTTAGGGTTTATTTTTTTATT
+	Isocolus        TTACAGTAGGGATAGATGTAGATACACGAGCTTATTATACTTCAGTAACAATAATTATTGCAATCCCTACAAGTATTAAAATTTTTAGATGATTAGCTACTATACATGGTACAAAAATTAATTTTAACCTATCTATTTTATGATCTTTAGGATTTGTATTTTTATT
+	Aulacidea       TTACTGTAGGGATAGATGTTGATACACGAGCTTATTATACTTCAGCAACGATAGTAATTGCTATCCCTACAGGAATTAAAATTTTTAGGTGACTTGCAACTATATATGGATCTAAAATTAATTTTAATTTATCAATTATATGATCATTAGGTTTTATTTTTTTATT
+	Panteliella     TTACTGTTGGGATAGATGTAGATACACGAGCTTATTACACTTCAGCCACTATAATTATTGCAATTTCTACAGGAATTATAATTTTTAGATGATTAGCTACTATATATGGATCAAAGATTGATTTTAATTTATCTATATTATGATCTTTAGGATTTATTTTTTTATT
+	Barbotinia      TTACTGTTGGGATAGATGTAGATACACGAGCTTATTATACATCAGCAACAATGGTAATTGCTATTCCTACAGGAATTAAAATTTTTAGGTGATTAGCAACTATATATGGATCAAAAATTAATTTTAATTTATCAATAATTTGATCATTAGGATTTATTTTTTTATT
+	Aylax           TTACTGTTGGTATAGATGTAGATACTCGTGCTTATTATACTTCTGCTACAATAGTAATTGCTATCCCCACAGGAATTAAAATTTTTAGATGACTTGCTACTATATATGGATCAAAAATTGATTTTAATTTATCTATAATTTGATCATTAGGATTTATTTTTTTATT
+	Iraella         TTACTGTAGGAATAGATGTTGATACACGAGCTTATTACACTTCAGCAACAATAGTTATTGCAATTCCTACAGGTATTAAAATTTTTAGTTGATTAGCAACTATATATGGATCAAAAATTGATTTAAATTTATCAATAATTTGATCTTTAGGTTTCATTTTTTTATT
+	Timaspis        TTACTGTAGGCATAGATGTTGATACTCGAGCTTATTACACTTCTGCAACTATAATTATTGCTATTCCAACAGGTATTAAAATTTTTAGATGATTAGCAACAATATATGGATCAAAATTAAATTTTAGTTTATCTATAATTTGATCTTTAGGTTTTATTTTTTTATT
+	Phanacis_1      TTACTGTAGGGATAGATGTAGACACCCGAGCTTATTACACATCAGCTACAATAATTATTGCTATCCCTACTGGGATTAAAATTTTTAGTTGGTTAGCAACAATATATGGGGCTAAAGTAGATTTTAATTTATCAATAATATGAGCTTTAGGGTTTATTTTTTTATT
+	Phanacis_2      TTACTGTTGGAATAGATGTAGATACACGAGCTTATTACACTTCAGCAACAATAGTAATTGCTATCCCAACTGGTATTAAAATTTTTAGATGGTTAGCTACTATATATGGATCAAAAGTAGAATTTAACCCTTCAATTATATGGGCTTTAGGGTTTATTTTTTTATT
+	Eschatocerus    TTACAGTAGGTATAGATGTTGATACTCGAGCTTATTTTACTTCTGTAACTATAATTATTGCTATTCCTACTGGAATTAAAATTTTTAGATGATTAGCTACTATATATGGATCAAAAATAAAATTTAGATTACCTATATTATGATCTTTAGGATTTGTATTTTTATT
+	Diplolepis      TTACTGTTGGTATAGATATTGATACACGGGCTTATTATACATCAGTTACTATAATTATTGCTGTTCCTACAGGTATTAAAATTTTTAGGTGATTGGCTACTATATATGGAGCAAAAATTGATTATAATTTGGCTATAATTTGATCATTAGGATTTATTTTTTTATT
+	Pediaspis       TTACTGTAGGAATAGACATTGATACACGAGCTTATTATACATCAGCTACTATAATTATTGCAGTTCCAACAGGAATTAAAATTTTTAGATGATTAGCAACAATATATGGATCAAAAATTAAATTAAATATAATTATAATTTGATCTTTAGGTTTTATTTTTTTATT
+	Plagiotrochus   TAACTGTAGGCATAGATATTGATACACGAGCTTATTACACATCTGTAACTATAATTATTGCTATTCCTACAGGAATTAAAATTTTTAGATGATTAGCAACAATATATGGAACTAAAATAAATTTTAACTTATCAATTATATGAGCTCTAGGGTTTATCTTTTTATT
+	Andricus        TTACTGTAGGTATAGATATTGATACACGAGCTTATTATACATCAGTAACAATAATTATTGCTATTCCTACAGGAATTAAAATTTTTAGGTGGTTAGCAACTATATATGGATCAAAAATTAATTTTAATTTATCAATTATATGATCTTTAGGATTTATTTTTTTATT
+	Neuroterus      TTACTGTAGGAATAGATATTGACACACGAGCTTATTATACTTCAGTAACAATAATTATTGCGATTCCTACAGGAATTAAAATTTTTAGATGATTAGCTACAATATATGGATCAAAAATTAATTTTAATTTATCAATTATATGAGCTTTAGGGTTTATTTTTTTATT
+	Biorhiza        TTACTGTAGGGATAGATATTGATACACGAGCTTATTATACTTCAGTTACAATAATTATTGCAATTCCTACAGGTATTAAAATTTTTAGATGATTAGCTACTATATATGGGTCAAAAATTAATTTTAATTTATCTACTATATGAGCTTTAGGATTTATTTTTTTATT
+	Parnips         TTACGGTAGGTATAGATGTAGATACACGAGCTTATTATACTTCTGCTACTATGATTATTGCAGTTCCTACAGGAATTAAAATTTTTAGATGATTAGCAACAATATATGGATCAAAAATTAAATATAATTTATCAATAATATGAGCTATTGGATTTGTATTTTTATT
+	Paramblynotus   TTACTGTTGGAATAGATGATGATACCCGTGCCTATTATACTTCTGTAACTATAATTATTGCAATCCCAACTGGTATTAAAATTTTTAGATGATTAGCAACAATATATGGATCAAAAATTTTAATAAATTTATCAATAATTTGATCATTAGGATTTATTTTTTTATT
+	Ibalia          TTACTGTAGGGATAGATGTAGATACTCGAGCTTATTATACTTCTGTAACTATAATTATTGCTATCCCAACAGGAATTAAAATTTTTAGATGATTAGCTAGGATATATGGGTCTAAAATTAAATTTAATTTATCTATTATTTGATCAATTGGATTTATTTTTTTATT
+
+	Synergus        TTCATTTGGAGGAATAACAGGAATTACTTTAGCAAATTCTTCGATTGATATTATAATACATGATACTTATTATGTAGTAGCCGATCGACATTGCTCTCTGGAAATTCGAAACCGCCAAGTACTACGTAACCATCATTGATGCACCAGGTCATCGTGATTTCATAAA
+	Periclistus     TTCATTTGGAGGATTAACAGGAATTACATTATCTAATTCTACTATTGATATTATATTACATGATACTTATTATGTAGTTGCNGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTGACCATCATTGATGCACCAGGACATCGTGATTTCATCAA
+	Ceroptres       TTCAATAGGAGGAATAACAGGAGTAACTTTATCTAATTCTTCTATTGATATTATTTTGCATGATACTTATTATGTAGTAGCT????????????????????????????????????????????????????????????????????????????????????
+	Synophromorpha  TTCAATTGGAGGAATAACAGGAGTAACTTTACCTAATTCTTCAATTGATATTATTTTACATGATACTTATTATGTAGTGGCTGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTGACCATCATTGATGCACCAGGACATCGTGATTTCATCAA
+	Xestophanes     TTCAATTGGAGGAATAACAGGAGTAACTTTATCTAATTCTTCTATTGATATTATTTTACATGATACTTATTATGTAGTAGCTGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTGACAATCATTGATGCACCAGGACATCGTGATTTCATCAA
+	Diastrophus     TTCAATTGGGGGAATAACAGGGGTAACTTTAGCTAATTCATCAATTGATATTATTTTACATGATACTTATTATGTAGTGGCTGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTATGTGACTATCATTGATGCACCAGGACATCGTGATTTCATCAA
+	Gonaspis        TTCAATTGGGGGAATAACAGGAGTAACTTTATCTAATTCATCAATTGATATTATTTTACATGATACTTATTATGTAGTTGCTGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTGACCATCATTGATGCACCAGGACATCGTGATTTCATCAG
+	Liposthenes_gle TTCTATTGGTGGATTAACAGGTGTGACTCTTTCTAATTCATCGATTGATATTATTTTACATGACACTTATTATGTAGTGGCTTATCGACATTGCTCTGTGGAAATTTGAAACAGCCAAGTACTACGTGACCATCATTGATGCACCAGGACACCGTGATTTCATAAA
+	Liposthenes_ker TTCTATTGGAGGAATTACTGGTATTACCTTAGCAAATTCTTCTCTAGACATTATCCTTCATGACACTTACTATGTTGTAGCATATTGACATTGCTCTGTGGAAATTTGAAACTGCCAAGTACTACGTGACCATCATTGATGCACCAGGACATCGTGATTTCATAAA
+	Antistrophus    TTCTTTTGGAGGATTAACAGGAATTACTTTATCAAATTCTTCAATTGATATTTCTTTACGTGATACATATTATGTAGTTGCTTATCGACATTGCTCTGTGGAAATTTGAAACTGCCAGGTACTACGTGACCATCATTGATGCTCCAGGACATCGTGATTTCATAAA
+	Rhodus          TTCTTTAGGAGGATTAACAGGGGTTACTTTAGCAAATTCTTCAATTGACATTATTTTACATGATACTTACTATGTAGTAGCCTATCGACATTGCTCTGTGGAAGTTTGAAACTGCCAAGTACTACGTGACCATAATTGATGCACCAGGACATCGTGATTTCATAAA
+	Hedickiana      TTCACTTGGAGGAGTGACAGGTGTTACTTTATCTAATTCATCAATTGATATTGTTATACATGATACTTATTATGTTGTTGCATATCGACATTGCTCTGTGGAAGTTTGAAACTGCCAAGTACTACGTGACCATAATTGATGCACCAGGACATCGTGATTTTATAAA
+	Neaylax         TTCAATTGGGGGGATGACAGGAGTTACACTATCTAATTCTTCAATTGATATTATTATACATGATACTTATTATGTCGTAGCTTATCGACATTGCTCTGTGGAAGTTTGAAACTGCCAAGTACTACGTGACCATAATTGATGCACCAGGACATCGTGATTTCATAAA
+	Isocolus        TTCATTAGGGGGGATAACAGGAGTAACATTAGCAAATTCATCTATTGACATTATTTTACATGATACTTATTATGTAGTTGCATATCGACATTGCTCTGTGGAAATTTGAAACTGCCAAGTACTACGTGACCATCATTGATGCACCAGGACATCGTGATTTCATAAA
+	Aulacidea       TTCTTTAGGTGGTTTGACAGGAGTCACATTATCAAATTCTTCACTTGATATTATTTTACATGATACTTATTATGTAGTGGCTTATCGACATTGCTCTGTGGAAATTTGAAACTGCCAAGTACTACGTGACCATCATTGATGCACCAGGACATCGTGATTTCATAAA
+	Panteliella     TTCAATTGGAGGATTAACTGGAGTAACTTTATCAAATTCATCAATTGATATTGTTATACATGACACTTATTATGTTGTGGCNTATCGACATTGCTCTGTGGAAATTTGAAACTGCCAAGTACTACGTAACCATCATTGATGCACCAGGGCATCGTGATTTCATAAA
+	Barbotinia      TTCTCTTGGAGGAATTACAGGAATTACTTTATCTAATTCTTCAATTGATGTTATTTTACATGATACATATTATGTCGTAGCNGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTAACCATCATCGATGTACCAGGACATCGTGATTTCATCAA
+	Aylax           TTCAATTGGAGGTATTACAGGAGTAACCTTATCAAATTCTTCAATTGATATTGTTTTGCATGATACATATTATGTTGTAGCTGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTAACCATCATCGATGCACCAGGACATCGTGATTTCATCAA
+	Iraella         TTCAGTTGGGGGAATTACAGGAGTAACTTTATCAAATTCATCTATTGATATTATTTTACATGATACTTATTATGTAGTGGCTGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTAACCATCATCGATGCACCAGGACATCGTGATTTCATCAA
+	Timaspis        TTCTATAGGAGGATTAACTGGTGTAACATTATCAAATTCATCAATTGATTTAATATTACATGATACTTATTATGTTGTAGCTAATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTGACAATCATTGATGCACCAGGGCATCGTGATTTTATCAA
+	Phanacis_1      TTCAATAGGGGGATTAACTGGAGTTACTTTATCAAATTCTTCTATTGATTTGATTTTACATGATACTTATTATGTAGTTGCTAATCGACATTGCTCTGTGGAAATTTGAAACTGCCAAGTATTACGTGACAATCATTGATGCACCAGGGCATCGTGATTTTATTAA
+	Phanacis_2      TTCAGTAGGGGGTTTAACAGGAGTAACTTTGGCTAATTCTTCAATTGATTTAATTATACATGATACATATTATGTAGTGGCTAATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTATGTAACGATCATTGATGCACCAGGCCATCGTGATTTTATTAA
+	Eschatocerus    TACTCTTGGTGGTCTAACTGGAGTTACTTTATCAAATTCATCAATTGATATTATCTTACATGATACATATTATGTAGTAGCTAATCGATATTGCTCTCTGGAAATTTGAAACGGCGAAATATTATGTTACCATAATTGATGCACCAGGACATCGTGATTTCATCAA
+	Diplolepis      TTCTTTAGGAGGATTAACAGGAGTTTTATTATCTAATTCATCCATTGATATTATTTTACATGATACATATTATGTTGTTGCNCATTGATATCGCTCTTTGGAAATTCGAAACAGCCAAATATTACGTGACCATCATCGATGCACCAGGACATCGTGATTTTATAAA
+	Pediaspis       TTCAATTGGAGGAATAACAGGAGTAACTTTATCAAATTCATCAATTGATATTATTTTACATGATACATATTATGTTGTAGCTTATCGACATTGCCCTCTGGAAATTCGAGACAGCCAAGTATTACGTAACCATCATCGATGCACCAGGACATCGTGATTTCATNAA
+	Plagiotrochus   TTCAATTGGAGGTATAACAGGAGTAACATTAGCAAATTCTTCTATTGATATTATTATACATGATACATATTATGTTGTAGCNGATCGACATTGCTCTCTGGAAATTTGAAACTGCCAAGTATTACGTCACCATCATTGATGCACCAGGACATCGTGATTTCATCAA
+	Andricus        TTCTATTGGAGGAATAACTGGAGTTACATTAGCTAATTCATCTATTGATATTGTTATACATGATACTTATTATGTTGTTGCNAATCGACATTGCTCTCTGGAAATTTGAAACAGCGAAATATTACGTGACCATCATTGATGCACCAGGACATCGTGATTTCATCAA
+	Neuroterus      TTCAATTGGAGGAATAACAGGTGTAACATTAGCAAATTCATCAATTGATATTGTTATACATGATACTTATTATGTTGTTGCTAATCGACATCGCTCTCTGGAAATTTGAAACGGCGAAATATTATGTGACCATAATTGATGCACCAGGACATCGTGATTTTATCAA
+	Biorhiza        TTCTATTGGAGGAATAACTGGTGTAACATTAGCTAATTCATCAATTGATATTATTATACATGATACTTATTATGTTGTTGCTAATCGATATTGCTCTCTGGAAATTTGAAACGGCGAAATATTATGTTACCATAATTGATGCACCAGGACATCGTGATTTCATCAA
+	Parnips         TTCTATTGGAGGTATGACTGGAGTAACATTATCAAATTCTTCAATTGATATTATTTTACATGATACTTATTATGTAGTTGCTCATTGACATTGCTCTTTGGAAATTCGAAACAGCCAAGTATTACGTTACCATCATCGATGCACCAGGTCATCGTGATTTCATAAA
+	Paramblynotus   TTCAATAGGTGGAGTTACAGGAATTACTTTATCTAATTCTTCTATTGATGTAATTTTACATGATACTTACTATGTAGTAGCTCATAGACATCGCTCTCTGGAAATTCGAAACAGCCAAGTATTACGTAACCATCATCGATGCACCGGGACATCGTGATTTCATAAA
+	Ibalia          TTCTTTTGGGGGAATAACTGGAGTTACTTTATCAAACTCTTCTATTGACATTATTCTTCATGATACTTATTATGTAGTAGCNCATCGACATTGCTCTCTGGAAATTTGAAACAGCCAAATATTACGTAACCATTATCGATGCACCAGGACATCGTGATTTCATAAA
+
+	Synergus        AAACATGATTACGGGAACGAGTCAAGCTGATTGTGCAGTGCTGATTGTAGCAGCTGGAATTGGTGAATTCGAAGCTGGAATTTCGAAAAATGGTCAGACTCGTGAACATGCTTTATTGGCTTTCACCCTGGGAGTGAAGCAATTGATTGTGGGAGTCAACAAGATG
+	Periclistus     AAACATGATCACTGGAACAAGTCAGGCTGACTGTGCAGTGCTGATCGTAGCTGCTGGAATTGGAGAATTTGAAGCTGGAATCTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACCTTGGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Ceroptres       ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Synophromorpha  AAACATGATCACTGGAACAAGTCAGGCTGACTGTGCTGTGCTGATCGTAGCAGCTGGAATTGGAGAATTTGAAGCCGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCATTATTGGCTTTCACCCTGGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Xestophanes     AAACATGATCACTGGAACAAGTCAGGCTGACTGTGCTGTGCTGATCGTAGCAGCTGGAATTGGAGAATTTGAAGCTGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACTCTGGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Diastrophus     AAACATGATCACTGGAACAAGTCAGGCTGACTGTGCAGTGCTGATCGTAGCTGCTGGAATTGGAGAATTTGAAGCTGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACACTGGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Gonaspis        AAACATGATCACTGGAACAAGTCAGGCTGACTGTGCAGTGCTGATCGTAGCTGCTGGAATTGGAGAATTTGAAGCTGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACACTGGGAGTTAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Liposthenes_gle AAACATGATCACTGGTACGAGTCAAGCTGATTGTGCTGTGCTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCCAAAAATGGTCAAACTCGGGAGCATGCTTTATTGGCTTTCACCCTTGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Liposthenes_ker AAACATGATCACTGGTACGAGTCAAGCTGACTGTGCTGTGCTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATATCCAAAAATGGTCAAACTCGAGAACATGCTTTATTGGCTTTCACCCTCGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Antistrophus    AAACATGATCACTGGTACGAGTCAAGCTGATTGTGCTGTGCTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCTAAAAATGGTCAAACTCGAGAGCATGCTTTATTGGCTTTCACCCTCGGAGTAAAGCAGTTGATTGTGGGAGTCAATAAGATG
+	Rhodus          AAACATGATCACTGGTACGAGTCAAGCTGATTGTGCTGTGTTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCCAAAAATGGTCAAACTCGAGAGCATGCTTTATTGGCTTTCACCCTCGGAGTAAAGCAGTTGATTGTGGGAGTCAATAAGATG
+	Hedickiana      AAACATGATCACTGGTACGAGTCAAGCTGATTGTGCTGTGCTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCCAAAAATGGTCAAACTCGAGAGCATGCTTTATTGGCTCTCACCCTTGGAGTAAAGCAGTTGATTGTGGGAGTCAATAAGATG
+	Neaylax         AAACATGATCACTGGTACGAGTCAAGCTGATTGTGCTGTACTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGGATTTCCAAAAATGGTCAAACTCGGGAGCATGCTTTATTAGCTTTCACCCTCGGTGTAAAGCAGTTGATTGTGGGAGTCAATAAGATG
+	Isocolus        AAACATGATCACTGGTACTAGTCAAGCTGATTGTGCTGTGCTGATTGTAGCAGCTGGAATTGGGGAATTCGAAGCTGGAATATCCAAAAATGGTCAAACTCGAGAGCATGCTTTATTAGCTTTCACCCTGGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Aulacidea       GAACATGATTACTGGTACGAGTCAAGCTGATTGCGCTGTGCTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCAAAAAATGGTCAAACTCGAGAGCATGCTTTATTGGCTTTCACCCTCGGAGTGAAGCAATTGATTGTCGGAGTCAATAAGATG
+	Panteliella     AAACATGATCACTGGTACGAGTCAAGCTGATTGTGCTGTGCTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCCAAAAATGGTCAAACTCGAGAACATGCTTTATTGGCCTTCACCCTTGGAGTGAAGCAATTGATTGTGGGAGTTAATAAGATG
+	Barbotinia      AAATATGATCACTGGAACGAGTCAAGCTGATTGTGCAGTGCTGATTGTAGCGGCTGGAATTGGAGAATTCGAAGCTGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACTCTGGGAGTGAAGCAGTTGATTGTAGGGGTCAACAAGATG
+	Aylax           AAACATGATCACTGGAACGAGTCAAGCTGATTGTGCAGTACTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGTATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTTACTCTAGGAGTGAAGCAATTGATTGTAGGGGTCAACAAGATG
+	Iraella         AAACATGATCACTGGAACGAGTCAAGCTGATTGTGCAGTGCTGATTGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGTATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACTCTGGGAGTAAAGCAATTGATTGTAGGGGTCAATAAGATG
+	Timaspis        AAACATGATCACTGGAACAAGTCAAGCTGACTGTGCAGTGCTAATCGTAGCAGCTGGAATTGGAGAATTTGAAGCTGGAATTTCAAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACTCTGGGAGTGAAGCAACTGATTGTGGGTGTCAATAAGATG
+	Phanacis_1      AAACATGATCACTGGAACAAGTCAAGCCGATTGTGCAGTGCTGATCGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCAAAAAATGGCCAAACTCGAGAACATGCTTTATTGGCTTTCACTCTGGGAGTGAAGCAACTGATTGTAGGTGTCAATAAGATG
+	Phanacis_2      AAACATGATCACTGGAACAAGTCAAGCTGACTGTGCAGTGCTGATCGTAGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCCAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACTCTGGGAGTGAAGCAACTGATTGTGGGTGTCAATAAGACG
+	Eschatocerus    AAACATGATCACTGGAACGAGTCAAGCTGATTGTGCTGTACTGATAGTAGCAGCTGGAATTGGAGAATTCGAGGCTGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACTCTGGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Diplolepis      AAACATGATTACTGGAACAAGTCAAGCTGATTGTGCAGTGTTAATAGTAGCAGCTGGAATAGGAGAATTCGAAGCTGGAATTTCAAAAAATGGCCAAACTCGTGAACATGCTCTACTTGCTTTTACCTTGGGAGTAAAGCAATTGATTGTCGGAGTCAATAAAATG
+	Pediaspis       AAATATGATTACTGGGACGAGTCAAGCTGATTGTGCAGTTCTGATAGTAGCAGCTGGAATAGGAGAATTCGAAGCTGGAATTTCCAAAAATGGTCAAACTCGTGAACATGCTCTACTGGCCTTCACCTTGGGAGTGAAGCAATTGATCGTTGGAGTCAATAAGATG
+	Plagiotrochus   AAACATGATCACTGGAACGAGTCAAGCTGATTGTGCAGTGCTGATTGTGGCAGCTGGAATTGGAGAATTCGAAGCTGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTCTCACTCTTGGAGTGAAGCAATTAATTGTAGGAGTTAATAAGATG
+	Andricus        AAACATGATCACTGGAACGAGTCAAGCTGATTGTGCTGTGCTGATCGTAGCAGCTGGAATTGGAGAATTCGAGGCTGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACTCTGGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Neuroterus      AAACATGATCACTGGAACGAGTCAAGCTGATTGTGCTGTACTGATCGTAGCAGCTGGAATTGGAGAATTCGAGGCTGGGATTTCGAAAAATGGTCAAACTCGTGAGCATGCTTTATTGGCTTTCACTCTGGGAGTGAAACAATTGATTGTAGGAGTCAATAAGATG
+	Biorhiza        AAACATGATCACTGGAACGAGTCAAGCTGATTGTGCTGTACTGATAGTAGCAGCTGGAATTGGAGAATTCGAGGCTGGAATTTCGAAAAATGGTCAAACTCGTGAACATGCTTTATTGGCTTTCACTCTGGGAGTGAAGCAATTGATTGTGGGAGTCAATAAGATG
+	Parnips         AAACATGATCACTGGAACGAGTCAAGCTGATTGTGCAGTTTTAATAGTAGCAGCAGGAATTGGAGAATTCGAAGCTGGAATTTCAAAGAATGGTCAAACTCGTGAACATGCTCTTTTGGCTTTCACCCTAGGAGTGAAGCAATTGATCGTTGGAGTCAATAAGATG
+	Paramblynotus   GAACATGATTACTGGAACTAGTCAGGCTGACTGTGCAGTTTTGATAGTAGCTGCAGGAATTGGAGAATTCGAGGCTGGAATTTCAAAGAATGGCCAAACTCGTGAACATGCCCTTTTGGCGTTCACCTTAGGAGTGAAGCAATTGATTGTTGGAGTCAACAAGATG
+	Ibalia          AAACATGATCACTGGAACAAGTCAAGCTGATTGTGCAGTTTTGATAGTAGCAGCAGGAATTGGAGAATTCGAAGCAGGAATTTCAAAGAATGGTCAAACTCGTGAACATGCTCTTTTAGCTTTCACCCTGGGAGTGAAACAATTGATTGTTGGAGTCAACAAGATG
+
+	Synergus        GATATGACTGATCCACCATATTCTGAGAGTCGATTCGAAGAAATAAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTACAATACCGCTTCAGTTGCATTTGTTCCAATTTCTTCTAGGTCCATTTATATGTGAGATGTACGGAATGTTTGGCTCCCTATTC
+	Periclistus     GATATGACTGATCCGCCATATTCTGAGACTCGATTTGAAGAAATCAAGAAAGAGGTGTCTTCATACATCAAGAAAATTGGTTACAATACTGCTTCGGTAGCATTTGTTCCAATTTCTTCTTGGTCCATTTATGTGTGAGATCTACGCAATGCTTGGCTCCCTATTC
+	Ceroptres       ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????TCTTGGACCATTTATATGCGAGATTTACGCAATGCTTGGCTCCCTATTC
+	Synophromorpha  GATATGACTGATCCACCATATTCTGAGAGTCGATTTGAAGAAATCAAGAAAGAGGTGTCTTCATACATCAAGAAAATTGGTTACAATACTGCTTCGGTTGCATTTGTTCCAATTTCT?????????????????????????????????????????????????
+	Xestophanes     GATATGACTGATCCACCATATTCTGAGAGTCGATTTGAAGAAATCAAGAAAGAGGTGTCTTCATACATCAAGAAAATTGGTTACAATACTGCTTCGGTTGCATTTGTTCCAATTTCT?????????????????????????????????????????????????
+	Diastrophus     GGCATGACTGATCCACCATATTCTGAGAGTCGATTTGAAGAAATCAAGAAAGAGGTGTCTTCATACATCAAGAAAATTGGTTTCAATACTGCTTCGGTTGCATTTGTTCCAATTTCT?????????????????????????????????????????????????
+	Gonaspis        GACATGACTGATCCACCATATTCTGAGAGTCGATTTGAAGAAATCAAGAAAGAGGTGTCATCATACATCAAGAAAATTGGTTACAATACTGCTTCGGTTGCATTTGTTCCAATTTCT?????????????????????????????????????????????????
+	Liposthenes_gle GATATGACTGATCCACCATACTCTGAGAGTCGATTCGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTATAATACTGCGTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTTTATGTGAAATATACGCAATGCTTGGCTCCCTATTT
+	Liposthenes_ker GATATGACTGATCCACCATACTCTGAGAGTCGCTTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGCTATAATACTGCGTCGGTTGCATTTGTTCCAATTTCTTCTTGGCCCATTTTTATGTGAGATGTACGGAATGTTTGGTTCCCTATTC
+	Antistrophus    GATATGACTGATCCACCGTACTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAAGTTTCTTCATACATCAAGAAAATTGGTTATAATACTGCGTCAGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTTTATGTGAGATGTACGCAATGCTTGGCTCCCTATTC
+	Rhodus          GATATGACTGATCCACCATACTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTATAATACTGCGTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTTTATGTGAGATGTACGCAATGTTTGGCTCCCTATTT
+	Hedickiana      GATATGATTGATCCACCATACTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTATAATACTGCGTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTTTATGTGAGATGTACGGAATGTTTGGCTCCCTGTTT
+	Neaylax         GATATGACTGATCCACCATACTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTATAATACTGCGTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTTTATGTGAGATGTACGGAATGTTTGGCTCCCTATTA
+	Isocolus        GATATGACTGATCCACCATACTCCGACAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTATAATACTGCGTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCGTTTTTATGTGAGATGTACGCAATGCTTGGCTCCCTATTC
+	Aulacidea       GATATGACTGATCCACCATACTCTGAGAGCCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTATAATACTGCATCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTTTATGTGAGATGTACGGAATGTTYGGCTCCCTATTC
+	Panteliella     GATATGACTGATCCACCATACTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTATAATACTGCGTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTTTATGTGAGATGTACGGAATGTTTGGCTCCCTTTTC
+	Barbotinia      GATATGACTGATCCTCCATATTCTGAAAGTCGATTTGAAGAAATAAAGAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTACAATACTGCTTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTATATGTGAGATATATGCAATGCTTGGCTCCCTATTT
+	Aylax           GATATGACTGATCCTCCATATTCTGAAAGTCGATTTGAAGAAATAAAGAAAGAGGTTTCTTCATACATCAAGAAAATTGGTTACAATACTGCTTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTATATGTGAGATGTACGGAATGTTTGGCTCTCTATTT
+	Iraella         GATATGACTGATCCTCCATATTCTGAAAGTCGATTTGAAGAAATTAAGAAAGAAGTTTCTTCATACATCAAGAAAATTGGTTACAATACTGCTTCGGTCGCATTTGTTCCAATTTCT?????????????????????????????????????????????????
+	Timaspis        GACATGGCTGATCCATCATATTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAAAAAATTGGATACAATACTGCTTCGGTTGCATTTGTACCAATTTCTTCTTGGTCCATTTTTATGTGAGATATATGCAATGCTTGGCTCCCTATTC
+	Phanacis_1      GACATGACTGATCCACCATATTCTGAAAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAAAAAATTGGATACAATACTGCTTCGGTTGCATTTGTTCCAATTTCT?????????????????????????????????????????????????
+	Phanacis_2      GACATGACTGACCCACCATATTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAAAAAATTGGATACAATACTGCTTCGGTTGCATTTGTTCCAATTTCT?????????????????????????????????????????????????
+	Eschatocerus    GATATGACTGATCCACCATATTCTGAGAGTCGATTTGAAGAAATAAAAAAAGAGGTTTCCTCATACATCAAGAAAATTGGTTACAATACTTCTTCGGTTGCATTTGTTCCAATTTCTATTTGGACCACTCTTCTGTCAAATATACGCATTGCTCGGCTCACTTTTT
+	Diplolepis      GATATGACTGACCCACCATATTCAGAGAGCCGATTTGAAGAAATCAAAAAAGAAGTTTCTTCATACATCAAGAAAATTGGTTACAATACAGCTTCAGTTGCATTTGTTCCCATTTCTNNNNGGTCCATTCTTGTGTGAGATATACGCTTTACTTGGTTCTCTATTT
+	Pediaspis       GATATGACTGACCCACCATATTCTGAAAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCTTCATACATCAAAAAAATTGGTTACAATACAGCTTCGGTTGCATTTGTTCCCATTTCTGTTTGGGCCATTTATATGTGAGCTGTATGCATTGTTCGGTTCCCTATTC
+	Plagiotrochus   GATATGACTGATCCGCCATATTCTGAGAGTCGATTTGAAGAAATCAAGAAAGAGGTGTCTTCATACATAAAGAAAATTGGTTACAATACTGCCTCGGTTGCATTTGTTCCAATTTCAACATGGACCTTTTATGTGCGAGATGTACGCAATGTTTGGCTCCCTATTC
+	Andricus        GATATGACCGATCCACCATATTCTGAAAGTCGTTTTGAAGAAATCAAGAAAGAGGTTTCCTCATACATCAAGAAAATTGGTTACAATACTTCTTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTATGTGTGAGATCTACGCAATGCTTGGCTCCCTATTC
+	Neuroterus      GATATGACCGATCCACCATATTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAGGTTTCCTCGTACATCAAGAAGATTGGTTACAATACTTCTTCGGTTGCATTTGTTCCAATTTCT?????????????????????????????????????????????????
+	Biorhiza        GATATGACTGATCCACCATATTCTGAGAGTCGATTTGAAGAAATAAAAAAAGAGGTTTCCTCATACATCAAGAAAATTGGTTACAATACTTCTTCGGTTGCATTTGTTCCAATTTCTTCTTGGTCCATTTATATGTGAGATCTACGCAATGCTTGGCTCCTTATTC
+	Parnips         GATATGACTGACCCACCATATTCTGAGAGCCGATTTGAGGAAATAAAAAAGGAAGTTTCTTCATACATCAAGAAAATTGGCTACAATACTGTTTCGGTTGCATTTGTTCCCATTTCTATTGGGGCCATTTATGTGTGAAATGTATGGACTAACTGGCTCTCTATTC
+	Paramblynotus   GACATGACTGATCCACCTTATTCTGAAAGTCGTTTTGAGGAGATCAAGAAAGAGGTTTCCTCATACATCAAGAAGATTGGCTACAATACAGCATCAGTTGCATTTGTACCAATTTCT?????????????????????????????????????????????????
+	Ibalia          GATATGACTGATCCACCATATTCTGAGAGTCGATTTGAAGAAATCAAAAAAGAGGTATCTTCATACATCAAGAAAATTGGCTACAATACTGCTTCAGTTGCATTTGTTCCCATTTCT?????????????????????????????????????????????????
+
+	Synergus        GGATGTGGCTCTATTTGGACAATGTGTATGATTGCTTTCGACCGATACAACGTTATCGTAAAAGGTTTAGCTGGCAAGCCCTTAACTATCAGTGGTGCAATTCTGCGCATTGCTTTTCTCTGGATCTGGGCAGTAATTTGGACAGTTGCACCAATGATAGGATGGA
+	Periclistus     GGATGTGGCTCCATTTGGACAATGTGTATGATTGCTTTCGATCGATACAATGTTATCGTAAAGGGTCTGGCTGGCAAACCGCTATCTATCAGTGGTGCAATTCTGCGCATTGTTGGACTCTGGGTCTGGGCAGTAATTTGGACCATTGCACCAATGATAGGATGGA
+	Ceroptres       GGATGTGCCTCCATTTGGACGATGTGTATGATTGCTTTCGACCGATACAATGTCATCGTGAAAGGTTTAGCTGGAAAGCCGCTAACTATCAGTGGTGCAATTCTGCGTATTATTGGTCTCTGGGCCTGGGCAATAGTTTGGACCGTTGCCCCAATGTTAGGATGGA
+	Synophromorpha  ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Xestophanes     ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Diastrophus     ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Gonaspis        ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Liposthenes_gle GGATGCGGCTCCATTTGGACAATGTGTATGATTGCTTTCGATCGATACAATGTTATCGTAAAGGGCTTAGCAGGCAAGCCCTTAACTATCACTGGTGCAATTCTGCGGATTGTTGGTCTCTGGGTTTGGGCAGTTGTTTGGACCATTGCACCAATGATAGGATGGA
+	Liposthenes_ker GGATGCGGCTCCATTTGGACAATGTGTATGATTGCTTTCGATCGATATAATGTTATCGTAAAAGGCTTAGCAGGCAAGCCCTTAACTATCACTGGTGCAACTCTGCGGATTATTGGTCTCTGGGCTTGGGCAGTCGTTTGGACCATTGCACCAATGATAGGATGGA
+	Antistrophus    GGATGCGGCTCCATTTGGACAATGTGTATGATTGCTTTCGATCGATACAATGTTATTGTAAAAGGCTTAGCAGGCAAGCCCTTAACTATCACTGGTGCAATTCTGCGGATTGTTGGTCTCTGGGTTTGGGCAGTCGTTTGGACTATTGCACCAATGATAGGATGGA
+	Rhodus          GGATGCGGCTCCATTTGGACAATGTGTATGATTGCTTTCGATCGATACAATGTTATTGTAAAAGGCTTAGCAGGCAAGCCCTTAACTATCACTGGTGCAGTTCTGCGGATTGTTGGTCTCTGGGTTTGGGCAGTCGTTTGGACCATTGCACCAATGATAGGATGGA
+	Hedickiana      GGATGCGGCTCCATTTGGACAATGTGTATGATTGCTTTCGATCGATACAATGTTATTGTAAAAGGCTTAGCAGGCAAGCCCTTAACTATCACTGGTGCAATTCTGCGGATTGTTGGTCTATGGGTTTGGGCAGTCGTTTGGACCATTGCACCAATGATAGGATGGA
+	Neaylax         GGATGCGGCTCCATCTGGACAATGTGTATGATTGCTTTCGATCGATACAATGTTATTGTAAAAGGCTTAGCAGGCAAGACCTTAACTATCACTGGCGCAATTCTGCGGATTGTTGGTCTCTGGGTTTGGGCAGTCGTTTGGACCATTGCACCAATGATAGGATGGA
+	Isocolus        GGATGTGGCTCCATTTGGACAATGTGTATGATTGCTTTTGACCGATATAATGTTATCGTAAAAGGTTTAGCTGGCAAGCCCTTGACTATCACTGGTGCAATTCTGCGGATTGTTGGTCTCTGGATTTGGGCAGTCGTTTGGACCATTGCACCAATGATAGGATGGA
+	Aulacidea       GGATGTGGCTCCATTTGGACAATGTGTATGATTGCTTTTGACCGATATAATGTTATCGTAAAAGGCTTAGCTGGCAAGCCCTTAACTATCACTGGTGCAATTCTGCGGATTGTTGGTCTCTGGGTTTGGGCAGTTGTTTGGACCATTGCACCAATGATAGGATGGA
+	Panteliella     GGATGTGGCTCCATTTGGACAATGTGTATGATTGCTTTCGACCGATACAATGTTATCGTAAAAGGCTTGGCTGGCAAGCCCTTAACTATCACTGGTGCAATTCTGCGGATTGTTGGTCTCTGGGTTTGGGCAGTCATTTGGACCATTGCCCCAATGATAGGATGGA
+	Barbotinia      GGATGTGGCTCCATTTGGACAATGTGTATGATTGCTTTCGACCGATACAATGTTATCGTAAAAGGTTTAGCTGGCAAGCCATTAACTATCAGTGGTGCAATTCTGCGTATTGTTTTTCTCTGGGTCTGGGCGGTAGTTTGGACCATTGCACCAATGATAGGATGGA
+	Aylax           GGATGTGGATCCATTTGGACAATGAGTATGATTGCTTTCGACCGATACAATGTTATCGTAAAAGGTTTAGCTGGCAAGCCATTAACTATCAGTGGTGCAATTCTGCGTATTGNTTTCCTCTGGCTCTGGGCGGTAATTNGGACCATTGCACCAATGATAGGATGGA
+	Iraella         ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Timaspis        GGATGTGGCTCCATTTGGACAATGTGTATGATTGCTTTTGATCGATACAATGTTATTGTAAAAGGTTTAGCTGGCAAGCCATTAACTATCAGTGGTGCAATTCTACGCATTGTTGGTCTCTGGGTCTGGGCTGTCATTTGGACCATTGCACCAATGCTAGGATGGA
+	Phanacis_1      ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Phanacis_2      ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Eschatocerus    GGCTGTGCTTCAATCTGGACAATGTGTTTGATTGCCTTCGACAGGTACAATGTCATTGTCAAGGGTCTAGCTGGAAAACCTTTGACCATAACCGGTGCAGTCTTGCGTATATTTGCTCTCTGGATCTGGGCATTGATTTGGACAGTTGCACCAATGTTTGGATGGA
+	Diplolepis      GGATGTGGCTCCATTTGGACAATGTGTATGATTGCTTTTGATAGGTACAATGTAATAGTGAAAGGTTTGGCTGGGAAGCCCTTAACAATCACCGGTGCAATTATACGCATAATTGGCCTTTGGGTCTGGGCCATTATTTGGACTATTGCGCCAATGTTTGGATGGA
+	Pediaspis       GGATGTGGCTCCATTTGGACAATGTGTATGATTGCTTTCGACAGATACAACGTAATCGTAAAAGGCTTAGCTGGAAAGCCCTTAACCATAAGCGGTGCAATTATTCGTATAATTGGTCTCTGGGTCTGGGCCGTGATTTGGACCGTTGCACCAATATTTGGATGGA
+	Plagiotrochus   GGATGCGGCTCCATTTGGACGATGTGTATGATAGCTTTCGACCGATACAATGTTATCGTGAAGGGATTAGCTGGAAAGCCGTTAACTATCAGTGGTGCAATTCTGCGCATTGTTGGACTCTGGGTTTGGGCAGTAATTTGGACAATTGCACCAATGTTAGGATGGA
+	Andricus        GGATGTGTCTCCATTTGGACAATGTGTATGATTGCTTTTGATCGATACAATGTCATTGTAAAGGGTTTAGCTGGCAAGCCACTAACTATCAGTGGTGCAATTCTGCGCATTGTTGGTCTCTGGGTCTGGGCAATAATTTGGACCATTGCACCAATGTTGGGCTGGA
+	Neuroterus      ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Biorhiza        GGATGTGCCTCCATTTGGACAATGTGTATGATTGCTTTCGACCGATACAATGTCATTGTAAAGGGTTTAGCTGGAAAGCCACTCACTATCAGTGGTGCAATTCTGCGTATTGCTGGTCTCTGGGTATGGGCAGTAATTTGGACCATTGCACCAATGTTGGGCTGGA
+	Parnips         GGATGTGGGTCCATTTGGACAATGTGCATGATTGCGTTCGACAGATACAACGTAATAGTAAAAGGTTTGGCAGGAAAACCTTTAACCATCAGTGGTGCAATTCTTCGCATAGTTGGTCTCTGGGTCTGGGCCGTTATTTGGACCATTGCACCAATGATAGGATGGA
+	Paramblynotus   ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Ibalia          ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+
+	Synergus        ATCGGTACGTTCCGGAGGGTAACATGACAGCTTGCGGAACTGACTACCTGACTAAGGATTGGTTATCGAGGTCTTACATCATTGTATACAGCGTCTTCGTATACTTCATGCCACTTTTCCTCATCATATACAGTTACTATTTCATCATTGCTGCTGTATCTGCCCA
+	Periclistus     ATCGGTATGTTCCTGAAGGCAATTTGACAGCTTGCGGAACTGACTATCTGAGTAAGGATTGGTTGTCGAGGTCTTACATTCTTGTATACAGCGTCTTCGTATACTTCATGCCACTTTTCCTCATCATATACAGTTACTATTTCATCATCGCTGCTGTATCTGCTCA
+	Ceroptres       ATCGGTACGTTCCCGAAGGCAACATGACAGCTTGTGGAACTGACTATCTGACTAAGGATTGGTTCTCGAGATCTTACATTATTATATATAGCGTCTTCGTATACTTTGCGCCACTTTTCCTCATCATATACAGTTACTATTTCATCATTGCTGCTGTATCTGCTCA
+	Synophromorpha  ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Xestophanes     ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Diastrophus     ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Gonaspis        ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Liposthenes_gle ATCGGTACGTTCCCGAGGGTAACATGACAGCTTGTGGAACTGATTATCTAACCAAAGATTGGTTCTCAAGGTCTTATATACTTATATACAGTGTCTTTGTATACTTCATGCCACTTTTTCTCATCATATACAGCTACTATTTTATCATTGCTGCTGTATCTGCTCA
+	Liposthenes_ker ATCGGTACGTTCCCGAGGGTAACATGACAGCTTGTGGAACTGACTATCTAACCAAAGATTGGTTCTCGAGGTCTTATATACTTATATACAGYGTCTTTGTATACTTCATGCCACTTTTTCTCATCATATACAGCTACTATTTTATCATTGCTGCTGTATCTGCTCA
+	Antistrophus    ATCGGTACGTTCCCGAAGGTAACATGACAGCTTGTGGAACTGACTATCTAACTAAAGATTGGTTCTCGAGGTCTTATATAATTATATACAGTGTCTTCGTATACTTCATGCCACTTTTTCTCATCATATACAGTTACTATTTTATCATTGCTGCTGTATCTGCTCA
+	Rhodus          ATCGGTACGTTCCCGAAGGCAATATGACAGCTTGTGGAACTGACTATCTAACTAAAGACTGGTTCTCGAGGTCTTATATACTTATATACAGTGTCTTCGTATACTTCATGCCACTTTTTCTCATTATATACAGCTACTATTTTATCATTGCTGCTGTATCTGCTCA
+	Hedickiana      ATCGGTACGTTCCCGAAGGCAACATGACAGCTTGTGGAACTGACTATCTAACTAAAGACTGGTTCTCGAGGTCTTATATACTTATATACAGTGTCTTCGTATACTTTATGCCACTTTTTCTCATCATATACAGCTACTATTTTATCATTGCTGCTGTATCTGCTCA
+	Neaylax         ATCGGTACGTTCCCGAAGGCAACATGACAGCTTGTGGAACTGACTATCTAACTAAAGACTGGTTCTCGAGGTCTTATATACTTATATACAGTGTCTTCGTATACTTCATGCCACTTTTTCTCATCATATACAGCTACTATTTTATCATTGCTGCTGTATCTGCTCA
+	Isocolus        ATCGGTACGTTCCCGAGGGCAACATGACAGCTTGTGGAACTGACTACTTGACTAAGGATTGGTTCTCGAGGTCCTATATACTTATATACAGTGTCTTCGTATATTTCATGCCACTTTTTCTCATCATATACAGCTACTATTTCATCATTGCTGCTGTATCTGCTCA
+	Aulacidea       ATCGGTATGTTCCCGAGGGTAACATGACAGCTTGTGGAACTGACTATCTAACTAAGGATTGGTTCTCCAGGTCCTTCATACTTGTATACAGTATCTTCGTATACTTCATGCCACTTTTTCTCATCATATACAGCTACTATTTCATCATTGCTGCTGTATCTGCTCA
+	Panteliella     ATCGGTACGTTCCCGAGGGCAATATGACAGCTTGTGGAACTGACTATCTGAATAAAGATTGGTTCTCGAGGTCTTATATACTTATATACAGTGTCTTTGTATACTTTATGCCACTTTTTCTCATTATATACAGTTACTATTTCATCATTGCTGCTGTATCTGCCCA
+	Barbotinia      ATCGGTACGTTCCCGAGGGCAACATGACAGCTTGTGGAACTGACTATCTAACTAAGGATTGGTTCTCGAGGTCTTACATTCTTGTATACAGCGTCTTCGTATACTTCATGCCACTTTTCCTCATCATCTACAGTTACTATTTCATCATTGCTGCTGTATCTGCTCA
+	Aylax           ATCGGTACGTNCCCGAGGGTAACATGACAGCTTGTGGAACTGACTATCTANCTAAGGATTGGTTCTCGAGGT----------------------------------------------------------------------------------------------
+	Iraella         ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Timaspis        ATCGGTATGTTCCTGAAGGTAACATGACAGCTTGTGGGACTGACTATTTGACTAAGAACTGGTTCTCGAGGTCTTACATCCTTATATACAGCATTTTCGTGTATTTCATGCCACTTTTCCTCATAATATACAGTTACTATTTCATCATTGCTGCTGCATCTGCTCA
+	Phanacis_1      ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Phanacis_2      ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Eschatocerus    ATCGGTATGTACCTGAAGGTAATCTGACAGCATGTGGTACTGATTATTTGAGCAAGGACTGGCTCTCAAGATCCTACCTCCTCGTATATGGTTTCTTCGTATACTTCATGCCGCTTTTCCTGATCATCTATAGCTATTATTTTATAATCGCAGCCGTATCTGCCCA
+	Diplolepis      ATCGGTATGTACCTGAAGGTAACATGACAGCTTGCGGAACTGATTATTTAAGTAAAGACTGGTTCTCGAGGTCTTACATCCTTGTATACAGTATCTTCGTATACTATATGCCGCTTTTCCTTATCATATACAGTTACTATTTTATCATCTCAGCTGTATCTGCTCA
+	Pediaspis       ATCGGTATGTACCCGAGGGTAACATGACAGCTTGCGGAACTGACTATCTCAGTAAGGACTGGTTTTCGAGGTCTTACATCATTGTTTACAGTATCTTCGTGTACTACATGCCACTTTTCCTCATCATATACAGCTACTACTTTATCATCTCAGCTGTATCTGCTCA
+	Plagiotrochus   ATCGGTACGTTCCCGAGGGCAACATGACAGCTTGTGGAACTGACTATTTGACTAAGGATTGGTTCTCGAGGTCTTACATACTTGTATATAGCGTCTTTGTATACTTCATGCCACTTTTCCTTATCATATACAGTTACTATTTCATCATTGCTGCTGTAACAGCTCA
+	Andricus        ATCGGTATGTTCCCGAGGGCAACATGACAGCATGTGGAACTGACTATCTGTCTAAGGATTGGTTCTCGAGGTCTTACATTATTGTATACAGCATCTTTGTATACTTTATGCCACTTTTCCTCATCATATACAGTTACTATTTTATCATTGCTGCTGTAACTGCTCA
+	Neuroterus      ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Biorhiza        ATCGGTATGTTCCTGAGGGCAACATGACAGCATGTGGAACTGACTATCTGTCTAAGGATTGGTTCTCAAGGTCTTACATTCTTGTATACAGCATCTTTGTATACTTTATGCCACTTTTCCTTATAATATACAGTTACTATTTCATCATTGCTGCTGTAACTGCTCA
+	Parnips         ATCGGTACGTACCCGAAGGTAACTTGACAGCTTGTGGAACTGACTATCTGACACAGGATTGGTTCTCCAAGTCTTATATCCTTGTATACAGTGTTTTCGTATATTTCATGCCACTTTTCCTCATCATATACAGCTATTATTTCATCATCGCAGCTGTATCTGCTCA
+	Paramblynotus   ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Ibalia          ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+
+	Synergus        TGAAAAGGCTATGCGTGAACAGGCCAAAAAGATGAATGTAGCTTCTCTACGATCATCTGACAATCAAAATACGAGTGCTGAACATAAACTTGCCAAGGTACTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-ACCCACGAGACCGATAGCGAACAAGTA
+	Periclistus     CGAAAAAGCAATGCGTGAACAGGCCAAAAAGATGAATGTAGCTTCTCTACGATCATCCGATAATCAAAATACGAGTGCTGAACATAAACTCGCCAAGGTA------------------------------------------------------------AAGGTA
+	Ceroptres       CGAAAAAGCAATGCGTGAACAGGCCAAAAAGATGAATGTAGCATCGCTACGATCATCCGACAATCAAAATACGAGCGCTGAACATAAACTCGCCAAGGTACTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+	Synophromorpha  ????????????????????????????????????????????????????????????????????????????????????????????????????CTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+	Xestophanes     ????????????????????????????????????????????????????????????????????????????????????????????????????------------------------------------------------ACCGATAGCGAACAAGTA
+	Diastrophus     ????????????????????????????????????????????????????????????????????????????????????????????????????------------------------------------------------ACCGATNGCGAACAAGTA
+	Gonaspis        ????????????????????????????????????????????????????????????????????????????????????????????????????CTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-GACCACGAGACCGATAGCGAACAAGTA
+	Liposthenes_gle CGAAAAAGCAATGCGTGAACAAGCCAAAAAGATGAATGTAGCTTCTCTCCGATCCTCCGACAACCAAAATACGAGTGCTGAACATAAGCTCGCAAAGGTACTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+	Liposthenes_ker CGAAAAAGCAATGCGTGAACAAGCCAAAAAGATGAATGTAGCTTCTCTACGATCCTCCGACAACCAAAATACGAGTGCTGAACATAAGCTCGCAAAGGTACTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+	Antistrophus    CGAAAAAGCAATGCGTGAACAAGCCAAAAAGATGAATGTAGCTTCTCTACGATCCTCCGATAACCAAAATACGAGTGCTGAACATAAGCTCGCAAAGGTACTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+	Rhodus          CGAAAAAGCAATGCGTGAACAAGCCAAAAAGATGAATGTAGCTTCTCTACGATCCTCCGACAACCAAAATACGAGTGCTGAACATAAGCTCGCAAAGGTA---------------------------------------------ACCACTAGCGAN---CAAGTA
+	Hedickiana      CGAAAAAGCAATGCGTGAACAAGCCAAAAAGATGAATGTAGCTTCTCTACGATCCTCCGATAACCAAAATACG---------------------------CTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+	Neaylax         CGAAAAAGCAATGCGTGAACAAGCCAAAAAGATGAATGTAGCTTCTCTACGATCCTCCGACAACCAAAATACGAGTGCTGAACATAAGCTCGCAAAGGTACTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+	Isocolus        CGAAAAAGCAATGCGTGAGCAAGCCAAAAAGATGAATGTAGCTTCTCTACGATCCTCCGACAATCAAAACACGAGTGCTGAACATAAGCTCGCAAAAGTA---------------------------------AATATGACNCACGAGACCGATAGCGAACAAGTA
+	Aulacidea       CGAAAAAGCAATGCGTGAGCAAGCCAAAAAGATGAATGTAGCTTCTCTACGATCCTCTGACAACCAAAACACGAGTGCTGAACATAAGCTGGCAAAGGTA---------------------------------------------ACAACTGGCGCTG--AAGNTA
+	Panteliella     CGAAAAAGCAATGCGTGAACAAGCCAAAAAGATGAATGTAGCTTCTCTACGATCCTCCGACAACCAAAATACGAGTGCAGAACATAAGCTCGCAAAGGTT-------------------------------GAGATATCAACCACGAGACCGATAGCGAACAAGTA
+	Barbotinia      TGAAAAAGCTATGCGTGAACAGGCCAAAAAGAWGAATGTAGCTTCTCTACGATCATCCGACAATCAAAATACGAGTGCTGAACATAAACTCGCCAAGGCA------------------------------------------CACGAGACCGATAGCGAACAAGTA
+	Aylax           ----------------------------------------------------------------------------------------------------CTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAT-AACCACGAGACCGATAGCGAACAAGTA
+	Iraella         ????????????????????????????????????????????????????????????????????????????????????????????????????------------------------------------------------------------CAAGTA
+	Timaspis        CGAAAAAGCAATGCGTGAACAAGCAAAAAAGATGAATGTAGCTTCTCTACGATCGTCCGATAATCAGAATACGAGTGCTGAGCATAAGCTCGCAAAGGTA------------------------------------------------ACCGATAGCGAACAAGTA
+	Phanacis_1      ????????????????????????????????????????????????????????????????????????????????????????????????????CTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+	Phanacis_2      ????????????????????????????????????????????????????????????????????????????????????????????????????-------------------------------------------------CCGATAGCGAACAAGTA
+	Eschatocerus    TGAGAAAGCCATGCGAGAACAGGCCAAAAAGATGAATGTAGCTTCCCTGAGATCATCAGATAATCAGAATACAAGCACTGAACACAAACTTGCAAAAGTACTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAT-AACCACGAGACCGATAGCGAACAAGTA
+	Diplolepis      CGAAAAAGCAATGCGCGAACAGGCCAAAAAGATGAACGTAGCTTCTCTACGTTCATCTGACAATGCAAACACAAGTGCTGAGCATAAACTCGCAAAGGTA----------------------------------ATAT-AACCACGAGACCGATAGCGAACAAGTA
+	Pediaspis       CGAAAAAGCAATGCGTGAACAGGCCAAAAAGATGAACGTAGCTTCTCTACGATCATCAGACAATGCAAATACGAGTGCAGAGCATAAACTCGCAAAAGTA----------------------------------ATAT-AACCACGAGACCGATAGCGAACAAGTA
+	Plagiotrochus   TGAAAAAGCAATGCGTGAGCAGGCCAAAAAGATGAATGTGGCTTCCTTACGATCATCGGACAATCAAAATACAAGTGCTGAACATAAACTTGCCAAGGTA--------------------------------------GGTAAACCGAACTGGCGCTG--TTGGCG
+	Andricus        CGAAAAAGCAATGCGCGAACAGGCCAAAAAGATGAACGTGGCTTCCCTACGATCATCTGACAATCAAAATACGAGTGCCGAACACAAGCTCGCTAAGGTT-----------------------------------ATACAACCACGAGACCGATAGCGAACAAGTA
+	Neuroterus      ????????????????????????????????????????????????????????????????????????????????????????????????????------------------------------------------CACGAGACCGATAGCGAACAAGTA
+	Biorhiza        CGAAAAAGCAATGCGTGAACAGGCCAAAAAAATGAACGTCGCTTCCCTTCGATCATCCGACAATCAAAATACGAGTGCTGAGCATAAGCTCGCCAAGGTT----------------------------------------------AGACCGATAGCGAACAAGTA
+	Parnips         CGAAAAAGCTATGCGTGAACAGGCCAAAAAGATGAACGTAGCTTCTCTACGATCATCCGATAATCAAAATTCAAGTGCTGAACATAAGCTCGCGAAGGTA--------------------------------------------------CNATAGCGAACAAGTA
+	Paramblynotus   ????????????????????????????????????????????????????????????????????????????????????????????????????CTCTAAGTGGGTGGTAAACTCCATCTAAGGCTAAATAC-ACCCACGAGACCGATAGCGAACAAGTA
+	Ibalia          ????????????????????????????????????????????????????????????????????????????????????????????????????------------------------CTAANGCTAAATAC-AACCACGAGACCGATAGCGAACAAGTA
+
+	Synergus        CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCTAAAAGATCGAATGGGGAGATTCATCGTCAGCGACTTTGGCTTTCGTGTGGTGC-GTGATGCT--CGAGATTTC----GGTCTCGC
+	Periclistus     CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGACTTTGGCTTTCGTGTGTGTC-GCGATGTT--CGGGGCTTC----GGTCTCGC
+	Ceroptres       CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCCTTGGCTTTCGTGTGGTTT-GCGATGTT--CGGGGCTTC----GGTCTCGC
+	Synophromorpha  CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGACTCTGGCTTTCGTGTGGTTC-GCGATGTT--CGGGGCTTC----GGTCTCGC
+	Xestophanes     CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGACTCTGGCTTTCGTGTGGTTC-GCGATGTT--CGGGACTTT----GGTCTTGC
+	Diastrophus     CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGACTCTGGCTTGCGTGTGGTTC-GCGATGCT--CGGGACTTC----GGTCTCGC
+	Gonaspis        CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGACTCTGGCTTGCGTGTGGTTT-GCGATGCT--CGGGGCTTC----GGTCTCGT
+	Liposthenes_gle CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GCGATGTT--CGAGATTCC----GATCTCGT
+	Liposthenes_ker CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCACCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GCGATGTT--CGAGACTTC----GGTCTCGC
+	Antistrophus    CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GTGATGCT--CGAGATTTT----TGTCTCGT
+	Rhodus          CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGATTC-GCGATGCT--TGAGATTTC----GGTCTCGT
+	Hedickiana      CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GCGATGCT--CGGGATTTC----GGTCTCGT
+	Neaylax         CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GCGATGCT--CGGGATTTC----GGTCTCGT
+	Isocolus        CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GCGATGTT--CGGGATTTC----GGTCTCGC
+	Aulacidea       CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTAT-GCGATGTT--CGGGATTTC----GGTCTCGT
+	Panteliella     CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GCGATGTT--CGGGATTTC----GATCTCGT
+	Barbotinia      CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAACGGCTTTGGCTTTCGTGTGGTTC-GCGATGTT--CGGGACTTC----GGTCTCGC
+	Aylax           CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAACGGCTTTGGCTTTCGTGTGGTTC-GCGATGTT--CGGGTCTTC----GGTCTCGC
+	Iraella         CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAACGGCTTTGGCTTTCGTGTGGTTC-GCGATGTT--CGGGACTTC----GGTCTCGC
+	Timaspis        CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGAGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GTGATGTT--CATGACTTC----GGTCTTGT
+	Phanacis_1      CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GTGATGTT--CAAGACTTC----GGTTTTGC
+	Phanacis_2      CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GTGATGTT--CGTGACTTT----GGTCTTGC
+	Eschatocerus    CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGAGGAGATTCATCGTCAATGTTTTTGGCTTTCCTGTGATTTAGTGATGTTT-TATAATCTTTTTAGATTATAT
+	Diplolepis      CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGGTCGAATGG-GAGACTCATCGTCAATAACTTTGGCTTTCGTGTGATTA-GTGATGTT--CGTAATTTC----GATTACGT
+	Pediaspis       CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCATTGGCTTTCGTGTGGTTC-ACGATGTTTGCAGGACCCTCGCGGGTCTTGT
+	Plagiotrochus   C-GTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTAC-GCGATGCGA-TGGGATTTC----GGTCACAT
+	Andricus        CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-ACGATGTT--CGAGACTTT----GGTCTTG-
+	Neuroterus      CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-ACGATGTT--CGAGACTTT----GGTCTTG-
+	Biorhiza        CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTCTGGCTTTCGTGTGGTTC-ACGATGTT--TGAGACTTT----GGTCTTA-
+	Parnips         CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTC-GCGATGCT--CGTGACTTCT---GGTCACGT
+	Paramblynotus   CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAATCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTTTGTGATGTT--CGAGACCTC----GGTCCTGT
+	Ibalia          CCGTGAGGGAAAGTTGAAAAGAACTTTGAAGAGAGAGTTCAAGAGTACGTGAAACCGTTCAGGGGTAAACCTGAGAAACCCAAAAGATCGAATGGGGAGATTCATCGTCAGCGGCTTTGGCTTTCGTGTGGTTTTGTGATGTTT-CGGGATTTC----GGTCTCGT
+
+	Synergus        GG--TACACGTCCACTGCGTT-ATGTCTAGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GCG-GTTGCCTGTTCTATTGCAT---TTAT--GTATATGGAGCAGACCCCCGGTT--ACCTGAC
+	Periclistus     AG--CACGCGTCCACTGCGGT-ATGTCTAGGGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTTACGACCCGTTAGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTTCGTTGCAC--TTTGT--GCGTACGGAGCAGACCCCCGGTA--ACCTGAC
+	Ceroptres       GA--CACGCGTCCACTGCGGT-ATGTTCTTGGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGCCTGGTGTG-GTTGCCTGTTTCGTCGCACAATTTATTTGTGCACGGAGCAGACCCCCGGAT--ACCCGAC
+	Synophromorpha  AG--CACGCGTCCACTGCGGT-ATGTCTAGGGCC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTTACGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGACTGTTTCGTCGCAC--TCTGTGCGTGTACGGAGCAGACCCCCGATC--ACCTGAC
+	Xestophanes     AG--CACGCGTCCACTGCGGTTATGTCTAGGGAC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTTACGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGACTGTTTCGTCGCAC--TTTGTGCGTGTACGGAGCAGGCCCCCGGTC--ACCTGAC
+	Diastrophus     AG--CACGCGTCCACTGCGGT-ATGTCTAGGGCC-GTCGGCGTGCACTTCTCCTCTAGTAGGACGTTACGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGCTTTGTCGCAC--TCTGT--GTGTACGGAGTAGACCCCCGGTT--ACCTAAC
+	Gonaspis        AG--CACGCGTCCACTGCGGT-ATGTCTAGGGCC-GTCGGCGTGCACTTCTCCTCTAGTAGGACGTTACGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTTCGTCACAC--TCTGT--GTGTACGGAGTAGACCCCCGGTT--ACCTAAC
+	Liposthenes_gle AG--CACACGTCCACTGCGTT-ATGTCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-ATG-GTTGCCTGTTCCGTTGCAT--TT-ATGCGC--ACGGGACAGACCTCCGGTT--ACCTGAC
+	Liposthenes_ker AG--CACGCGTCCACTGCGTT-ATGTCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTCCGTCGCAT--TT-ATGCGC--ACGGGGCAGACCCCCGGTT--ACCTGAC
+	Antistrophus    AG--CACATGTCCACTGCGTT-ATGTCTGGAGTC-GTCGGTGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTTCGTCGCAT--TT-ATGCGT--ACGGTTCAGACCCCCGGGTT-TCCTGAC
+	Rhodus          AG--CACACGTCCACTGCGTTTATGTCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTTTTACGGTCTGG-GTGTGTTGCCTGTTCCGTCGTAT--TTTATACGC--ACGGGGCAGACCCCCGGTT--TCCTGAC
+	Hedickiana      AG--CACGCGTCCACTGCGTT-ATGTCTGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTCCGTCGTAT--TT-ATGCGT--ACGGAGCAGACCCCCGG-TA-TCCTGAC
+	Neaylax         AG--CACGCGTCCACTGCGTT-ATGTCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTCCGTCGTAT--TT-ATGCGC--ACGGAGCAGACCCCCGG-TT-TCCTGAC
+	Isocolus        AG--CACACGTCCACTGCGTT-ATGTCTGAAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTAGG-TGTTGGTCT--ACGGTCTGG-GTG-GTTGCCTGTACCGTCACAT--TT-ATGCGC--ACGGGACAGACCCCCAGATTTACCTGAC
+	Aulacidea       AG--CACGCGTCCACTGCGGT-ATGTCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTAG-GTG-GTTGCCTGTTCCGTCACAT--TT-ATGCGT--ACGGTGCAGACCCCTGGCT--ACCTGAC
+	Panteliella     AG--CACGCGACCACTGCGTT-ATGTCTGGAGTC-GTCGGCGTGCACTTCTCCTCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTCT--ACGGTCTGG-GTG-GTTGCCTGTTCCGTCGCAT--TT-ATGCGC--ACGGGGCAGACCCCTGGGT--ACCTGAC
+	Barbotinia      AG--CACGCGTCCACTGCGGT-ATGTCTGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTCCGTCGCAT--TTTATGCGT--ACGGAGCAGACCCCTGGTA--ACCCGAC
+	Aylax           AG--CACGCGTCCACTGCGGT-ATGTCTGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTTCGTCGCAT--TTTATGCGT--ACGGAGCAGACCCCTGGTA--ACCCGAC
+	Iraella         AG--CACGCGTCCACTGCGGT-ATGTCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTAG-GTG-GTTGCCTGTTCCGTCACAT--TTTATGCGT--ACGGAGCAGACCCCTGGTA--ACCCGAC
+	Timaspis        AG--CACACGTCCACTGCGGT-ATGTCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGAACGTCGTGACCCGTTGGA-TGTTGGTTT--ACGGTC-TGGGTG-GTTGCCTGTTCCATTGCAT---TTATGCGC--ATGGAGCATACCCCTGGTT--ACCTGAC
+	Phanacis_1      AG--CACACGTCCACTGCGGT-ATGTCCAGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGAACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCCTAGGTC-GTTGTCTGTTTCGTCGCAT---TTATGCGC--ACGAAGCATACCCCAGGTT--ACCTGAC
+	Phanacis_2      AG--CACACGTCCACTGCGGT-ATGTCCGGGGTC-GTCGGCGTGCACTTCTCCCCTAGTAGAACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGTTC-TGGGTG-GTTGCCTGTTCCGTTGTAT---TTATACGT--ACGGAGCATACTCCCGGTT--AACTGAC
+	Eschatocerus    GATACACACAATCACTGCGGT-ATGTCTAAATTCTGTCGGCGTGCACTTCTCCTCTAGTAGGACGTCGCGACCCGTTAGAATATTGATTT--ACGGCATAAATTTGATTGTTTGTATTAT-ATATA-TTTATTTATATATAATATATATCATAAATTT-GTNTAAT
+	Diplolepis      GG--CACACTGTCACTGCGGT-ATGTCTGAAGTTTGTCGGCGTGCATTTCTCCCTT-GTAGGACGTCGCGACCCGTTGGG-TGTCGGTTT--ACGGTCTAG-GTG-GTTGACTGTTTTGTCAAAA--TTTTTTTGT--ATAAAGCAGACCCCTGGAT--ACCTGAC
+	Pediaspis       TT--CACGCGTCCACTGCGTT-ATGTCCGGTGTC-GTCGGCGTGCACTTCTCCTCTAGTAGGACGTCGCGACCCGTTGGG-TGTCGGTTT--ACGGTCCGG-GTG-GTTGCCTGTTCTATCGTAC---TTGTTTACGTATAGAGCAGACCCTCGGTA--ATCTGAC
+	Plagiotrochus   AG--CACGCGTCCACTGCGTA-ATGTCCGGAGAC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTCT--ACGGTCCGG-GTG-GTTGCCTGTTCCGTCGCAT--TTTATGCGTT-GCGGAGCAGACCCCCGGTA--ACCCGAC
+	Andricus        CG--CACGCGTCCACTGCGGT-ATGTCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTCCGTCGCAT--TTTATGCGC--ACGGAGCAGACCCCCGTGT--ACCCGAC
+	Neuroterus      GG--CACGCGTCCACTGCGGT-ATGTCTGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTCCGTCGCAT--TTTATGCGC--ACGGAGCAGACCCCCGTGT--ACCCGAC
+	Biorhiza        GG--CACGCGTCCACTGCGGT-ATGTCTGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGTGACCCGTTGGG-TGTTGGTTT--ACGGTCTGG-GTG-GTTGCCTGTTACGTCGCAT--TTTATGCGC--ACGGAGCAGACCCCCGTGT--ACCCGAC
+	Parnips         GG--CACACGTCCACTGCGGT-ATGCCCGGAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGCGACCCGTTGGG-TGTCGGTTT--ACGAACTGG-GTG-GTTGCCTGTTCCGTCGCATGAATAATGTGT--ATGGTGCAGACCCCTGGAT--ATCTGAC
+	Paramblynotus   GA--CACACGATCACTGCGGT-ATGTCTGAAGTC-GTCGGCGTGCACTTCTCCCCTAGTAGGACGTCGCGACCCGTTGGG-TGTCGGTTT--ACGATCTAG-GTG-GTTGCCTGTTCCGTCACACA-TTACTGTGT--ACGGAGTAGACCCCTGGTT--ATCTGAC
+	Ibalia          AG--CACGCGGCCACTGCGGT-ATGTCTGGAGTC-GTCGGCGTGCACTTCTCCTCTAGTAGGACGTCGCGACCCGTTGGG-TGTCGGTTT--ACGGTCTGG-GTGCGTTGCCTGTTCCCTCGCATT-TACGTGCGC-TTGGGACCAGACCCCCGGTACTAACTGAC
+
+	Synergus        CAACTGCCTGGCGGTACTCGTATGGTA-TCGGGCCGCACTTT----GTGCGTCGGGCCCGTCGCAAGCTAGATCAG-TGTT-TCTCGGAGGTGCGGACCTAGTGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GACGGTGT-TCTCGGACAGGCTCAT--TATGA
+	Periclistus     CAACTGCCCGACGGTACTCGTACGGTA-TCGGGCCGCACTTT----GTGCGTCGGGCCCGTCGCAAGCTTGAGCAG-TGTTATCCCGGATGTGCGGACCTAGTGCCGTCACCGGGCCTGGTCAGCTGTTGGTC-GACGGTGT-TCTCGGACTGGCTCAA--AACAA
+	Ceroptres       CAACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTTT---TGTGCGTCGGGCCCGTCGCAAGCGAGATCAG-TGTT-ACCCGGATGTGCGGACCTAGTGCCGTCGCCGGGCCTGCTCAGCTGTTGGTC-GGCGGTGT-TCTCGGACTGGCTCAA--AATTA
+	Synophromorpha  CAACTGCCCGACGGTACTCGTACGGTA-TCGGGCCGCACTTT----GTGCGTCGGGCTCGTCGCAAGCGCGAGCAGGTGTTTATCCGGATGTACGGACCTAGTGCCGTCACCGGGCCTGATCAGCTGTTGGTC-GACGGTGTACCTCGGACTGGCTCAA--AATAA
+	Xestophanes     CAACTGCCCGACGGTACTCGTACGGTA-TCGGGCCGCACTTT----GTGCGTCGGGCCCGTCGCAAGCGCGAGCAGGTGTTTATCCGGATGTACGGACCTAGTGCCGTCACCGGGCCTGATCAGCTGTTGGTC-GACGGTGT-TCTCGGACTGGCTCAA--AATAA
+	Diastrophus     CAACTGCCCGGCGGTCCTCGTACGGTA-TCGGGCCGCACTCT----GTGCGTCGGGCCCGTCGCAAGCGCGAGCAG-TGTT-ACCTGGATGTGCGGACCTAGTGCCGTCACCGGGCCTGATCAGCTGTTGGTC-GACGGTGT-TCTCGGACTGGCTCAA-------
+	Gonaspis        CAACTGCCCGGCGGTCCTCGTACGGTA-TCGGGCCGCACTTT----GTGCGTCGGGCCCGTCGCAAGCGCGAGCAG-TGTT-ACCCGGATGTGCGGACCTAGTGCCGTCACCGGGCCTGATCAGCTGTTGGTC-GACGGTGT-TCTCGGACTGGCTCAA-------
+	Liposthenes_gle CAACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTTA---TGTGCGTCGGACTCGCCGCAAGCGAGATCAG-TGTT-ACCCGTAGGTATGGACATAGTGCCGTCCCCGGGCCTGATCAGCTGTTGGTC-GGCGATGT-TCTTAGACAGGCTCA---CCTAA
+	Liposthenes_ker CAACTGCCCGGCGGTACTCGCATGGTA-TCGGGCCGCACT-A---TGTGCGTCGGGCCCGCCGCAAGCGAGATCAG-TGTT-TCCCGGAGGTGCGGACCTAGCGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCAGACAGGCTCA---TCTAA
+	Antistrophus    CAACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCATTA----TGTGCGTCGGTCCCGCCGCAAGCGAGATCAG-TGTT-TCCCGGAGGTGCGGACCTAGAGCCGTCCCCGGGCCTGGTCAGCTGTTGGTT-GGCGGTGT-TCTTAGACAGGCTCA---TA-GA
+	Rhodus          CAACTGCCTGACGGTACTCGCACGGTA-TCGGGCCGCACTA----TGTGCGTCGGGCCCGCCGCAAGCGAGATCAG-TGTT-TCCCGGTGGTACGGACCTAGCGCCGTCACCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCAGACAGGCTCA---TACAA
+	Hedickiana      CAACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTA----TGTGCGTCGGGCCCGCCGCAAGCGAGATCAG-TGTT-TCCCGGAGGTACGGACCTAGCGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCAGACAGGCTCA---TCCAA
+	Neaylax         CAACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTA----TGTGCGTCGGGCCCGCCGCAAGCGAGATCAG-TGTT-TCCCGGAGGTACGGACCTAGCGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCAGACAGGCTCA---TCTAA
+	Isocolus        CAACTGCCTGGCGGTACTCGCACGGTA-TCGGGCCGCACTAA---TGTGCGTCGGGCCCACCGCAAGCGAGATCAG-TGCT-TCCCGGAGGTTCGGACTTAGCGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GGTGGTGT-TCTCAGACAGGCTCA---TCGAA
+	Aulacidea       CAACTGCCCGGCGGTACTCGCACGGTA-TTGGGCCGCACTA----TGTGCGTCGGACCCGCCGCAAGCGAGATCAG-TGTTTTCCCGGAGTTACGGAGCTAGTGCCGTTCCCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCAGACAGGCTCAT--CAAAA
+	Panteliella     -AACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTA----TGTGCGTCGGGCTCGCCACAAGCGAGATCAG-TGTT-TCCCGGAGGTTCGGACCTAGCGCCGTCCCCGGGCCTGGTCAGCTGTTGGTT-GGCGATGT-TCTCAGACAGGCTCA---TCAAA
+	Barbotinia      CAACTGCTCGGCGGTACTCGCACGGTA-TCGAGCCGCACTA----TGTGCGTCGGGCCCGTCGCAAGCGAGATCAG-TGAT-ACCCGGATGTGCGGACCTAGTGCCGTCACCGGGCCTGGTCAGCTGTTGGCC-GACGGTGT-TCTCGGACAGGCTCAT--TC---
+	Aylax           CAACTGCTCGGCGGTACTCGCACGGTA-TCGAGCCGCACTA----TGTGCGTCGGGCCCGTCGCAAGCGAGATCAG-TGTT-ACCCGGATGTGCGGACTTAGTGCCGTCACCGGGCCTGGTCAGCTGTTGGCC-GACGGTGT-TCTCGGACTGGCTCAT--TT---
+	Iraella         CAACTGCTCGGCGGTACTCGCACGGTA-TCGAGCCGCACTA----TGTGCGTCGGACCCGTCGCAAGCGAGATCAG-TGTT-ACCCGGAGGTGCGGACCTAGTGCCGTCCCCGGGCCTGGTCAGCTGTTGGCC-GGCGGTGT-TCTCGGACAGGCTCAT--TTTGA
+	Timaspis        CAACTGCCCGGCGGTACTCACACGGTA-TCGGGCCGCACTTA---CGTGCGTCAGGCCCGTCGCAAGCGAGATCAG-TGTTT-CCCGGAGGTGCGGACCTAGCGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GACGGTGT-TCTCTGACAGGCTCAT--TGAAA
+	Phanacis_1      CAACTGCCCGGCGGTACTCGCACGGTA-TCGAGCCGCA-TTA---TGTGCGTCGGGCCCGTCGCAAGTGAGATCAG-CGTTA-CCCGGAGGTGCGGACCTAGCGCCGTCCCCGGGCCTGATCAGCTGTTGGTC-GGCGGTGT-TCTCTGACAGGCTCAT--C---A
+	Phanacis_2      CAACTGCCCGGCGGTACTCGTATGGTA-TCGAGCCGCACTTA---TGTGCGTCGGGCCCGTCGCAAGCGAGATCAG-TGTTTACCCGGAGGTGCGGACCTAGCGCCGTCCCCGGGCCTGGTCAGCTGTTGGCC-GTCGGTGT-TCTCTGACAGGCTCAT--T----
+	Eschatocerus    CAATTGTCTGACGGTACTAATAAGGGTATTGGGCCGCATTTTTAATATGCGTCTAATCCGTTACAAGCTAGAATTAGTGTT-ACTTAGTTTTACGAACCAAGTTTCGTTTCTGAGCCTAATCAGCTGTTGGTTTAGCGGTTAATCTTAGACTGGCTCAAAACATAC
+	Diplolepis      CGACTGCCCGGCGGTATTTGAACGGTAATCGAGCCGCACATA---AGTGCGTCAGGCCCACTGCAAGCGAGATCAG-TGTTAACCTGGAGGTGCGGACCTAGTGCCGTCCCCAGGCCTGGTCAGCTGTTGGTC-GGTGGTGT-TCTCGGACTGGCTCAT--AATTA
+	Pediaspis       CGACTGCTCGGCGGTACTCGTAAGGTA-TCGGGCCGCACTTG---TGTGCGTCGGGCCCGCTGCAAGCCGGATCAG-TGTT-ACCCGGAGGTGCGGACCTAGTGCCGTCCCCGGGCCTGATCAGCTGTTGGTC-GGCGGTGT-TCTCGGACTGGCTCAT--CGAAA
+	Plagiotrochus   CAACTGCCCGGCGGTACTCGCAAGGTA-TCGGGCCGCACAT----TGTGCGTCGGGCCCGTCGCAAGCGAGATCAG-TGTTATCCTGGAGGTGCGGACCTAGTGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GACGGTGT-TCTCGGACTGGCTC----TAAAC
+	Andricus        CAACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTTA---CGTGCGTCGGGCCCGTCGCAAGCGAGATCA-GTGTT-ACCCGGAGGTGCGGACCTAGTGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCGGACAGGCTCAT--CCAAA
+	Neuroterus      CAACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTTA---CGTGCGTCGGGCCCGCCGCAAGCGAGATCAAGTGTT-TCCCGGAGGTGCGGACCTAGTGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCGGACAGGCTCAT--CCAAA
+	Biorhiza        CAACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTTA---CGTGCGTCGGGCCCGTCGCAAGCGAGATCA-GTGTT-ACCCGGAGGTGCGGACCTAGTGCCGTCCCTGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCGGACAGGCTCAT--CCAAA
+	Parnips         CGACTGCCTGGCGGTACTCGCACGGTA-TCGAGCCGCACTA----CGTGCGTCGGGCCCGCCGCAAGCGAGATCAG-TGAT-ACCCGGAGGTGCGGACCTAGTGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCGGACTGGCTCAT--CTCAA
+	Paramblynotus   CGACTGCCCGGCGGTACTCGCACGGTA-TCGAGTCGCACTA----TGTGCGTCCGGCCCGCTGCAAGCGAGATCAG-TGTT-ACCCGGAGGTGCGGACCTGGTGCCGTCCCCGGGCCTGCTCAGCTGTTGGTT-AGCGGTGT-TCTCGGACTGACTCGT--CTCAG
+	Ibalia          CGACTGCCCGGCGGTACTCGCACGGTA-TCGGGCCGCACTAA---GGTGCGTCGGACCCGCTGCAAGCGAGATCAG-TGAT-ACCCGGAGGTGCGGACCTAGTGCCGTCCCCGGGCCTGGTCAGCTGTTGGTC-GGCGGTGT-TCTCAGACTGGCTCGT--TTGAA
+
+	Synergus        -------------TACCGGTCGGCGACGCTACTGCTTTAGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGATCTTGCGTCGACTAAGGGAGGAT
+	Periclistus     TTAATA----TGATACCGGTCAGTGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Ceroptres       T----------GTTACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Synophromorpha  ATGA---------TACCGGTCAGTGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAA-CCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Xestophanes     ATGAA--------TACCGGTCAGTGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Diastrophus     -------------TACCGGTCAGTGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCATGCGTCCACTAAGGGAGGAT
+	Gonaspis        -------------TACCGGTCAGTGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTAAAGGTCGACCATGCGTCGACTAAGGGAGGAT
+	Liposthenes_gle AAATT-----TGATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGCAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Liposthenes_ker AA--------TGATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Antistrophus    AAA-------TGATACCGGTCGACGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Rhodus          AAATG-----ATATACCGGTCGGCGACGCTATTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Hedickiana      AAA-------TGATACCGGTCGACGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Neaylax         AAA-------TGATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Isocolus        CA--------TGATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCAAGTCATTGGGACTG--AAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGTGTCGACTG-GGGAGGAT
+	Aulacidea       TATTA-----TGATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACAG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Panteliella     AA--------TGATACCGGTCGACGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Barbotinia      ATA-------TGATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTACGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Aylax           ATA-------TGATACCGGTCAGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Iraella         ATA-------TGATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACTG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Timaspis        AAAAT------GATACCGGTCAGCGACGCTATTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTACGCAAGTCATTGGGACTG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Phanacis_1      AAAAT------GATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCAAGTCATTGGGATTG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Phanacis_2      AAAAG------GATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCAAGTCATTGGGACTGG-TAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Eschatocerus    AATTTTTGTATGATACCTGTCAGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCAAGTCATTGGGATTTAATAAAACCTAAAGGCGTAATGAAAGTAAAGGTCGATCTTGTGTCGATTGAGGGAGGAT
+	Diplolepis      TA----------ATACCGGTCAGCGACGCTATTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACTT--GAAAACCTAAAGGCATAATGAAAGTGAAGGTCGGCCTTGCGTCGACTGAGGGAGGAT
+	Pediaspis       TGTTGTTATATGATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACTG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGATCTTGCGTCGACTGAGGGAGGAT
+	Plagiotrochus   AATTG-----AAATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTTCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGAAATGAAAGTGAAGGTCGACCTCGCGTCGACTGAGGGAGGAT
+	Andricus        AT---------GATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Neuroterus      AT---------GATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Biorhiza        AT---------GATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+	Parnips         TTATT-----GAATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACTG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGACCTTGCGTCGACTGAGGGAGGAT
+	Paramblynotus   TTACT-----GAATACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGACCG--CAAAACCTAAAGGCGTAATGAAAGTGAAGGTCGATTTTGTGTCGACTAAGGGAGGAT
+	Ibalia          TGAAT-----CATTACCGGTCGGCGACGCTACTGCTTTGGGTACTTTCAGGACCCGTCTTGAAACACGGACCAAGGAGTCTAACATGTGCGCGAGTCATTGGGATCG--CAAAACCTAAAGGCATAATGAAAGTGAAGGTCGACCTTGCGTCGACTAAGGGAGGAT
+
+	Synergus        GGGTT-GTGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTTGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Periclistus     GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Ceroptres       GGGTT-GCGTTACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCTAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Synophromorpha  GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Xestophanes     GGGTTTGCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTAAGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Diastrophus     GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Gonaspis        GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Liposthenes_gle GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Liposthenes_ker GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Antistrophus    GGGTT-GCGTTACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACACATTACGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Rhodus          GGGTT-GTGTCACGATGCAGCTCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Hedickiana      GGGTT-GCATTACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Neaylax         GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Isocolus        GGGCT-GCGTTACGATGCAGCCTCGCACTCCCGGGGCGTCTCGTACTCATTACGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Aulacidea       GGGTT-ACGTTACGATGTAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTATGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Panteliella     GGGTT-GCATCACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Barbotinia      GGGTT-ACGTTACGATGTAACCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Aylax           GGGTT-GCGTTACGATGTAACCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Iraella         GGGTT-ACGTTACGATGTAACCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Timaspis        GAGCT-GCGTCACGATGCAGCTCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGGTGGAGGTCCGTAGCGATTCTGACGTG
+	Phanacis_1      GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Phanacis_2      GGGTT-ATATCACGATGTAGCCCCGCACTCCCGGGGCGTCTCATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Eschatocerus    GGGTT-ACATTACGATGTTTCCTCGCACTCCCGGGGCGTTTTATACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Diplolepis      GGACT-GTATTACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTACGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Pediaspis       GGGTT-GCGTTACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Plagiotrochus   GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGCCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Andricus        GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Neuroterus      GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Biorhiza        GGGTT-GCGTCACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Parnips         GGGTT-GCGTTACGATGCAGCCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAATCCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Paramblynotus   GGGTT-GTGTTACGATGCAATCCCGCACTCCCGGGGCGTCTCGTACTCATTGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+	Ibalia          GGGCT-TCATCACGATGAAGCCCCGCACTCCCGGGGCGTCTCGTACTCAATGCGAGTAGAGGCGCACCCAGAGCGTACACGTTGGGACCCGAAAGATGGTGAACTATGCCTGGTCAGGACGAAGTCAGGGGAAACCCTGATGGAGGTCCGTAGCGATTCTGACGTG
+
+	Synergus        CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Periclistus     CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Ceroptres       CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Synophromorpha  CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Xestophanes     CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Diastrophus     CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Gonaspis        CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Liposthenes_gle CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Liposthenes_ker CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Antistrophus    CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Rhodus          CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Hedickiana      CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Neaylax         CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Isocolus        CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Aulacidea       CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Panteliella     CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Barbotinia      CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Aylax           CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Iraella         CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Timaspis        CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Phanacis_1      CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Phanacis_2      CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Eschatocerus    CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTTGCATTAAGCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Diplolepis      CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGAGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Pediaspis       CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGTGTGA-TTGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Plagiotrochus   CAAATCGATCGTAGGAGCTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGAAGCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Andricus        CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Neuroterus      CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Biorhiza        CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Parnips         CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Paramblynotus   CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+	Ibalia          CAAATCGATCGTCGGAACTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGAAGTTTCCCTCAGGATAGCTGGCACTCGCGTGA-GCGAGTCTCATCTGGTAAAGCGAATGATTAGAGGCCTTGGGGCCGAAACGACCTCAACCTAT
+
+	Synergus        TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Periclistus     TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Ceroptres       TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Synophromorpha  TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAATA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Xestophanes     TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAATA--------------------------------------------------
+	Diastrophus     TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAATA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Gonaspis        TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAATA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Liposthenes_gle TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Liposthenes_ker TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Antistrophus    TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAAAA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Rhodus          TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Hedickiana      TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCAAGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Neaylax         TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Isocolus        TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Aulacidea       TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Panteliella     TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTNAAGCCAC---------------------------------------
+	Barbotinia      TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCATTTTT
+	Aylax           TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCATTTTT
+	Iraella         TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCATTTTT
+	Timaspis        TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAATA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Phanacis_1      TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Phanacis_2      TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Eschatocerus    TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAATTTATGAAGCCATGAGATATAATTGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Diplolepis      TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-TTGAAGCCATGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Pediaspis       TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Plagiotrochus   TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTTT-TCGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Andricus        TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Neuroterus      TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Biorhiza        TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACA-GTGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Parnips         TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACG-GTGAAGCCATGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Paramblynotus   TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACT-GTGAAGCCATGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	Ibalia          TCTCAAACTTTAAATGGGTGAGATCTCTGGCTTGCTTGAACG-ATGAAGCCACGAGATTT---CGGATCAGAGTGCCAAGTGGGCCAATTTT
+	;
+end;
+
+begin mrbayes;
+	[This block sets up several different partitions that could be used in the analysis
+	 of this dataset. Note that Ibalia is selected as the outgroup; the default outgroup
+         is the first taxon in the matrix.]
+ 	outgroup Ibalia;
+	charset morphology = 1-166;
+	charset molecules = 167-3246;
+	charset COI = 167-1244;
+	charset COI_1st = 167-1244\3;
+	charset COI_2nd = 168-1244\3;
+	charset COI_3rd = 169-1244\3;
+	charset EF1a = 1245-1611;
+	charset EF1a_2nd = 1245-1611\3;
+	charset EF1a_3rd = 1246-1611\3;
+	charset EF1a_1st = 1247-1611\3;
+	charset LWRh = 1612-2092;
+	charset LWRh_2nd = 1612-2092\3;
+	charset LWRh_3rd = 1613-2092\3;
+	charset LWRh_1st = 1614-2092\3;
+	charset 28S = 2093-3246;
+	charset 28S_Stem = 2160-2267 2361-2401 2489-2528 2539-2565 2577-2647 2671-2760 2768-2827 2848-3194 3220-3246;
+	charset 28S_Loop = 2093-2159 2268-2360 2402-2488 2529-2538 2566-2576 2648-2670 2761-2767 2828-2847 3195-3219;
+	partition Names = 5: morphology, COI, EF1a, LWRh, 28S;
+	partition Nopart = 2: morphology, molecules;
+	partition Morph_mito_nucl_ribo = 4: morphology, COI, EF1a LWRh, 28S;
+	partition Extreme = 12: morphology, COI_1st, COI_2nd, COI_3rd, EF1a_2nd, EF1a_3rd, EF1a_1st, LWRh_2nd, LWRh_3rd, LWRh_1st, 28S_Stem, 28S_Loop;
+end;
+
+begin mrbayes;
+	[The following lines set up a model in which all four genes have their unique GTR + gamma
+	+ proportion of invariable sites model]
+	set partition=Names;
+	lset applyto=(2,3,4,5) nst=6 rates=invgamma;
+	
+	[Unless the parameters are explicitly unlinked, they will be shared across partitions.
+         The unlink command is used to unlink the parameters.]
+	unlink shape=(all) pinvar=(all) statefreq=(all) revmat=(all);
+
+	[The following line allows rates to vary across partitions]
+	prset ratepr=variable;
+end;
diff --git a/test/NTSValidIn/distances.nex b/test/NTSValidIn/distances.nex
new file mode 100644
index 0000000..b448ce9
--- /dev/null
+++ b/test/NTSValidIn/distances.nex
@@ -0,0 +1 @@
+#NEXUS
 
begin taxa; 
dimensions ntax=10;
taxlabels SA_NCA SD_NCA TX_NCA AZ_NCA M1_NCA M2_NCA M3_NCA SD_CA BA_CA M_CA;
end;

begin distances;
dimensions ntax=10;
format triangle=lower;
format nodiagonal;
matrix

SA_NCA
SD_NCA 2.684
TX_NCA 8.052 12.068
AZ_NCA 3.191 1.222 8.716
M1_NCA 17.317 18.715 7.130 12.276
M2_NCA 7.238 12.653 3.791 8.115 4.410
M3_NCA 40.533 46.737 14.716 35.963 14.540 19.157
SD_CA 150.618 149.292 139.763 141.003 138.679 139.287 151.536
BA_CA 139.062 139.891 131.434 132.273 132.680 129.508 145.829 1.541
M_CA 180.366 181.504 165.039 170.901 161.617 162.495 169.179 2.848 4.829;
end;

\ No newline at end of file
diff --git a/test/NTSValidIn/dzmissing_bug.nex b/test/NTSValidIn/dzmissing_bug.nex
new file mode 100644
index 0000000..61b6bc0
--- /dev/null
+++ b/test/NTSValidIn/dzmissing_bug.nex
@@ -0,0 +1,99 @@
+#NEXUS 
+[MacClade 4.08 registered to Joey Slowik, University of Alaska, Fairbanks]
+
+
+BEGIN DATA;
+	DIMENSIONS  NTAX=19 NCHAR=49;
+	FORMAT MISSING=? GAP=- ;
+MATRIX
+[                           10        20        30        40        ]
+[                           .         .         .         .         ]
+
+_I._princeps       0010000011001010010100?01000101100--?--1000011000
+_D._bidentata      001000100??01010001000?00??0000000--?--0100011010
+T._digitatus       100?001010?01110000001100??000011110?001001111000
+T._uintanus        1010001010?01110000101100??0001110--?--1000???000
+E._psychrophila    0011100011101000011010?1100010011110?001010011001
+T._tolli           001000000??01001001011100??01001010-?-01000010111
+W._directa         1010000010?00-00000001110??010110111000100010?011
+G._rubens          101001000??10--1010001111100101110--?--1110010011
+G._rufipes         10101001-??10-11110001101100101101110001000010111
+O._gibosus         10100011-??10-11010001110??01001110-?-00001110111
+S._montigenus      110?1111-??10-11111101110??0100011110001000011000
+S._quoylei         11101111-??10-11111101110??0100011110001000011000
+S._panopeus        11100111-??10-11110101010??0100011111001000011000
+S._montanus        11100111-??10-111100010110?0100011111001000011000
+S._crossoclavis    11110111-??10-111101010110?0110011111001100011000
+S._cynthiae        11111111-??10-111100010110?0110011111011100011000
+S._orites          11111111-??10-111100011110?0110011111111100011000
+S._nesides         11111111-??10-111100011110?1110011111111100011000
+S._aenigmaticus    ?????????????????????11111111100111111111???11?00
+;
+END;
+
+
+BEGIN ASSUMPTIONS;
+	OPTIONS  DEFTYPE=unord PolyTcount=MINSTEPS ;
+END;
+
+
+BEGIN MacClade;
+	Version 4.0  87;
+	LastModified -972251376;
+	FileSettings editor  '0' '0' '1' '1';
+	Singles 100;
+	Editor 00011001111111100100010010 '0' '24' Geneva '9' '100' '1' all;
+	EditorPosition  '46' '53' '819' '1371';
+	TreeWindowPosition  '46' '6' '835' '1390';
+	ListWindow Characters closed Geneva '9' '50' '10' '273' '352' 000;
+	ListWindow Taxa closed Geneva '9' '50' '10' '273' '490' 100000000;
+	ListWindow Trees closed Geneva '9' '50' '10' '276' '490' ;
+	ListWindow TypeSets closed Geneva '9' '50' '10' '276' '490' ;
+	ListWindow WtSets closed Geneva '9' '50' '10' '276' '490' ;
+	ListWindow ExSets closed Geneva '9' '50' '10' '276' '490' ;
+	ListWindow CharSets closed Geneva '9' '50' '10' '276' '490' ;
+	ListWindow TaxSets closed Geneva '9' '50' '10' '276' '490' ;
+	ListWindow CharPartitions closed Geneva '9' '50' '10' '276' '490' ;
+	ListWindow CharPartNames closed Geneva '9' '50' '10' '276' '490' ;
+	ListWindow WtSets closed Geneva '9' '50' '10' '276' '490' ;
+	ChartWindowPosition  '52' '30' '818' '1380';
+	StateNamesSymbols closed Geneva '9' '10' '50' '30' '148' '220';
+	WindowOrder  Data;
+	OtherSymbols &/ 00 ?-;
+	Correlation  '0' '0' '1000' '0' '0' 10011010;
+	Salmo 00000001;
+	EditorFile  '2';
+	ExportHTML _ MOSS  '100' 110000;
+	PrettyPrint 10;
+	EditorToolsPosition  '707' '93' '115' '165';
+	TreeWindowProgram 10;
+	TreeWindow 0000;
+	Continuous  '0' '3' 1;
+	Calculations 0000001;
+	SummaryMode  '0' '0' 0;
+	Charts  Geneva '9' (normal) 0010;
+	NexusOptions  '0' '0' '50' 001011001;
+	TipLabel  '1';
+	TreeFont  Geneva '9' (normal);
+	TreeShape  1.0 1.0 0100;
+	TraceLabels 0101;
+	ChartColors  '0' '0' '65535' '9' '0' 1;
+	ChartBiggestSpot 1;
+	ChartPercent 10;
+	ChartBarWidth  '10' 1;
+	ChartVerticalAxis 10101;
+	ChartMinMax  '0';
+	TraceAllChangesDisplay  '1' 1;
+	BarsOnBranchesDisplay  '0' '0' '60000' '10000' '10000' '10000' '10000' '60000' '65000' '65000' '65000' '6' '1' 0000101;
+	ContinuousBranchLabels 0;
+	AllStatesBranchLabels 1;
+	IndexNotation  '2' 1;
+	PrintTree  10.00 '2' '2' '2' '2' '2' '2' '2' '2' '2' '2' '2' Geneva '9' (normal) Geneva '10' (normal) Geneva '9' (normal) Geneva '9' (normal) Geneva '9' (bold ) Geneva '9' (normal) Geneva '9' (normal) '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '1' '1' '1' '0' '-8193' '-39' '4' '-40' '0' '1' '2' '1' '8' '0' '0' '0' '2' 1000111000000000000100000111000;
+	MatchChar 00 .;
+	EntryInterpretation 01;
+	ColorOptions 00;
+	TreeTools  '0' '5' '4' '0' '10' '4' '0' 00100111111101110;
+	EditorTools  '0' '0' '0' '1000' '0' '0' '6' '3' '1' 100010101110011;
+	PairAlign  '2' '2' '3' '2' '1' '1' '2' '1' '3' 1010;
+	BothTools  '1';
+END;
diff --git a/test/NTSValidIn/kim.nex b/test/NTSValidIn/kim.nex
new file mode 100755
index 0000000..a9604cc
--- /dev/null
+++ b/test/NTSValidIn/kim.nex
@@ -0,0 +1,444 @@
+#NEXUS 
+[This is an example of a model using a complex partitioned model, including a doublet partition and a partition
+ analyzed using a codon model.]
+
+[Data from Kim, S., K. M. Kjer, and C. N. Duckett. 2003. Comparison between molecular and 
+    morphological-based phylogenies of galerucine/alticine leaf beetles 
+    (Coleoptera: Chrysomelidae). Insect Syst. Evol. 34:53-64.]
+
+begin data;
+	dimensions ntax=27 nchar=1742;
+	format datatype=mixed(rna:1-516,rna:517-1398,protein:1399-1692,standard:1693-1742) gap=- missing=? interleave=yes;
+	matrix
+	[                                                              1                  ]
+	[                                                    11  1111  1111222  2222222333]
+	[                                           12345678901  2345  6789012  3456789012]
+	[                                           --------------------------------------]
+	Orsodacne       [---------------kaCGu-CAG]  gGGUAAACCUN  AGaA  AcccnaA  AGGUCGAAUg
+	Chrysomela      [-----------------CGUUCAG]  GGGUAAACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Altica          [------------------------]  -----------  ----  -CCCGAA  AGGUCGAAAG
+	Agelastica      [----------------UUAUUCAG]  GGGUAAACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Monolepta       [---------CGUGAA-CCGUUCAG]  GGGUAAACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Phyllobrotica   [------------------------]  ---------UG  ANAA  ACCCGAA  AGGUCGAAAG
+	Allochroma      [------------nUgaCCGUUCAg]  GGGUAAaCcUG  AgAA  aCCcGAA  AGGUCgAAAG
+	Chrysolina      [-------------------UUCAG]  GGGUAAACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Aphthona        [AGUCAAGAGUACGUGACCGUUCAG]  GGGUAACCCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Chaetocnema     [------------------------]  -----------  ----  -CCCGAA  AGGUCGAAAG
+	Systena         [------------------------]  ---CCGACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Monocesta       [------------------------]  ----------G  AGAA  ACCCGAA  AGGUCGAAAG
+	Disonycha       [------------------------]  -----------  --AA  ACCCGAA  AGGUCGAAAG
+	Blepharida      [------------------------]  -----------  ----  -CCCGAA  AGGUCGAAAG
+	Galeruca        [--------------CAUCGUUCAG]  GGGUAAACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Orthaltica      [---------------ACCGUUCAG]  GGGUAAACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Paropsis        [-------------------UUCAG]  GGGUAAACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Timarcha        [------------------------]  -----AACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Zygograma       [------------UGAACCGUUCAG]  GGGUAAACCUG  AGAA  ACCCGAA  AGGUCGAAAG
+	Syneta          [------------------------]  -----GAACUU  ACAA  ACCCGAA  AGGUCGAAAG
+	Dibolia         [------aguacguaaaccguucag]  ggguaaaccug  agaa  acccgaa  aggucgaaag
+	Sangariola      [------------------------]  -----------  ----  -CCCGAA  AGGUCGAAAG
+	Aulacophora     [------------------------]  -----------  AGAA  ACCCGAA  AGGUCGAAAG
+	Diabrotica      [---------------ACcGuUCA-]  GGGUAAACcUG  AgAA  ACCcGAA  AG-UCGAAAG
+	Diorhabda       [------------------------]  -----------  AGAA  ACCCGAA  AGGUCGAAAG
+	Schematiza      [------------------------]  -----????UG  AGAA  ACCCGAA  AGGUCGAAAG
+	Oides           [--UCAAGAGUACGUGACCGUU-AG]  GGGUAACCCUG  AGAA  ACCCGAA  AGGUCGAAAG
+		
+	[               *2             2a          2b        2c                               2e       I1                I2              2ei                         2ci     2bi  2ai              2i*   ]
+	[                                                                                                      1111 1111 111111111111111 1111  111111111111 1111111  11111   111  1111111  111111  111111]
+	[               333333 344444  4444455  5  555  555  56666  66666677 77777 777888888  8888  99 999999990000 0000 001111111111222 2222  222333333333 3444444  44445   555  5555556  666666  666777]
+	[               345678 901234  5678901  2  345  678  90123  45678901 23456 789012345  6789  01 234567890123 4567 890123456789012 3456  789012345678 9012345  67890   123  4567890  123456  789012]
+	[               ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------]
+	Orsodacne       gGGAAA UUCAuU  crCGUUU  C  NAA  --C  rUsgg  s-nc---- -CG-- ggUyraCgN  CGAG  AC GGGCN-CGCcg- UUcg Cr-CCAC-------G CUcg  CUCCGUCGUCC- GGCGCGC  CCGGC   GUC  GAACGCG  UGCACU  UUuCcC
+	Chrysomela      GGGAAA UUCAUU  CGCGUUU  C  GUC  --U  GCCGG  C-GGUGAG -CG-- GGUGCGUGA  CGAA  CG GUG--------- UUCG ---CGCC-------G UUCG  CGCUGCUCGUUU UCUGGCA  CCGGU   GAC  GAACGCG  UGCACU  UUUCCC
+	Altica          AGGAAA UUCAUU  CGCGUCU  C  GAC  --U  GUCGG  A-GUUGAA -AG-- UUUGUGUGA  CGGA  UU ACG--------- UUUA ---CGUC-------G UCCG  CGCCUCUCGUU- CUUCGAA  CCGAU   GUG  GAACGCG  UGCACU  UUUCCU
+	Agelastica      AGGAAA UUCAUU  CGCGUUU  C  GAU  --C  GUCGA  A-GUCGAA -CG-- UUCGUAUGA  CGAA  CG ACGU-------- UUCG --GCGUC-------G UUUG  CUUCCUACGUU- UUUCUAA  UCGAU   GUC  GAACGCG  UGCACU  UUUCCU
+	Monolepta       AGGAAA UUCAUU  CGCGUUU  C  GGC  ---  GUCGA  A-GUUAAG -CG-- UUUGUAUGA  CGAA  AG AUGU-------- UUCG --GCGUU-------U UUUG  CUUCUUACGUU- UUUCGAG  UCGAU   GUC  GAACGCG  UGCACU  UUUCCU
+	Phyllobrotica   GGGAAA UUCAUU  CGCGUUU  C  GGC  --U  GUCGA  A-GUUGAA -UG-- UAUGUAUGA  CGGA  UG GCGU-------- UUCG --ACGUC-------G UCUG  CAUCUUGCGUU- CUUCAAG  UCGAU   GUC  GAACGCG  UGCACU  UUUCCU
+	Allochroma      GGGAAA UUCaUU  CgCGUUU  C  GgC  --U  GUCGg  A-GUUGgA -UG-- UUCGUGUGA  CGgA  Ug ACG--------- UUCA ---CGUC-------G UUUG  CaCCUUACGUC- UUUCGAA  UCGAC   GUC  GAACGCG  UGCaCU  UUUCCU
+	Chrysolina      GGGAAA UUCAUU  CGCGUUU  C  GAU  --C  GUUGG  C-GAUUGA -CG-- GACUAGUGA  CGGA  UG GCG--------- UUCG ---CGUC-------G UCUG  CGCAGUCUGUU- UAUCGAA  CUGAC   GUC  GAACGCG  UGCACU  UUUCCC
+	Aphthona        GGGAAA UUCAUU  CGCGUUU  C  GGC  --C  GUCAG  A-GGU-GA -UG-- UUGU-GUGA  CGGA  UG GCG--------- UUCG ---CGUC-------G UCUG  CGCCUUGCGUC- CAUCUAA  CUGGC   GUC  GAACGCG  UGCACU  UUUCCC
+	Chaetocnema     GGGAAA UUCAUU  CGCGUUU  C  GAC  --C  GUCGG  A-GUUGGA -CG-- UUCGAGUGA  CGGA  CG ACG--------- UUCG -CGCGUC-------G UCUG  CGCCGUUCGUU- CAUCGAA  CUGAC   GUC  GAACGCG  UGCACU  UUUCCC
+	Systena         AGGAAA UUCAUU  CGCGUUU  C  GAU  UUU  GUCGG  A-GUUGAG -CG-- UUUCGGCGA  CGAA  UG ACG--------- UUUU AUAUGUC-------G UUUG  AGUCAUUCGUU- CUUCGAA  CCGAU   AUC  GAACGCG  UGCACU  UUUCCU
+	Monocesta       AGGAAA UUCAUU  CGCGUUU  C  GAU  --C  GUCGA  AAGUUGAA -UGUA UUUGUAUGA  CGGA  UG ACGUGUGUGCGC UUCG GCUCUCUCAUGUUUA UCCG  CAUAUUAUAUU- CUUCGAA  UCGAU   AUC  GAACGCG  UGCACU  UUUCCU
+	Disonycha       GGGAAA UUCAUU  CGCGUUU  C  GAU  --G  AUCGA  A-GGCUGG -CG-- UGUUUAUGA  CGGA  UC GUAUA------- ???? U---UUUUAUAUU-G UUCG  CAUAUCACGUU- CGUUUAA  UCGAU   UUC  GAACGCG  UGCACU  UUUCCU
+	Blepharida      GGGAAA UUCAUU  CGCGUUU  C  AGC  --C  GUUGG  A-GUUGAA -CG-- UUCGCGUGA  CGGA  CG ACG--------- UUCG ---CGUC-------G UUUG  CGCCUUUCGUU- CUACUAA  CCGAC   GUU  GAACGCG  UGCACU  UUUCCU
+	Galeruca        AGGAAA UUCAUU  CGCGUUU  C  GAU  --C  GUUGA  A-GUUGAA -UG-- UUUGUAUGA  CGGA  UG AUGU------GC UUCG --GCGC--AUGU--G UUUG  CAUCUUAUGUU- CUUCGAA  UCGAU   GUC  GAACGCG  UGCACU  UUUCCU
+	Orthaltica      GGGAAA UUCAUU  CGCGUUU  C  GGC  --C  GUCGG  A-GUUGUG -CG-- UUCGUGUGA  CGGA  UG GCG--------- CUU- --GCGUC-------G UCCG  CGCCUUACGUG- CUUCGAA  CCGGC   GUC  GAACGCG  UGCACU  UUUCCU
+	Paropsis        GGGAAA UUCAUU  CGCGUUU  C  GAC  --U  GUCGG  C-GAUAAG -UG-- AUCUAGUGA  CGGA  UG GCG--------- UUCG -CGCGUC-------G UCUG  CGCAGUUUAUU- UAUCGAA  CCGGC   GUC  GAACGCG  UGCACU  UUUCCU
+	Timarcha        GGGAAA UUCAUU  CGCGUUU  C  GAU  --U  GUCGG  C-GAUAAA -CG-- AGCGAGUGA  CGGA  CG ACGU----ACG- UUCG -CGCGUAC--GUU-U UCUG  CUUCUUUCGUU- UAGGUAA  -CGAC   GCC  GAACGCC  UGCACU  UUUCCC
+	Zygograma       GGGAAA UUCAUU  CGCGUUU  C  GGU  --C  GUCGG  C-UAUCGA -CG-- GGCUAGUGA  CGG-  UC GGCG-------- UUCG ---CGUC-------G UCUG  CGCAGUCUGUC- GAUUGAA  CCGAU   AUC  GAACGCG  UGCACU  UUUCCC
+	Syneta          GGGAAA UUCAUU  CGCGUUU  C  GAC  --C  GUCGA  U-GACGAG -CG-- GUCGAGUGA  CGGA  UG GCG--------- UUCG ---CGUC-------G UCCG  CGCCUUCUGUU- CGUAGAA  UCGGC   GUC  GAACGCG  UGCACU  UUUCCC
+	Dibolia         gggaaa uucauu  cgcguuu  c  ggc  -uc  gucgg  a-ggagaa -CG-- ucggcguga  cgga  ug acg--------- uucg -cgcguc-------g uucg  cacccuucguu- cuuuuua  ccggc   guc  gaacgug  ugcacu  uuuccu
+	Sangariola      GGGAAA UUCAUU  CGCGUUU  C  GAC  --U  GUCGG  A-GUUGGA -CG-- UUCGAGUGA  CGGA  CG ACG--------- UUUG ---CGCG-------G UUUG  CGCCUUACGUU- UAUCGAA  CCGAC   GUC  GAACGCG  UGCACU  UUUCCU
+	Aulacophora     GGGAAA UUCAUU  CCCUUUU  C  GGC  --U  GUCGA  C-GUUAAA -CG-- UUUAUACGA  CGGA  UG GCGU-------- UUCG --GCGUC-------G UCUG  CGUUUUAUGUU- UUUCGAA  UCGAU   GUC  GAACGCG  UGCACU  UUUCCU
+	Diabrotica      AGgAAA UUCAUU  CGCGUUU  C  GAC  --U  GUCGA  A-GUUGGA -UG-- UUUGUAUGA  CGGA  UA GCGU-------- UUCG --GCGUC-------G UCCG  CUUCUUAUAUU- CUUCGUG  UCGAU   GUC  GAACGCG  UGCACU  UUUCCU
+	Diorhabda       AGGAAA UUCAUU  CGCGUUU  C  GAU  --A  AUUGA  A-GUUGAA CCG-- UUUGUAUGA  CGGA  UA UUGU--UUGUGU UUCG GCAUAUUAC-AAUAA AUCG  CGUUUUACGUU- UUUCUAA  UCGAU   AUC  GAACGCG  UGCACU  UUUCCU
+	Schematiza      GGGAAA UUCAUU  CGCGUUU  C  GAu  --C  GUCUA  C-GUUAAA -UG-- UUUGUAUGA  CGGA  UG AGAUA-CGUCG- UUCG CGGCGCCU----GAG UCCG  CAUCUUAUGUU- UAUCUAA  UAGAU   GUC  GAACGCG  UGCACU  UUUCCU
+	Oides           GGGAAA UUCAUU  CGCGUUU  C  GAU  --U  GUUGA  U-AUCGAG -CA-- UUAGUAUGA  CGGU  AA aCGu-------- UUCG AUGu---------UU AUUG  CAUCUUUuGGU- CUUUuAA  UCGAU   AUC  GAACGCG  UGCACU  UUUCCU
+	
+	[                          3            x        xa     y               z                za        I3                  zai             zi               yi          xai   xi    ]
+	[               111111111  111111  111  111111   1112   222222  222222  22222  22222222  22222222  222222222222222222  22222222  2222  22222 222222222  222222  22  2222  222222]
+	[               777777788  888888  889  999999   9990   000000  000111  11111  11222222  22223333  333333444444444455  55555555  6666  66666 677777777  778888  88  8888  999999]
+	[               345678901  234567  890  123456   7890   123456  789012  34567  89012345  67890123  456789012345678901  23456789  0123  45678 901234567  890123  45  6789  012345]
+	[               ----------------------------------------------------------------------------------------------------------------------------------------------------------------]
+	Orsodacne       CUAGUAGGA  CGUCGU  GAU  CCGUUG   GACG   UCGGUC  UACGGC  CCGCC  GGUUAGCC  CGUCCGGG  GUAAACGCUUCGCGGCGU  CCCGGGCG  GACC  GGCGG UGU---CCC  GGCCGG  CU  CGUC  CGACGG
+	Chrysomela      CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCGGUC  UAAGGC  UCGAG  GUGGAGCC  CGCGUGGU  CGCUUCGGCGU-------  GUCGCGCG  GACC  CUCGA AAU---CCU  GGCCGA  CU  UGCU  CGACGG
+	Altica          CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGAC  UUGGG  GUGGAGCC  CACAUGGC  UUUU--------------  GUCGCGUG  GACC  CUCGA UGU---UCC  GACAGA  CU  CGCU  CGACGG
+	Agelastica      CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGAC  UCGGG  GCGGAGCC  CGUGCGGU  UAUUAUUAUUUUA-----  AUCGUGCG  GACC  CUCGA UGU---UCC  GACAGA  CU  CGCU  CGACGG
+	Monolepta       CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAGGGU  UCGAG  GUGGAGCC  CACGUAAU  UUC--------------G  AUUGCGUG  GACC  CUUGA UGU---CCC  GACAGA  CU  CGCU  CGACGG
+	Phyllobrotica   CUAGUAGAA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGGU  GUGAG  GUGUAGCC  CACGCGAU  UUUU-------------G  AUCGUGUG  GACC  CUCGA UAU---CCC  GACAGA  CU  CGCU  CGACGG
+	Allochroma      CUAGUAGGa  CGUCgC  GAU  CCGUUG   GGUG   UCUGUC  uAAgAC  UCGGG  GUGgAGUC  CACGUGGC  UUUU-------------G  GUCGCGUG  AaCC  CUCGA UGU---GCC  GaCAGA  CU  CGCU  CGACGG
+	Chrysolina      CUAGUAGGA  CGUUGC  GAU  CCGUUG   GGUG   UCGGUC  UAAGGC  CCGAG  GUGGAGCC  CACGUGAA  CGUUUCGGCG--------  UUUGCGUG  GACC  CUCGG UGU---CCC  GGUCGA  CU  CGCU  CGACGG
+	Aphthona        CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGAC  UCGGG  GUGGAGCC  CAGAUGAC  CACG--------------  GUCGUUUG  GACC  CUCGA UGU---UCC  GACAGA  CU  CGCU  CGACGG
+	Chaetocnema     CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UUUGUC  UAAGAC  UUGAG  GUGGAGCC  CGCGAGAC  UUA--------------G  GUCGCGCG  GACC  CUUGA UGU---UCC  GACCAA  CC  CGCU  CGACGG
+	Systena         CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGAC  CCGAG  GUGGAGUC  CACGAAGC  GUUUUUC-----------  GCUuCGUG  AACC  CUUGG UGUAUAUCC  GACAGA  CU  CGCU  CGACGG
+	Monocesta       CUAGUAGAA  CGUCGU  GAU  CCGUUG   GGUG   UUUGUC  UAAGAC  UCGAG  GUGGAGCC  CACAUGAU  UUUUUGUC---------G  AUUAUGUG  GACC  CUCUA UGUUCUUCC  GACAGA  CU  CGCU  CGACGG
+	Disonycha       CCAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGAA  UUGAG  GUGGAGAC  CAUGUGGC  UUUUU------------A  GUUGCUUG  GACC  CUUGA AUU---UCC  GACAGA  CU  CGCU  CGACGG
+	Blepharida      CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGAC  UCGGG  GUGGAGCC  CGCGUGGC  AUUUU-------------  GUCGCGCG  GACC  CUCGA AGU---UCC  GACAGA  CU  CGCU  CGACGG
+	Galeruca        CUAGUAGGA  CGUCGU  GAU  CCGUUG   GGUG   UCUGUC  UAAGAC  UCGGG  GUGGAGAC  CACGUGAU  UUUUC------------G  AUUAUGUG  GACC  CUCGA UGU---UCC  GACAGA  CU  CGCU  CGACGG
+	Orthaltica      CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGGC  UUGGG  GUGGAGCC  CACGUGGA  CGUUUCACGACGUA----  UCCGCGUG  GACC  CUCGA CGU---CCC  GGCAGA  CU  CGCU  CGACGG
+	Paropsis        CUAGUAGGA  CGUUGC  GAU  CCGUUG   GGUG   UCGGUC  UAAGGC  UCGAG  GUGGAGCC  CACGUGGA  CGUUUCGGCG--------  UUCGCGUG  GACc  CUCGG UGU---CCC  GGCCGA  CU  CGCU  CGACGG
+	Timarcha        CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCGGUC  UAAGGC  UCGCG  GUGGAGCC  CGCGCGGU  UUAUA-------------  GCcGCGCG  GACC  CGCGA UAU---CCC  GACCGA  CC  UGCU  CGACGG
+	Zygograma       CUAGUAGGA  CGUUGC  GAU  CCGUUG   GGUG   UCGGUC  UAAGGC  UCGAG  GUGGAGCC  CACGCGAA  CGUUUCGGCGUC------  UUCGCGUG  GACC  CUCGA UGU---CCC  GGCCGA  CU  CGCU  CGACGG
+	Syneta          CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCGGUC  UAAGGC  CCUCG  GUGGAGCC  CAGUAGAC  GUUUCGAC----------  GUUGCGUG  GACC  CGAGG CGU---CCC  GGCCGG  CC  CGCU  CGACGG
+	Dibolia         cuaguacca  cgucgc  gau  ucguug   ggug   ucuguc  uaagac  ucgag  guggagcc  cgcgcgau  uu------------aaac  gucgc-cg  gacc  cucga ugc---ucc  gacaga  cu  cgcu  cgacgg
+	Sangariola      CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UUUGUC  UAAGAC  UCGAG  GUGGAGUC  CACGUGGC  UUUU-------------G  GUCGCGUG  AACC  CUUGA UGU---GCC  GACAGA  CU  CGCU  CGACGG
+	Aulacophora     CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGGU  UCGAA  GUGGAGAC  CACGCGAU  UUUUUU-----------G  AUCGUAUG  GACC  UUCGU UAU---CCC  GACAGA  CU  CGCU  CGACGG
+	Diabrotica      CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UCUGUC  UAAGAC  UCGAG  GUGGAGCC  CGCGUAAU  UUUU-------------A  AUUAUGCG  GACC  CUUGG UGU---UCC  GACAGA  CU  CACU  CGACGG
+	Diorhabda       CUAGUAGGA  CGUCGU  GAU  CCGUUG   GGUG   UCUGUC  UAAGAC  UCGAG  GUGGAGAC  CACUUGAU  UUUAUUC---------GA  AUUAggUg  GACC  CUCGA UGU---UCC  GACAGA  CC  CGCU  CGACGG
+	Schematiza      CUAGUAGGA  CGUCGU  GAU  CCGUUG   GGUG   UCUGUC  UAAGGC  UCGGG  GUGGAGCC  CACGUGAU  UUUUU------------A  AUUAUGUG  GACC  CUCGA UGU---UCC  GACAGA  CU  CGCU  CGACGG
+	Oides           CUAGUAGGA  CGUCGC  GAU  CCGUUG   GGUG   UUUGUC  UAAGGU  UUGAG  GUGGAGCC  CGCGUGAU  UUCUU------------A  AUUGCGCG  GACC  CUCAU UAU---CCC  GACAGA  CU  CGCU  CGACGG
+	
+	[                        3a            3b   I4             3bi ]
+	[               22223333 33333 3333333 3333 33333333  3333 3333]
+	[               99990000 00000 0111111 1111 22222222  2233 3333]
+	[               67890123 45678 9012345 6789 01234567  8901 2345]
+	[               -----------------------------------------------]
+	Orsodacne       UAAGAAUU AGGCG CGGGGCC GCUA --CCACU-  CGGU UAGC
+	Chrysomela      UAUAAGGA AGGCG CGAGGCC GCUA -----CU-  CAGU UAGC
+	Altica          UAUGCUAA AGGCG CGGGGCC GCUA -----CU-  CAGU UAGC
+	Agelastica      UACGCUAA UGGCG UGGGGCC GCUA ------UC  UUUU UAGC
+	Monolepta       UAUGCUAA UGGCG UAAGGCC GCUA -----CUU  AAGU UAGC
+	Phyllobrotica   UAUACUAA UGGCG CGAGGCC GCUA -----CUU  AAGU UAGC
+	Allochroma      UAUGCUAA UGGCG CGGGgCC GCUA -----Cu-  CAGu UAGC
+	Chrysolina      UAUAAUGA UGGCG CGGGGCC GCUA -----CU-  UAGU UAGC
+	Aphthona        UAUGCUAA AGGCG CGGGGCC GCUA ------UU  CAGU UAGC
+	Chaetocnema     UAUACGAA UGGCG CCGGGCC GCUA C---ACU-  UAGU UAGC
+	Systena         UAUGCAAA UGGCG CGAGGCC GCUA -A--A---  CAAU UAGC
+	Monocesta       UAUAAAUA UGGCG CGGGGCC GCUA CACAUUA-  CAGU UAGC
+	Disonycha       UAUAACGA UGGCG CAAGGCC GCUA C--AUU--  CAGU UAGC
+	Blepharida      UAUGCUAA UGGCG CGGGGCC GCUA ------UU  CAGU UAGC
+	Galeruca        UAUAAAUA UGGCG CGGGGCC GCUA -----CAU  UAGU UAGC
+	Orthaltica      UACAUAGA UGGCG UGGGGCC GCUA -----CU-  CAGU UAGC
+	Paropsis        UAUAAUGA UGGCG CGGGGCC GCUA -----CU-  CAGU UAGC
+	Timarcha        UAUAAAGA UGGCG CGAGGCC GCUA CUUCGUA-  GAAU UAGC
+	Zygograma       UAUAAUGA UGGCG CGGGGCC GCUA -----CA-  UAGU UAGC
+	Syneta          UAUCAUUA AGGCG CGAGGCC GCUA -----CUA  CAGU UAGC
+	Dibolia         uaugcuaa uggcg cgaggcc gcua -------u  caau uagc
+	Sangariola      UAUGCUAA UGGCG CGGGGCC GCUA -----CUC  UAGU UAGC
+	Aulacophora     UAUACUAA UGGCG CGAGGCC GCUA -----UUU  UAAU UAGC
+	Diabrotica      UAUACUAA UGGCG CGGGgCC GCUA -----CUU  UAGU UAGC
+	Diorhabda       UAGAAAUA UGGCG CGGGGCC GCUA -----GAU  UAAU UAGC
+	Schematiza      UAUACAUA UGGCG CGGGGCC GCUA -----CA-  CAGU UAGC
+	Oides           UAUAUUGA UGGCG CGGGGCC GCUA -----CUU  UAGU UAGC
+	
+	[               3b2       3c          3d     3e                 3f         3g                3gi       3fi       3ei          3di      3ci                    3b2i  ]
+	[               333333 3  3333333  3  3333   3333333  33333 33  33333  33  333333  33333333  33333  3  33334  4  4444444  44  4444  4  4444444  44444444444 4 444444]
+	[               333344 4  4444444  5  5555   5555566  66666 66  67777  77  777788  88888888  99999  9  99990  0  0000000  01  1111  1  1111222  22222223333 3 333334]
+	[               678901 2  3456789  0  1234   5678901  23456 78  90123  45  678901  23456789  01234  5  67890  1  2345678  90  1234  5  6789012  34567890123 4 567890]
+	[               ----------------------------------------------------------------------------------------------------------------------------------------------------]
+	Orsodacne       GUCCGG C  CCGCCGC  A  AGCA   CGUCCGG  CGUUC GG  CACGG  CG  AU-CGr  ACCCGGUG  CCGGU  C  CCGUC  C  CCCGGCG  AC  UGUU  G  GCGGCGG  AGCU------- C UCGGAC
+	Chrysomela      GUUCGG C  UCGCGGC  A  AGCG   CGUUCGG  CGU-- UU  ACGGC  GA  -U-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CCGGACG  AC  UGUU  G  GCCGCGA  UGCU------- C UCGAAC
+	Altica          GUUCGG C  CCGUAGC  A  AGCA   CGUUCUG  UGU-- UU  GACGG  UG  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CAGAACG  AC  UGUU  G  GUUGCGG  UGUU------- C UCGAAC
+	Agelastica      GUUCGG C  CCGUAGC  A  AGCG   CGUUUUG  UGU-- UU  gACGG  UC  AU-CGG  AUCUAACG  CCGAU  C  UCGUC  C  CGAAACG  AC  UGUU  G  GUUACGG  CGUU------- C UCGAAC
+	Monolepta       GUUCGG C  CCGUAGC  A  AGCG   CGUUCUG  UG--- UU  GACGG  CC  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUGCGG  UGUU------- C UCGAAC
+	Phyllobrotica   GUUCGG C  CCGUAGC  A  AGCA   CGUUCUG  CGU-- Uw  GAUGG  WC  AU-CGG  ACCUGGUG  CCGAU  C  CUGUC  C  CGGAACG  AC  UGUU  G  GUUACGG  NGUU------- C UCGAAC
+	Allochroma      GUUCGG C  CCGUGGC  A  AGCa   CGUUcUG  UGU-- UU  GACGg  CG  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CGGAaCG  AC  UGUu  G  GcUaCgG  UGuU------- C UCGAAC
+	Chrysolina      GUUCGG C  UCGUGGC  A  AGCG   CGUUCGG  UGU-- UU  GACGG  CG  AU-CGG  ACCUAGUG  CCGAU  C  CUGUC  C  CCGGGCG  AC  UGUU  G  GCUGCGA  UGUC------- C UCGAAC
+	Aphthona        GUUCGG C  CCGUAUC  A  AGCA   CGUUCUG  CGU-- UU  GAUGG  CG  AU-CGG  AUCUGAUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GGUGCGG  UGUU------- C UCGAAC
+	Chaetocnema     GUUCGG G  CCGUAGC  A  AGCA   CGUUCCG  CGU-- UU  GACGG  CG  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUACGG  UGUU------- C UCGAAC
+	Systena         GUUCGG C  UCGUAGC  A  AGCA   CGUUCCG  UGU-- UU  GAUGG  UG  AU-CGG  ACCUAGUG  CCGAU  U  CUGUC  C  CGGAAUG  AC  UGUU  G  GUUGCGA  UGUU------- C UCGAAC
+	Monocesta       GUUCGG C  CCGUAGC  A  AGCA   CGUUUCG  UGU-- UU  GACGG  CG  AU-CGG  ACCUAGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUACGG  UGUUUUUUUAU C UCGAAC
+	Disonycha       GUUCGG C  CCGUAGC  A  AGCG   CGUUCUG  UGU-- UU  GACGG  CA  AUUCGG  ACCUAGCG  CCGAU  U  CCGUU  C  CAGAACG  AC  UGUU  G  GUUGCGG  UGCU------- C UCGAAC
+	Blepharida      GUUCGG C  CCGUAAC  A  AGCA   CGUUCUG  CGU-- UU  GACGG  CG  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUGCGG  UGUU------- C UCGAAC
+	Galeruca        GUUCGG C  CCGUAGC  A  AGCA   CGUUUCG  CGU-- UU  GACGG  CG  AU-CGG  ACCUAGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUACGG  UGUU------- C UCGAAC
+	Orthaltica      GUUCGG C  CCGUAGC  A  AGCG   CGUUCUG  UGU-- UU  GAUGG  CG  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CAGAACG  AC  UGUU  G  GCUGCGG  UGUU------- C UCGAAC
+	Paropsis        GUUCGG C  UCGUGGC  A  AGCA   CGUUCGG  UGU-- UU  GACGG  CG  AU-CGG  ACCUAGUG  CCGAU  C  CUGUC  C  CCGUACG  AC  UGUU  G  GCUGCGA  UGUU------- C UCGAAC
+	Timarcha        GUUCGG C  CCGUAGC  A  AGCG   CGUUCGU  CGU-- UA  GACGG  CG  AU-CGG  ACCUAGCG  CCGGU  C  CUGUC  C  GCGAACG  AC  UGUU  G  GCUGCGG  UGAU------- C UCGAAC
+	Zygograma       GUUCGG C  UCGUGGC  A  AGCG   CGAACGG  CGU-- UU  GACGG  CG  AU-CGG  ACCUAGCG  CCGAU  C  CUGUC  C  CCGUUCG  AC  UGUU  G  GCUGCGA  UGUU------- C UCGAAC
+	Syneta          GUUCGG C  CCGCGGC  A  AGCA   CGUUCGG  CGU-- UU  GACGG  AG  AU-CGG  ACCUAGUG  CCGGU  G  CCGUC  C  CCGAGCG  AC  UGUU  G  GCCGUGG  UGUU------- C UCGAAC
+	Dibolia         guucga c  ccguagc  a  agcg   cguuccg  CGU-- uu  gacgg  cg  au-cgg  aucugaug  ccgau  u  cuguc  c  cggaacg  ac  uguu  g  guuacgg  uguuuu---au c UCGAAC
+	Sangariola      GUUCGG C  CCGUAGC  A  AGCA   CGUUCUG  UGU-- UU  GACGG  CG  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GCUGCGG  UGUU------- C UCGAAC
+	Aulacophora     GUUCGG C  CCGUAGC  A  AGCA   CGUUCUG  CGU-- UU  GACGG  CC  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUGCGG  UGUU------- C UCGAAC
+	Diabrotica      GUUCGG C  CCGUAGC  A  AGCA   CGUUCUG  UGU-- UU  GACGG  CG  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CAGAACG  AC  UGUU  G  GUUACGG  UGUU------- C UCGAAC
+	Diorhabda       GUUCGG C  CCGUAGC  A  AGAG   CGUUUCG  UGU-- UU  GACGG  UA  AU-CGG  ACAUAAUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUACGG  UGUU------- C UCGAAC
+	Schematiza      GUUCGG C  CCGUAGC  A  AGCA   CGUUUCG  CGU-- UU  GACGG  CG  AU-CGG  ACCUAGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUACGG  UGUU------- C UCGAAC
+	Oides           GUUCGG C  CCGUAGC  A  AGCA   CGUUCUG  UGU-- UU  GACAG  UC  AU-CGG  ACCUGGUG  CCGAU  U  CUGUC  C  CGGAACG  AC  UGUU  G  GUUACGG  UGUU------- C UCGAAC
+	
+	[                         I5                          3ai           3i               1i                   ]
+	[               44444444  44444444444444444444  4444  44444  44444 4444444  4444444  4445555 5555555555555]
+	[               44444444  45555555555666666666  6777  77777  77888 8888888  9999999  9990000 0000001111111]
+	[               12345678  90123456789012345678  9012  34567  89012 3456789  0123456  7890123 4567890123456]                        
+	[               ------------------------------------------------------------------------------------------]
+	Orsodacne       AGACCUCC  GUU-----------------  -AAA  CGCCG  -AUCG -ACGACg  CUAUAGC  u?????? ?????????????[??????????-------------]
+	Chrysomela      AGACCUCG  AAUCUC--------------  GAAA  CGCCG  -AUCU -GCGACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-UC---AA---------------]
+	Altica          AGACCUCG  UU------------------  GAAA  CGCCG  -AUCA -GCGACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-U---------------------]
+	Agelastica      AGACCUCA  UCGUUCGAUUUUUCGAAAUC  GAAA  CGCCG  -AUCA -GCGACG  CUAUAGA  UUUGGGU ACUUUCAGGACCC[-U---------------------]
+	Monolepta       AGACCUUA  UAUUU---------------  GAAA  CGCCG  -AUCA -GCGACK  CUAUAGA  UUUGGGU ACUUUCAGGACCC[GUCUUGAA-C-------------]
+	Phyllobrotica   AGACCUCN  AUUAU---------------  GAAA  CGCCG  -AUCA -SCGACG  CNAUAGA  UUUGGGN ACUUUCAGGACCC[GUYUUGAAAC-------------]
+	Allochroma      AgaCCUCG  uu------------------  GAAA  cgccg  -auca -??????  ???????  ??????? ????????????-[-----------------------]
+	Chrysolina      AGACCUCG  UU------------------  GAAA  CGCCG  -AUCU -GCAACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-UC---AA---------------]
+	Aphthona        AGACCUCG  UU------------------  GAAA  CGCCG  -AUCA AGCGACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-UC---AA---------------]
+	Chaetocnema     AGACC-CG  UU------------------  GAAA  CGCCG  -AUCA -GCGACG  CAAUAGC  UUUGGGU ACUUUCAGGACCC[-UC---AA---------------]
+	Systena         AGACCUCG  UU------------------  GAAA  CGCCG  -AUCU -GCGACG  CUAUAGU  UUUGGGU AAUUUCAGGACCC[------A----------------]
+	Monocesta       AGACCUCG  UUU-----------------  GAAA  CGCCG  -AUCA -ACGACG  CUAUAGA  UUUGGGU ACUUUCAGGACCC[-----------------------]
+	Disonycha       AGACCUUG  UU------------------  GAAA  CGCCG  -AUCA -GCGACG  AUUUAGC  UUUGGGU ACUUUCAGGACCC[-U---------------------]
+	Blepharida      AGACCUCG  UU------------------  GAAA  CGCCG  -AUCA -GCGACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-UC---AA---------------]
+	Galeruca        AGACCUCG  UUUU----------------  GAAA  CGCCG  -AUCA -ACGACG  CUAUAGA  UUUGGGU ACUUUCAGGACCC[-UC---A----------------]
+	Orthaltica      AGACCUCU  UU------------------  GAAA  CGCCG  -AUCA -GCGACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-UC---AA---------------]
+	Paropsis        AGACCUCG  UU------------------  GAAA  CGCCG  -AUCU -GCAACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-UC---AA---------------]
+	Timarcha        AGACCUCG  UC------------------  GAAA  CGCCG  -AUCU -GCGACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-UU---AA---------------]
+	Zygograma       AGACCUCG  UC------------------  GAAA  CGCCG  -AUCU -GCAACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-UC---AA---------------]
+	Syneta          AGACCUCG  UCG-----------------  AAAA  CGCCG  AAUCU -GCGACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-----------------------]
+	Dibolia         agaCCUCG  uc------------------  GAAA  cgccg  -aucg -gcgacg  cuauagc  uuugggu acuuucaggaccc[gucuugaaaccgg----------]
+	Sangariola      AGACCUCG  UU------------------  GAAA  CGCCG  -AUCA -GCGACG  CUAUAGC  UUUGGGU ACUUUCAGGACCC[-----------------------]
+	Aulacophora     AGACCUCG  UUU-----------------  GAAA  CGCCG  -AUAA -GCGACG  CUAAAGA  UUUGGGU ACUUUCAGGACCC[-----------------------]
+	Diabrotica      AGACCUCG  UAU-----------------  GAAA  CGCCG  -AUCA -GCGACG  CUCUAGA  UuuGGGu ACAucgAGGACCC[-----------------------]
+	Diorhabda       AGACCUCG  UUUU----------------  GAAA  CGCCG  -AUCA -ACGACG  CUAUCGA  UUUGGGU AAUUUCAGGACCC[-UC---A----------------]
+	Schematiza      AGACCUCG  ACUU----------------  GAAA  CGCCG  -AUCA -ACGACG  CUAUAGA  UUUGGGU ACUUUCAGGACCC[-----------------------]
+	Oides           AGACCUCG  UUUU----------------  GAAA  CGCCG  -AUCA -GCGACG  CUAUAGA  UUUGGGU ACUUUCAGGACCc[GUCUUGAAaCACGGACCAAGG--]
+	
+	[EF1a]
+	Orsodacne       ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Chrysomela      UCCUUCAAGUAUGCGUGGGUACUUGACAAACUGAAAGCCGAACGUGAACGUGGUAUCACCAUCGAUAUCGCUUUGUGGAAGUUCGAAACUGCCAAGUAUUAUGUUACCAUCAUUGAUGCUCCUGGACACAGAGAUUUCAUCAAGAACAUGAUCACUGGUACAUCGCAGGCCGAUUGUGCCGUACUCAUUGUUGCUGCUGGUACUGGUGAAUUUGAAGCCGGUAUCUCGAAAAACGGACAGACCCGUGAACACGCACUGCUCGCAUUCACCCUUGGAGUAAAACAACUUAUUGUUGGUGUCAACAAAAUGGAUUCGACUGAACCACCGUACAGUGAGUCUCGUUUCGAAGAAAUCAAAAAGGAGGUAUCCUCCUACAUCAAGAAGAUUGGUUACAACCCGGCAGCUGUCGCUUUCGUACCA
+	Altica          UCYUUCAAAUAUGCAUGGGUACUUGACAAACUUAAGGCUGAACGUGAACGUGGUAUUACCAUUGAUAUUGCUUUAUGGAAAUUCGAAACAGCUAAAUACUAUGUUACCAUUAUUGAUGCCCCCGGACACAGAGAUUUCAUCAAGAACAUGAUUACUGGUACAUCACAAGCUGAUUGUGCUGUACUUAUUGUAGCCGCUGGUACCGGUGAAUUCGAAGCUGGUAUUUCAAAGAAUGGACAAACACGUGAACACGCUCUUCUUGCUUUUACUCUUGGAGUAAAACAACUUAUUGUUGGUGUUAACAAAAUGGACUCAACUGAACCACCAUACAGUGAAGCUCGUUUCGAUGAAAUUAAGAAAGAAGUAUCAUCUUACAUCAAGAAAAUCGGUUACAAUCCCGCUGCCGUUGCUUUCGUGCCA
+	Agelastica      UCCUUUAAAUACGCAUGGGUGCUGGAUAAACUUAAGGCAGAACGUGAACGCGGCAUcACUAUCGACAUCGCUCUAUGGAAAUUCGAAACUGCCAAAUAUUACGUGACCAUCAUUGAUGCUCCAGGACACAGAGAUUUCAUUAAGAACAUGAUCACUGGCACUUCUCAAGCUGAUUGUGCCGUACUCAUCGUAGCUGCCGGUACCGGAGAAUUCGAGGCCGGUAUCUCCAAGAACGGCCAGACGCGCGAACACGCUCUGCUGGCUUUCACCCUCGGAGUCAAGCAGCUGAUAGUCGGAGUCAACAAGAUGGACUCCACAGAACCGCCAUACUCCGAGgCGCGUUUUGAGGAAAUCAAGAAGGAAGUAUCGUCGUACAUCAAGAAGAUCGGCUACAAUCCGGCCGCCGUCGCCUUUGUACCG
+	Monolepta       UCYUUYAAAUAUGCAUGGGUACUUGACAAACUUAAGGCUGAACGUGAACGUGGUAUUACAAUUGAUAUUGCCUUGUGGAAAUUCGAAACAGCUAAAUACUAUGUAACCAUCAUUGAUGCCCCUGGACACAGAGAUUUCAUCAAAAACAUGAUUACUGGUACUUCACAGGCUGAUUGUGCUGUGCUUAUUGUGGCUGCUGGUACUGGAGAAUUCGAAGCUGGUAUUUCAAAGAACGGACAAACACGUGAACACGCUCUCCUCGCCUUCACCCUUGGAGUAAAACAACUUAUCGUUGGUGUCAACAAAAUGGACUCUACCGAACCCCCAUACAGUGAAGCACGUUUCGAGGAAAUUAAGAAAGAAGUAUCCUCUUACAUUAAGAAGAUUGGUUACAACCCUGCUGCUGUUGCCUUUGUACCA
+	Phyllobrotica   ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Allochroma      UCCUUCAAAUAUGCUUGGGUACUUGACAAACUUAAGGCCGAACGUGAACGUGGUAUCACCAUUGAUAUUGCUUUGUGGAAAUUCGAGACUGCUAAAUAUUAUGUAACCAUCAUUGAUGCUCCCGGACACAGAGAUUUCAUCAAAAACAUGAUUACUGGCACUUCCCAAGCUGACUGUGCCGUAUUGAUUGUUGCUGCUGGUACAGGUGAAUUUGAAGCUGGAAUAUCAAAGAACGGACAAACACGUGAACAUGCCUUGUUAGCCUUUACUCUUGGAGUAAAACAACUUAUUGUUGGAGUUAACAAAAUGGAUUCCACUGAACCCCCAUACAGCGAAGCUCGUUUUGAAGAAAUCAAGAAGGAAGUGUCCUCAUACAUUAAAAAAAUUGGUUACAACCCUGCUGCUGUAGCUUUUGUGCCA
+	Chrysolina      UCCUUCAAGUACGCGUGGGUACUUGACAAACUUAAGGCUGAACGUGAACGUGGUAUCACUAUCGAUAUUGCAUUGUGGAAGUUCGAAACCGCGAAAUACUAUGUAACCAUUAUUGAUGCACCUGGGCACAGAGAUUUCAUCAAGAACAUGAUCACUGGUACAUCUCAGGCUGAUUGCGCUGUACUCAUUGUGGCUGCUGGUACUGGUGAGUUUGAAGCUGGUAUCUCGAAGAAUGGACAAACUCGUGAACAUGCUCUACUUGCCUUUACUCUUGGAGUGAAACAAAUUAUCAUAGGAGUCAACAAAAUGGAUUCAACUGAACCACCCUACAGUGAAUCUCGUUUUGAGGAAAUCAAGAAAGAAGUGUCUUCAUACAUCAAGAAAAUUGGUUACAACCCAGCUGCAGUCGCCUUUGUGCCA
+	Aphthona        UCCUUCAAAUAUGCCUGGGUACUGGACAAACUGAAGGCCGAACGCGAACGCGGUAUCACCAUUGAUAUUGCUUUGUGGAAAUUCGAGACUGCCAAAUACUAUGUAACCAUCAUUGAUGCCCCUGGACACAGAGAUUUCAUCAAGAACAUGAUUACUGGAACUUCCCAAGCUGAUUGUGCCGUGCUCAUCGUUGCUGCCGGUACUGGUGAAUUCGAAGCCGGAAUUUCAAAGAACGGACAAACCCGUGAACACGCUCUUCUUGCUUUCACUCUUGGAGUAAAACAACUUAUCGUUGGAGUCAACAAAAUGGAUUCCACUGAACCYCCAUACAGYGAAGCUCGUUUUGAAGAAAUCAAGAAGGAAGUGUCCUCUUACAUCAAGAAGAUCGGUUACAACCCUGCUGCUGUUGCUUUUGUACCA
+	Chaetocnema     UCCUUCAAGUACGCCUGGGUACUGGACAAACUUAAGGCUGAACGUGAACGUGGUAUCACCAUCGAUAUUGCUUUGUGGAAAUUCGAAACUGCCAAAUACUACGUAACCAUCAUUGAUGCCCCUGGACACAGAGAUUUCAUCAAGAACAUGAUUACUGGAACAUCCCAAGCUGAUUGUGCCGUGCUUAUUGUAGCUGCCGGUACUGGUGAAUUCGAAGCUGGUAUUUCCAAGAACGGACAAACUCGUGAACACGCUCUGCUUGCUUUCACUCUUGGAGUAAAACAACUUAUCGUUGGUGUUAACAAGAUGGAUUCCACUGAACCCCCAUACAGUGAAGCCCGUUUUGAAGAAAUCAAGAAGGAAGUGUCUUCGUACAUCAAGAAGAUCGGUUACAACCCUGCUGCUGUUGCUUUCGUACCA
+	Systena         UCUUUCAAAUAUGCCUGGGUACUCGACAAACUGAAGGCUGAACGUGAACGUGGUAUCACCAUUGAUAUUGCAUUGUGGAAAUUCGAAACAGCUAAAUACUAUGUAACUAUUAUUGAUGACCCUGGACAUAGAGAUUUCAUCAAAAACAUGAUUACCGGUACAUCUCAAGCUGAUUGUGCCGUAUUGAUUGUAGCUGCAGGUACCGGUGAAUUCGAAGCUGGUAUUUCAAAGAACGGACAAACACGUGAACACGCUUUACUCGCCUUCACUCUAGGAGUAAAACAACUUAUUGUUGGAGUUAACAAAAUGGAUUCAACUGAACCACCAUACAGUGAAGCCCGUUUAGAAGAAAUCAAGAAAGAAGUAUCUUCAUACAUCAAGAAGAUUGGUUACAAUCCUGCAGCUGUAGCCUUCGUUCCA
+	Monocesta       UCCUUUAAAUAUGCAUGGGUGCUCGACAAACUUAAAGCUGAACGCGAGCGUGGUAUCACCAUCGAUAUUGCUUUAUGGAAAUUCGAAACAGCUAAAUACUAYGUAACCAUUAUUGAUGCCCCUGGGCACAGAGAUUUCAUUAAGAACAUGAUUACUGGAACAUCUCAGGCUGAUUGUGCCGUGCUCAUUGUAGCUGCUGGUACUGGAGAAUUUGAAGCUGGUAUUUCCAAGAACGGACAAACCCGUGAACAYGCUCUCCUUGCUUUCACUCUUGGAGUAAAACAACUUAUUGUUGGAGUCAACAAAAUGGACUCUACUGAACCACCAUACAGUGAAUCACGUUUUGAAGAAAUCAAGAAAGAAGUUUCCUCAUACAUUAAAAAGAUUGGAUACAAUCCUGCUGCUGUUGCCUUUGUUCCC
+	Disonycha       UCUUUCAAAUACGCNUGGGUACUCGACAAAUUGAAGGCUGAACGUGAACGUGGUAUCACCAUYGAUAUYGCYUUGUGGAAAUUCGAAACAUCYAAAUAYUAYGUAACCAUCAUUGAUGCUCCCGGGCACAGRGAUUUCAUCAAGAACAUGAUCACCGGUACAUCCCAAGCUGAUUGUGCYGUACUCAUYGUAGCUGCUGGUACUGGUGAAUUCGAAGCUGGUAUCUCAAAGAACGGRCAAACCCGUGAACAYGCCCUUCUGGCUUUCACUCUUGGAGUAAAACAACUCaUUGUUGGUGUYAACAARAUGGACUCCACCGAACCACCAUACAGUGAAgCCCGUUUCGAAGAAAUCAAGAAGGAAGUAUCUUCUUACAUCAAGAAGAUUGGYUACAAYCCAGCAGCUGUUGCCUUUGUCCCA
+	Blepharida      UCCUUCAAAUACGCCUGGGUACUCGACAAACUUAAGGCUGAACGUGAACGUGGUAUCACCAUUGAUAUUGCUUUGUGGAAAUUCGAAACCGCUAAAUACUAUGUAACUAUCAUUGAUGCACCUGGACACAGAGAUUUCAUCAAGAACAUGAUUACUGGUACAUCCCAAGCUGAUUGUGCCGUACUUAUCGUCGCUGCUGGUACUGGUGAAUUUGAAGCUGGUAUUUCAAAGAACGGCCAAACACGUGAACACGCUUUACUUGCCUUCACCCUUGGAGUAAAACAACUUAUUGUUGGUGUCAACAAAAUGGACUCGACUGAACCCCCAUACAGCGAAgCCCGUUUCGAGGAAAUCAAGAAGGAAGUAUCUUCUUACAUUAAGAAAAUUGGUUACAAUCCUGCCGCUGUAGCCUUUGUACCA
+	Galeruca        UCUUUUAAAUAUGCCUGGGUAUUGGAUAAGCUUAAAGCAGAACGCGAACGUGGUAUcACCAUCGACAUAGCUUUAUGGAAAUUUGAAACCGCUAAGUAUUAUGUCACUAUUAUUGACGCUCCAGGACAUAGAGAUUUUAUUAAGAACAUGAUUACUGGAACAUCCCAAGCUGAUUGUGCCGUGCUUAUUGUAGCAGCUGGUACGGGAGAAUUUGAAGCCGGUAUUUCGAAAAAUGGACAAACUCGUGAACACGCUCUGCUUGCAUUUACUCUUGGCGUCAAACAACUUAUUGUAGGAGUUAAUAAGAUGGAUUCAACGGAACCGCCAUAUUCCGAAgCGCGUUAUGAAGAAAUCAAGAAAGAAGUAUCUUCGUACAUUAAGAAAAUUGGAUACAAUCCGGCAGCUGUAGCAUUUGUUCCU
+	Orthaltica      UCCUUCAAAUAUGCUUGGGUACUUGACAAACUCAAGGCCGAACGCGAACGCGGUAUCACCAUUGACAUUGCUUUGUGGAAAUUCGAAACUGCUAAAUACUACGUAACCAUCAUUGAUGCCCCUGGACACAGAGAUUUCAUCAAGAACAUGAUUACUGGAACUUCCCAAGCUGAUUGUGCUGUGCUCAUCGUCGCUGCCGGUACUGGUGAAUUUGAAGCCGGAAUUUCAAAGAACGGACAAACUCGUGAACACGCUCUUCUUGCUUUCACUCUUGGAGUAAAACAACUUAUCGUUGGAGUUAACAAAAUGGACUCCACUGAACCCCCAUACAGCGAAGCUCGUUUUGAAGAAAUCAAGAAGGAAGUGUCCUCGUACAUCAAGAAGAUCGGUUACAACCCUGCUGCUGUAGCCUUUGUACCA
+	Paropsis        UCCUUCAAGUACGCUUGGGUUCUGGACAAACUGAAAGCUGAACGUGAACGAGGUAUCACCAUCGACAUUGCUCUAUGGAAAUUUGAAACCGCCAAGUAUUACGUGACCAUUAUUGAUGCUCCUGGCCAUAGAGAUUUCAUUAAGAACAUGAUCACUGGUACUUCUCAGGCUGAUUGUGCUGUACUUAUUGUAGCUGCAGGAACAGGAGAAUUUGAGGCUGGUAUUUCUAAAAAUGGACAAACUCGUGAACACGCUUUGCUGGCUUUCACUCUGGGAGUGAAGCAACUUAUCGUAGGAGUCAACAAAAUGGACUCCACUGAACCACCGUACAGCGACUCUCGUUUUGAGGAAAUCAAGAAGGAAGUUUCGUCUUACAUCAAGAAGAUUGGCUACAACCCAGCCGCUGUGGCUUUCGUACCc
+	Timarcha        UCCUUCAAGUAUGCCUGGGUCCUGGACAAAUUGAAAGCAGAACGUGAACGCGGUAUUACCAUCGAUAUUGCGCUGUGGAAAUUCGAAACGGCCAAGUAUUACGUGACUAUUAUUGAUGCGCCUGGUCACAGGGAUUUCAUAAAGAACAUGAUCACCGGUACUUCCCAGGCCGAUUGCGCUGUUCUGAUCGUAGCCGCUGGUACAGGCGAAUUUGAAGCGGGCAUUUCGAAAAACGGCCAGACUCGCGAACACGCUCUGUUAGCUUUCACUCUGGGUGUUAAACAACUAAUCGUAGGCGUCAACAAAAUGGAUUCCACCGAACCUCCCUAUUCUGAGACCCGUUUCGAGGAGAUUAAGAAAGAAGUAUCAUCCUACAUUAAAAAAAUUGGGUAUAAUCCAGCAGGCGUUCCUUUCGUACCA
+	Zygograma       UCCUUCAAGUACGCGUGGGUGCUGGACAAGCUCAAAGCUGAACGCGAACGAGGCAUCACCAUCGACAUCGCUCUGUGGAAGUUCGAGACGGCCAAGUACUACGUGACCAUCAUCGACGCUCCCGGACACAGAGACUUCAUCAAGAACAUGAUCACUGGCACUUCUCAGGCGGACUGCGCCGUGCUGAUCGUAGCUGCAGGCACCGGCGAGUUCGAGGCCGGCAUCUCCAAGAAUGGGCAGACUCGCGAGCACGCUCUGCUGGCCUUCACUCUGGGCGUGAAGCAGCUCAUCGUCGGAGUCAACAAGAUGGACUCCACUGAGCCUCCGUACUCUGAGACGCGUUUCGAGGAGAUCAAGAAGGAGGUGUCUUCGUACAUCAAGAAGAUCGGCUACAAUCCGGCAGCCGUCGCUUUCGUUCCG
+	Syneta          UCCUUCAAAUAUGCUUGGGUACUUGACAAGCUCAAAGCUGAACGUGAACGUGGUAUUACCAUAGAUAUUGCAUUGUGGAAAUUCGAAACUGCCAAAUACUAUGUGACAAUCAUUGAUGCCCCUGGGCACAGAGAUUUCAUCAAGAACAUGAUCACUGGUACGUCGCAGGCCGAUUGUGCCGUACUCAUUGUAGCUGCUGGUACUGGUGAAUUCGAAGCUGGUAUUUCAAAGAAUGGACAGACUCGUGAACACGCGUUGCUAGCGUUUACUCUUGGAGUGAAACAACUUGUCGUAGGCGUUAACAAAAUGGACUCGACUGAACCACCUUACAGCGAACCCCGUUUCGAAGAAAUUAAAAAGGAAGUAUCAUCAUACAUCAAAAAGAUUGGUUACAACCCAGCAGCAGUUGCGUUCGUACCA
+	Dibolia         ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Sangariola      UCCUUCAAGUACGCCUGGGUACUGGACAAACUUAAGGCUGAACGCGAACGCGGUAUCACCAUYGAUAUUGCUUUGUGGAAAUUCGAAACNGCCAAAUACUACGUAACCAUCAUUGAUGCCCCCGGACACAGAGAUUUCAUCAAGAACAUGAUUACUGGAACAUCCCAAGCUGAUUGUGCCGUACUUAUUGUAGCUGCUGGUACUGGAGAAUUCGAAGCUGGUAUUUCCAAGAACGGACAAACCCGUGAACACGCUUUGCUUGCUUUCACCCUUGGAGUAAAACAACUUAUUGUGGGUGUAAACAAAAUGGACUCCACUGAACCCCCAUACAGUGAggCNCGUUUYGAAGAAAUCAAGAAGGAAGUUUCCUCGUACAUUAAGAAGAUUGGCUACAACCCUGCUGCUGUUGCUUUCGUUCCA
+	Aulacophora     UCCUUCAAAUAUGCCUGGGUACUCGACAAACUGAAGGCUGAACGUGAACGCGGUAUCACCAUCGACAUUGCUUUGUGGAAAUUUGAAACAUCUAAAUACUAUGUAACAAUUAUAGACGCCCCUGGACACAGAGAUUUCAUCAAAAACAUGAUUACUGGUACUUCCCAAGCUGAUUGUGCCGUACUCAUAGUAGCUGCCGGUACUGGUGAAUUUGAAGCUGGUAUUUCUAAAAACGGACAAACUCGUGAACAYGCCCUUCUGGCCUUUACUUUGGGAGUCAAACAACUCAUCGUUGGUGUUAACAAGAUGGAUUCUACUGAACCCCCAUACAGAGAAGCACGUUUUGAAGAAAUUAAAAAAGAAGUUUCCUCGUACAUCAAGAAGAUUGGAUACAAUCCUGCUGCUGUAGCGUUCGUACCA
+	Diabrotica      ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Diorhabda       UCCUUCAAGUAUGCCUGGGUACUGGACAAACUUAAAGCCGAGCGUGAACGUGGUAUCACUAUUGACAUAGCUUUGUGGAAAUUUGAAACCUCUAAGUACUACGUAACCAUCAUUGACGCUCCAGGGCACAGAGAUUUCAUCAAGAACAUGAUUACUGGAACAUCCCAAGCUGAUUGUGCAGUGCUUAUUGUAGCUGCCGGUACUGGAGAAUUCGAGGCUGGUAUUUCCAAGAAUGGACAAACACGUGAACACGCUCUUCUUGCAUUCACUCUUGGAGUAAAACAGCUCAUUGUAGGAGUCAACAAAAUGGACUCUACUGAACCACCAUACAGUGAAGCGCGUUUUGAAGAAAUCAAGAAAGAAGUAUCCUCGUACAUUAAGAAGAUUGGAUACAACCCUGCUGCCGUUGCUUUCGUACCA
+	Schematiza      UCUUUCAAAUAUGCCUGGGUACUUGACAAACUUAAGGCUGAACGUGAACGUGGUAUUACCAUUGACAUCGCAUUAUGGAAAUUCGAAACAGCCAAGUACUAUGUAACCAUUAUCGAUGCCCCUGGACACAGAGAUUUCAUUAAAAACAUGAUUACUGGAACUUCACAAGCUGAUUGCGCAGUACUUAUUGUAGCUGCUGGUACUGGAGAAUUUGAAGCUGGUAUCUCUAAGAACGGACAAACACGUGAACAUGCUCUUCUUGCAUUCACUCUUGGAGUAAAACAACUUAUUGUUGGUGUUAACAAAAUGGACUCUACUGAACCACCAUACAGUGAAUCACGUUUUGAAGAAAUUAAGAAAGAAGUAUCCUCAUACAUAAAGAAAAUUGGUUACAAUCCAGCUGCAGUAGCCUUCGUUCCA
+	Oides           UCCUUCAAGUACGCCUGGGUACUGGACAAGCUCAAAGCUGAACGCGAGCGCGGUAUCACCAUCGAUAUCGCUUUGUGGAAAUUCGAAACGGCCAAGUACUACGUAACCAUCAUUGAUGCCCCCGGACACAGGGAUUUCAUCAAGAACAUGAUCACCGGAACGUCCCAAGCCGAUUGCGCCGUGCUCAUCGUCGCCGCCGGUACUGGCGAGUUCGAAGCUGGUAUAUCCAAGAACGGACAGACCCGCGAGCACGCUCUGCUGGCUUUCACUUUGGGAGUCAAGCAACUCAUCGUCGGUGUCAACAAGAUGGAUUCCACUGAGCCUCCGUACAGUGAAGCCCGUUUCGAAGAAAUCAAGAAGGAAGUUUCGUCGUACAUCAAGAAGAUCGGUUACAAUCCGGCUGCUGUUGCUUUCGUUCCA
+	
+	
+	[CO1]
+	Orsodacne        ggNgcHccHgaYaUAGCUUUUCCUCGAAUAAAUAAUAUAAGAUUUUGACUUUUGCCCCCAAGUCUAACUUUAUUAUUAAUAAGAAGAAUUGUAGAAAGAGGGGCUGGUACAGGUUGAACAGUUUACCCUCCUCUUUCCUCAAACAUUGCCCAUAGGGGUUCCUCUGUUGAUUUAGCAAUUUUUAGACUUCAUUUAGCAGGAAUUUCAUCUAUUCUAGGAGCGGUAAAUUUUAUUACAACAGUGAUUAACAUACGACCAGUUGGGAUAUCUUUAGAUAAAAUACCUUUAUUUGUAUGAGCAGUAAUUAUUACUGCUGUUUUAUUAUUACUUUCUUUACCCGUUUUAGCAGGUGCAAUUACUAUACUUCUAACAGAUCGUAAUAUUAAUACAUCUUUUUUUGACCCUUCUGGAGGGGGGGACCCAAUUCUUUACCAACAUUUAUUUUGAUUUUUUGGUCAUCCU
+	Chrysomela       GGUGCCCCAGAUAUAGCUUUCCCUCGAUUAAAUAACAUAAGAUUCUGACUUCUCCCCCCUUCUCUAUUUCUUCUUUUAAUAAGAAGAAUUGUAGAAAAUGGGGUAGGUACUGGUUGGACAGUCUACCCCCCUUUAUCAACCAAUAUCGCGCAUAGAGGAUCUUCAGUUGAUCUCGCUAUUUUUAGACUUCAUCUUGCCGGAAUCUCAUCAAUUUUAGGGGCAAUUAAUUUUAUCACUACAGUAAUUAAUAUACGGCCUGAAGGGAUAAAUUUUGAACAAACUCCUCUUUUUGUAUGGGCUGUUUUAAUCACAGCUAUCCUUUUACUUUUAUCCUUACCAGUUCUGGCUGGUGCAAUCACAAUACUUUUAACUGAUCGAAAUCUUAAUACUUCUUUUUUUGACCCAGCAGGUGGGGGAGACCCAAUUUUAUACCAACACUUAUUUUGAUUUUUUGGCCACCCU
+	Altica           ggDgcYccHgaUaURgcHUUYccNcgDaURaaYaaUAUAagAUUCUGGCUACUCCCACCAUCAAUUUUUUUAcUUUUAAUAAGAAGAUUAGUGGAGAGaGGDGCDGGAACUGGAUGAACAGUUUAUCCHCCUCUAUCUUCAAAUCUUGCACAUARWGGACCAUCUGUUGAUUUAGCYAUCUUCAGUCUUCAUUUAGCAGGAAUUUCAUCAAUUUUAGGUGCUAUUAAUUUUAUUACAACAAUAAUUAAUAUGCGACCACAAGGAAUGUCAAUAGACCAAAUACCUUUAUUUGUAUGAGCAGUAUUUAUUACGGCCAUCCUUUUACUUUUAUCUUUACCAGUCCUAGCCGGUGCAAUUACAAUAUUACUUACAGAUCGUAAUUUAAAUACAUCUUUUUUUGAACCAGCHGGVggVGGDGAYCCWAUUUUaUAYCAACAYUUAUUYUGRUUYUUYGGNCAYCCY
+	Agelastica       GGUGCUCCAGAUAUGGCAUUUCCACGAAUAAAUAAUAUAAGAUUUUGAYUAUUACCCCCAUCAAUUUUUUUAUUAAUUAUAAGUAGAAUUGUAGAAAGAGGAGCAGGAACUGGAUGAACAGUAUACCCUCCUUUAUCCUCUAAUAUUGCCCAUAAUGGAUCAUCCGUAGAUCUGGCUAUUUUUAGUCUUCAUUUAGCUGGAAUCUCAUCAAUUUUAGGUGCUAUUAAUUUUAUUACAACAGUUAUUAAUAUGCGACCAAAUGGUAUAAGAUUUGACCGCAUACCUUUAUUUGUUUGAGCAGUAGUAAUUACUGCAGUUUUACUAUUGUUAUCUUUACCUGUUUUAGCUGGGGCUAUUACAAUACUAUUAACUGACCGAAAUUUAAAUACAUCAUUUUUUGACCCAACCGGUGGAGGUGACCCAAUUCUAUAUCAACACUUAUUUUGAUUUUUUGGUCAUCCU
+	Monolepta        ggDgcYccHgaYaURgcHUUYccUcgaaUaaaYaaYaURagDUUYUGAUUacUUCCCCCAUCUUUAUUUUUACUAAUUAUAAGAAGAAUUGUUGAAAGAGGGGCAGGAACAGGAUGAACUGUUUACCCACCUUUAUCAGCCAAUAUUGCCCAUGGAGGAGCUUCAGUAGAUUUAGCAAUUUUUAGACUUCAUUUAGCUGGAAUUUCAUCCAUUUUAGGGGCAAUUAAUUUUAUUACAACAGUAAUUAAUAUACGUCCAGCAGGUAUAACUUUAGAUCGAAUACCAUUAUUUGUAUGAGCUGUAGUUAUUACAGCAAUUUUAUUAUUACUAUCUUUACCUGUAUUAGCWGGAGCAAUUACAAUAUUAUUAACUGAUCGAAAUUUAAACACAUCUUUUUUUGACCCUGCAgGAGGGGGDGAUCCAAUUCUUUACCAACAUUUAUUUUGAUUUUUUGGACAUCCU
+	Phyllobrotica    ggDgcYccHgaYaURgcHUUYccUcGAAUAAAUAAUAUAAGGUUUUGACUCUUGCCCCCCUCUCUAUUCUUUUUAAUUAUAAGAAGAAUCGUAGAGAGAGGAGUUGGAACCGGAUGAACAGUUUAUCCCCCCCUUUCAUCAAAUAUUGCUCAUGGUGGGUCUUCAGUUGAUUUAGCUAUCUUUAGAUUACAUCUAGCCGGGAUUUCCUCAAUUUUGGGUGCCAUUAAUUUUAUUACUACCAUUAUUAAUAUACGACCUCAAGGAAUAACUUUAGAUCGAAUACCUCUAUUUGUUUGGGCAGUCUUAAUUACUGCAAUUUUAUUAUUACUUUCAUUACCAGUUUUAGCUGGUGCUAUUACCAUACUUUUAACUGAUCGAAACUUAAAUACAUCAUUUUUCGAUCCUGCCGGGGGAGGAGACCCUAUUUUAUACCAACACUUAUUUUGAUUCUUUGGACAUCCU
+	Allochroma       GGAGCUCCAGAUAUAGCUUUUCCCCGAAUAAAUAAUAUAAGAUUUUGGUUAUUACCCCCAUCAUUAUUUUUUUUAUUAUUAAGGAGAUUAGCUGAAAGAGGUGCUGGAACUGGAUGAACUGUUUACCCCCCUUUAUCUGCAAAUAUUGCCCAUAGAGGAUCUUCUGUUGAUUUAGCAAUUUUUAGUCUACAUUUAGCAGGAAUUUCCUCUAUUUUAGGAGCUAUUAAUUUUAUUUCUACAGUAAUUAAUAUACGACCUAAAGGAAUAACUUUAGAUCGAAUACCUCUGUUUGUUUGAGCUGUUACAAUUACAGCAAUUUUACUUUUACUCUCAUUACCAGUUCUAGCAGGAGCUAUUACAAUACUUUUAACUGAUCGAAAUUUAAAUACUUCGUUCUUUGACCCUGCAGGAGGAGGAGAUCCUAUUUUAUACCAACACUUAUUUUGAUUUUUUGGACAUCCU
+	Chrysolina       GGAGCUCCAGAUAUAGCAUUCCCUCGAAUAAACAAUAUAAGAUUUUGAUUAUUACCCCCCUCAUUAAUUUUCUUACUAAUAAGAAGAAUCGUAGAAAGAGGAGUGGGAACAGGAUGAACAGUUUAUCCUCCUUUAUCUGCUAAUGUUGCCCAUAGAGGUCCUUCUGUUGAUCUUGCAAUUUUUAGACUUCAUUUAGCUGGAAUUUCCUCUAUUUUAGGGGCAAUCAAUUUUAUUACUACAAUUAUUAAUAUACACCCAACAGGAAUAAAAUUAGAACAAAUACCCCUUUUUUCAUGGGCAGUCUUAAUUACUGCAAUUCUUUUACUUUUAUCCUUACCAGUUUUAGCUGGUGCAAUUACAAUACUAUUAACUGAUCGAAACUUAAAUACCUCUUUUUUUGAUCCUACUAGUGGAGGUGACCCUAUUCUUUACCAGCAUCUAUUCUGAUUUUUUGGGCACCCU
+	Aphthona         ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Chaetocnema      GGAGCUCCUGAUAUAGCAUUUCCACGAAUAAAUAAUAUAAGAUUUUGAUUAUUACCUCCUUCGUUAAUAUUUUUAAAUUUUAGAAGAUUGCUCAAUAAUGGAGUGGGAACAGGUUGAACUGUAUACCCACCUUUAUCAGCAAAUUUAUUUCAUAUAGGAAAUGCUGUUGAUCUAgCUAUUUUUUCUCUUCAUAUAGCAGGUAUUUCUUCUAUUUUAGGGGCUAUUAAUUUCAUCACUACAAUUAUAAAUAUAAAAAUUUUAAACCUUAAAAUAGAUAAAAUUCCACUCUUUGUCUGAUCAAUUUUUAUUACUACAAUUCUUUUACUUUUGUCUCUUCCUGUUUUAGCAGGAGCUAUUACAAUAUUAUUAACUGAUCGAAAUCUCAAUACUUCAUUCUUUGAUCCAGCUGGAGGGGGAGAUCCAAUUUUAUAUCAACACUUAUUCUGAUUUUUCGGACAUCCU
+	Systena          GGAGCCCCUGAUAUAGCAUUCCCUCGAAUGAACAAUAUGAGAUUUUGACUUUUACCCCCAUCUUUAUUUUUACUUUUAAUAAGAAGGGUAGUAGAAAGAGGAGCAGGAACAGGAUGAACCGUUUAUCCCCCUCUAGCAUCCAAUAUCGCCCAUGGAGGAUCAUCAGUAGAUUUAGCCAUUUUUAGUUUACACUUAGCAGGAAUCUCUUCAAUUUUAGGAGCUAUUAAUUUUAUUACCACAGUUAUUAAUAUACGACCAAGAGGAAUACUCUUAGACCGUAUGCCAUUAUUUGUAUGAGCAGUAGUAAUUACAGCAAUUUUAUUACUUUUAUCAUUACCUGUUCUUGCAGGUGCUAUUACCAUAUUAUUAACCGACCGAAAUUUAAAUACUUCAUUUUUUGACCCGGCAGGCGGGGGAGACCCAAUUUUAUACCAACAUUUAUUUUGAUUUUUUGGCCAUCCA
+	Monocesta        GGUGCUCCAGAUAUAGCAUUCCCUCGAAUAAAUAAUAUAAGAUUUUGAUUAUUACCCCCAUCAUUAUUUUUGUUAAUUAUGAGAAGAAUUGUAGAAAGAGGGGCAGGAACUGGAUGAACAGUUUAUCCCCCACUUUCUUCAAAUAUUGCUCAUGGAGGAUCUUCUGUAGAUUUAGCUAUCUUUAGACUUCAUUUAGCUGGAAUUUCCUCAAUUCUUGGCGCAAUUAAUUUUAUUACUACAACCAUUAAUAUACGACCAAAAGGAAUAUCUUUAGAUCGUAUACCUCUUUUUGUUUGGGCUGUAACUAUUACUGCUAUUCUUUUACUUUUAUCACUUCCUGUUCUUGCUGGUGCAAUUACUAUACUUUUAACUGAUCGAAACUUAAACACCUCUUUUUUUGACCCCGCUGGAGGAGGUGAUCCAAUUCUGUAUCAACAUUUAUUCUGAUUUUUUGGUCAUCCU
+	Disonycha        ggDgcYccHgaUaURgcHUUYccNcgDAUAaAUAAUAUAAGAUUUUGACUGUUgcCCccCUCUUUAUUUUUACUUCUUAUAAGAAGAGUUGUUGAAAGAGGGGCAGGAACUGGGUGAACUGUAUACCCUCCCCUUUCCUCAAAUAUCGCUCAUGGAGGCUCUUCUGUAGACUUAGCAAUUUUUAGAUUACAUUUAGCUGGAAUUUCCUCAAUUUUAGGUGCAAUUAAUUUUAUCACCACAAUUUUAAAUAUACGACCUAAUGGAAUAACAUUAGACCGAAUACCCUUAUUUGUUUGAUCGGUAAUCAUUACAGCUAUCCUUUUACUUUUAUCUUUACCUGUUUUAGCAGGAGCAAUUACUAUAUUAUUAACUGAUCGUAAUUUAAAUACUUCUUUCUUUGACCCUGUUGGAGGCGGUGACCCUAUUUUAUACCAACACUUAUUUUGAUUUUUUGGACAYCCY
+	Blepharida       ggDgcYccUgaUaURgcAUUCCCCcGGAAUAAUAAUAUAAGAUUCUGACUUCUUCCUCCUUCAUUAUUUUUACUUUUAAUAAGAAGAAUAGUAGAAAGAGGUGCAGGAACUGGUUGAACAGUUUACCCUCCUUUAUCCUCCAAUAUUGCCCAUAAUGGAGCUUCUGUAGAUUUAGCUAUUUUUAGUUUACACCUUGCUGGAAUUUCCUCGAUUUUAGGUGCAAUUAAUUUUAUUACAACAAUCAUUAACAUACGGCCUGCUGGAAUAACCUUAGAUCGAAUACCCCUAUUUGUUUGAGCAGUAGUCAUUACAGCAAUCUUAUUACUUUUAUCUUUACCUGUUCUAGCAGGAGCCAUCACUAUAUUACUAACUGAUCGAAAUUUAAAUACAUCUUUUUUUGAUCCUGCUGGAGGVGGAGAUCCAAUUYUAUACCAACAUUUAUUYUGAUUUUUUGGacacCCC
+	Galeruca         GGUGCCCCAGACAUAGCAUUUCCCCGAAUAAAUAACAUGAGAUUUUGAUUAUUACCCCCAUCUUUAUUUCUAUUAAUUAUAAGAAGAAUUGUAGAAAGAGGAGCAGGAACAGGAUGAACAGUUUACCCCCCACUUUCAUCUAAUAUUGCUCACGGAGGUUCUUCAGUAGAUUUAGCUAUUUUUAGGCUACAUUUAGCUGGAAUUUCAUCCAUUUUAGGAGCUAUUAAUUUUAUUACUACAGUAAUUAAUAUACGACCUAAAGGAAUAACUUUAGAUCGAAUACCUCUGUUUGUUUGAGCUGUUACAAUUACAGCAAUUUUACUUUUACUCUCAUUACCAGUUCUAGCAGGAGCAAUCACUAUAUUAUUAACAGAUCGAAAUUUAAAUACAUCAUUUUUUGACCCGGCCGGAGGAGGAGAUCCAAUUUUAUACCAACAUUUAUUUUGAUUCUUUGGACAUCCU
+	Orthaltica       ggDgcYccUGAUAUAGCAUUCCCACGUAUAAAUAAUAUAAGAUUUUGAUUAUUACCUCCAUCUUUAUUUUUAUUAAUUAUAAGAAGAAUAGUAGAAAGAGGGGCUGGAACUGGGUGAACUGUGUAUCCUCCUUUAUCUUCUAAUAUUGCUCAUGGAGGCUCUUCAGUUGAUUUAGCUAUUUUUAGACUUCAUUUAGCAGGAAUUUCAUCAAUUCUUGGAGCUAUUAAUUUUAUUACAACUAUUAUUAACAUACGUCCUAAAGGCAUACAACUAGAUCAAAUACCCUUAUUUGUAUGAGCAGUAAUUAUUACAGCAAUUUUACUGCUUUUAUCUCUACCUGUUUUAGCAGGUGCUAUUACUAUAUUAUUAACUGAUCGAAAUUUAAAUACUUCUUUUUUUGAUCCCGCCGGAGGAGGGGACCCAAUUCUCUAUCAACACUUAUUUUGAUUUUUUGGUCACCCA
+	Paropsis         GGGGCACCUGAUAUAGCAUUCCCCCGAAUGAACAAUAUGAGAUUUUGACUUCUUCCCCCAUCAUUAUUUUUCUUAUUAAUAAGAAGAAUUGUAGAAAGAGGUGCAGGUACUGGCUGAACAGUUUAUCCCCCACUAUCAGCCAAUGUAGCCCAUAGAGGUUCUUCUGUAGAUCUGGCUAUUUUUAGACUAUAUAUAGCUGGAAUUUCUUCUAUUUUAGGUGCCAUUAAUUUUAUCACAACAAUUAUUAAUAUACGACCAACAGGCAUAUCUAUUGACCGAAUACCGUUAUUUGUCUGAGCUGUAAUAAUUACAGCAAUUUUAUUGUUACUUUCUCUCCCCGUUUUAGCCGGUGCCAUUACUAUGCUAUUAACAGACCGAAAUUUAAAUACUUCAUUUUUUGAUCCAGCAGAUGGGGGAGACCCAAUUUUAUAUCAACAUUUAUUUUGAUUUUUUGGGCAYCCY
+	Timarcha         GGAGCACCUGAUAUAGCUUUUCCUCGAAUAAAUAAUAUAAGAUUUUGGCUUUUACCACCAUCCCUAACUUUAUUAUUAUUAAGAAGAAUCACUAAUAAUGGAGCAGGAACUGGUUGAACUGUUUAUCCCCCAUUAUCUGCAAAUCUUGCCCAUAAUGGAUCUUCAGUAGAUUUAGCUAUUUUUAGAUUACAUUUAGCAGGUAUUUCUUCAAUUUUGGGAGCUGCUAAUUUCAUUUCUACAAUUAUAAAUAUACAAAUUUCUGGAAUAAAAUUAGAUCAAAUCUCUUUAUUUCCAUGAUCAGUAAUAAUUACAGCUAUUUUAUUGCUUUUAUCCUUACCUGUAUUAGCAGGAGCAAUUACAAUACUUUUAACUGAUCGAAAUUUAAAUACCUCUUUCUUUGAUCCCUCAGGAGGUGGAGACCCUAUUCUUUAUCAACAUUUAUUUUGAUUUUUUGGUCAUCCY
+	Zygograma        GGUGCACCUGAUAUAGCUUUCCCUCGAAUAAAUAAUAUAAGAUUUUGGUUACUUCCUCCAUCAUUAUUAUUUUUAGUAAUGAGAAGAAUCGUUGAAAAUGGUGUAGGGACUGGGUGAACAGUAUAUCCCCCCUUAUCAGCUAAUACUGCCCAUAGAGGAUCAUCUGUCGAUUUAGCAAUUUUUAGGCUUCAUUUAGCAGGAAUUUCCUCUAUUUUAGGAGCAAUUAAUUUUAUUACAACUGUUGCAAAUAUACAUCCAAUAGGAAUAAAAUUAGACCAAAUACCUCUCUUUUCUUGAGCUGUUUUAAUUACAGCUAUUUUAUUAUUAAUUUCACUUCCUGUUUUAGCAGGGGCAAUUACAAUAUUAUUAACAGAUCGAAAUUUAAAUACUUCAUUUUUUGAUCCUGUUAGAGGAGGUGACCCAAUUCUUUACCAACACUUAUUUUGAUUUUUUGGUCACCCU
+	Syneta           GGGGCCCCUGAUAUAGCUUUUCCACGAAUAAACAAUAUAAGAUUUUGGCUUUUGCCACCAUCCCUAUCUUUAUUGUUAAUAAGAAGAAUUGUUGAAAAUGGGGCCGGAACCGGCUGAACAGUAUAUCCACCUCUUUCAGCUAAUAUUGCUCAUAGAGGUUCUUCAGUAGACUUAGCAAUCUUUAGGUUACACUUAGCUGGAAUUUCAUCUAUCCUUGGGGCAGUUAAUUUUAUUACUACAGUGAUUAACAUACGUCCUGAAAAAAUAACCUUAGAUCGAAUAUCAUUAUUUAUCUGAGCUGUAACAAUUACAGCAAUUUUAUUAUUAUUAUCUUUACCUGUAUUAGCAGGGGCCAUUACUAUAUUAUUAACAGAUCGAAAUUUAAAUACAUCAUUUUUUGAUCCAGCAGGAGGAGGUGACCCAAUCUUAUAUCAACAUUUAUUCUGAUUUUUUGGACAUCCU
+	Dibolia          ????????????AUAGCAUUCCcCCGAAUAaACAAUAUAAGAUUUUGACUUCUGCCCCCCUCAUUAUUCCUUCUUUUAAUAAGAAGAAUAGUAGAAAGAGGAGUCGGAACAGGAUGAACUGUGUACCCCCCACUUUCAUCUAAUAUUGCUCACGGAGGAAGAUCCGUUGAUCUUGCAAUUUUUAGGUUACAUUUAGCAGGAAUCUCUUCUAUUUUAGGUGCAAUUAAUUUUAUUACUACAAUUAUUAAUAUACGACCCAAAGGAAUAAGAUUUGAUCGAAUACCUUUAUUUGUUUGAUCAGUUUUAAUUACUGCAAUUUUAUUACUCUUAUCACUACCUGUACUUGCAGGAGCAAUCACAAUAUUAUUAACAGAUCGAAACUUAAAUACAUCUUUUUUUGACCCCUCAGGAGGUGGAGAUCCAAUUCUUUAUcaacaUUUaUUUUgaUUUUUUggacaUcca
+	Sangariola       GGAGCCCCUGAUAUAGCUUUCCCUCGAAUAAAUAAUAUAAGAUUUUGACUUCUACCCCCUUCCUUAUUUCUAUUACUAAUAAGAAGAAUAGUAGAAAGAGGAGCAGGAACAGGAUGAACUGUUUACCCCCCUCUAUCAGCUAAUAUUGCUCAUGGAGGAUCUUCAGUAGAUUUAGCUAUUUUUAGACUACAUCUAGCAGGAAUCUCUUCAAUUUUAGGAGCUAUUAAUUUUAUUACAACUGUUAUUAAUAUACGACCUAUAGGAAUAACUUUAGAUCGAAUACCCCUAUUUGUUUGAGCUGUAAUAAUUACAGCAAUUCUAUUACUUUUAUCCUUGCCAGUAUUAGCUGGAGCAAUUACUAUACUAUUAACUGACCGAAAUUUAAAUACUUCAUUUUUUGAUCCGGCAGGAGGAGGAGACCCUAUUUUAUACCAACACUUAUUUUGAUUUUUUGGACAUCCA
+	Aulacophora      GGGGCUCCUGAUAUAGCUUUCCCUCGUAUAAAUAAUAUAAGAUUUUGAUUACUUCCUCCUUCUCUAUUUUUAUUAAUUAUAAGUAGAGUUGUUGAAAGAGGAGCUGGAACUGGCUGAACUGUGUACCCUCCUCUUUCUUCGAAUAUUGCCCAUGGAGGUUCUUCUGUUGAUUUAGCAAUUUUCAGUUUACAUUUAGCCGGAAUUUCUUCAAUUUUAGGAGCAAUUAAUUUUAUCACAACCGUAAUUAAUAUACGUCCUAAAGGAAUAACCCUAGACCGAAUACCACUAUUUGUAUGAGCUGUUGUUAUUACAGCUGUAUUAUUAUUAUUAUCUCUACCAGUUUUAGCUGGAGCUAUUACAAUAUUAUUAACAGAUCGAAAUCUAAAUACUUCCUUUUUUGAUCCUGCUGGUGGAGGAGAUCCUAUUUUAUAUCAACAUUUAUUUUGAUUUUUUGGGCAUCCA
+	Diabrotica       ggDgcYccHgaYaUAGCAUUCCCUCGAAUAAAUAAUAUAAGAUUUUGACUUUUACCACCCUCUUUAUUAUUAUUAUUAUUAAGAAGAAUAGUAGAAAAUGGAGUUGGUACCGGAUGAACAGUUUAUCCCCCUUUAUCAUCCAAUAUUGCUCACGGAGGUUCAUCAGUUGAUUUAGCUAUUUUUAGUUUACACUUGGCUGGAAUUUCUUCAAUUUUAGGAGCAAUUAAUUUUAUUACUACAGUAAUUAAUAUACGUCCAAUAGGAAUAACUUUUGACCGAAUACCAUUAUUUGUAUGAGCAGUUGUUAUUACAGCAGUUUUACUACUAUUAUCAUUACCUGUUCUUGCCGGGGCAAUUACAAUAUUAUUAACAGAUCGUAAUCUAAAUACCUCUUUUUUUGAUCCUGCUGGAGGUGGUGAUCCUAUUUUAUAUCAACAUUUAUUUUGAUUUUUCGGACAUCCU
+	Diorhabda        GGUGCUCCAGAUAUAGCAUUUCCUCGAAUAAAUAAUAUAAGUUUCUGAUUACUACCUCCUUCUUUAUUUCUUCUAAUUAUAAGAAGAAUCGUAGAAAGAGGUGCAGGAACUGGAUGAACAGUUUAUCCCCCUCUUUCAUCUAAUAUUGCACAUGGAGGAUCUUCAGUAGAUUUAGCUAUUUUUAGUUUACAUUUAGCUGGAAUCUCCUCAAUUUUAGGAGCUAUUAAUUUUAUUACUACUGUAAUUAAUAUACGACCUAAAGGUAUAACUUUAGAUCGAAUGCCUUUAUUUGUAUGAGCCGUUGUAAUUACAGCAAUCCUUUUACUAUUAUCUUUACCAGUUUUAGCCGGAGCUAUUACUAUACUAUUAACUGAUCGAAAUUUAAAUACCUCUUUUUUUGAUCCUGCUGGGGGAGGAGAUCCUAUUUUAUACCAACAUUUAUUUUGAUUUUUUGGACAUCCU
+	Schematiza       GGAGCCCCUGACAUAGCCUUUCCUCGAAUAAAUAACUUAAGAUUUUGACUUUUGCCUCCUUCAUUAUUCCUCUUAAUUAUAAGAAGAAUUGUAGAAAGUGGAGCUGGUACUGGUUGAACUGUUUAUCCACCUUUAUCCUCUAAUAUUGCCCAUGGAGGAUCUUCAGUAGAUUUAGCAAUUUUCAGUCUACAUCUUGCCGGAAUUUCAUCAAUUCUAGGAGCAAUUAAUUUUAUUACGACAGUGAUUAAUAUACGACCUAGAGGGAUAAAAUUAGACCGAUUACCUUUAUUUGUUUGAGCUGUAAUAAUUACAGCUAUUUUAUUAUUGUUAUCUCUACCUGUUUUAGCAGGUGCAAUUACUAUGCUUUUAACUGACCGAAAUUUAAAUACUUCAUUUUUUGAUCCUGCUGGAGGAGGAGAUCCUAUUCUUUAUCAACAUUUAUUUUGAUUUUUUGGACACCCU
+	Oides            GGUGCCCCCGAUAUAGCAUUUCCACGAAUAAAUAAUAUAAGAUUUUGACUAUUACCCCCUUCUCUUUUACUGUUAAUUAUAAGAAGAAUGGUGGAAAGUGGGGCGGGCACAGGAUGAACAGUUUAUCCCCCUCUUUCAUCUAAUAUUGCUCACAGAGGCUCUAGAGUUGACUUGGCUAUUUUUAGCCUACAUUUAGCCGGAAUCUCAUCUAUUUUAGGAGCAAUUAAUUUUAUUACUACAAUUAUCAAUAUACGACCUUCAAGAAUAUUUAUAGACCAAAUCCCAUUAUUUGUAUGAUCAGUCUUAAUUACAGCUAUUCUUUUACUUCUGUCUCUCCCUGUAUUAGCAGGGGCAAUCACUAUACUUUUAACUGAUCGAAAUUUAAAUACAUCAUUUUUUGACCCUGCAGGAGGUGGUGAUCCAAUCUUAUACCAACAUUUAUUUUGAUUUUUUGGACAUCCU
+	
+	[CO1 protein]
+	Orsodacne       GAPDMAFPRMNNMSFWLLPPSLTLLLMSSIVESGAGTGWTVYPPLSSNIAHSGSSVDLAIFSLHLAGISSILGAVNFITTVINMRPVGMSLDKMPLFVWAVIITAVLLLLSLPVLAGAITMLLTDRNINTSFFDPSGGGDPILYQHLFWFFGHP
+	Chrysomela      GAPDMAFPRLNNMSFWLLPPSLFLLLMSSIVENGVGTGWTVYPPLSTNIAHSGSSVDLAIFSLHLAGISSILGAINFITTVINMRPEGMNFEQTPLFVWAVLITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Altica          GAPDMAFPRMNNMSFWLLPPSIFLLLMSSLVESGAGTGWTVYPPLSSNLAH?GPSVDLAIFSLHLAGISSILGAINFITTMINMRPQGMSMDQMPLFVWAVFITAILLLLSLPVLAGAITMLLTDRNLNTSFFEPAGGGDPILYQHLFWFFGHP
+	Agelastica      GAPDMAFPRMNNMSFWLLPPSIFLLIMSSIVESGAGTGWTVYPPLSSNIAHNGSSVDLAIFSLHLAGISSILGAINFITTVINMRPNGMSFDRMPLFVWAVVITAVLLLLSLPVLAGAITMLLTDRNLNTSFFDPTGGGDPILYQHLFWFFGHP
+	Monolepta       GAPDMAFPRMNNMSFWLLPPSLFLLIMSSIVESGAGTGWTVYPPLSANIAHGGASVDLAIFSLHLAGISSILGAINFITTVINMRPAGMTLDRMPLFVWAVVITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Phyllobrotica   GAPDMAFPRMNNMSFWLLPPSLFFLIMSSIVESGVGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTIINMRPQGMTLDRMPLFVWAVLITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Allochroma      GAPDMAFPRMNNMSFWLLPPSLFFLLLSSLAESGAGTGWTVYPPLSANIAHSGSSVDLAIFSLHLAGISSILGAINFISTVINMRPKGMTLDRMPLFVWAVTITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Chrysolina      GAPDMAFPRMNNMSFWLLPPSLIFLLMSSIVESGVGTGWTVYPPLSANVAHSGPSVDLAIFSLHLAGISSILGAINFITTIINMHPTGMKLEQMPLFSWAVLITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPTSGGDPILYQHLFWFFGHP
+	Aphthona        ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Chaetocnema     GAPDMAFPRMNNMSFWLLPPSLMFLNFSSLLNNGVGTGWTVYPPLSANLFHMGNAVDLAIFSLHMAGISSILGAINFITTIMNMKILNLKMDKIPLFVWSIFITTILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Systena         GAPDMAFPRMNNMSFWLLPPSLFLLLMSSVVESGAGTGWTVYPPLASNIAHGGSSVDLAIFSLHLAGISSILGAINFITTVINMRPSGMLLDRMPLFVWAVVITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Monocesta       GAPDMAFPRMNNMSFWLLPPSLFLLIMSSIVESGAGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTTINMRPKGMSLDRMPLFVWAVTITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Disonycha       GAPDMAFPRMNNMSFWLLPPSLFLLLMSSVVESGAGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTILNMRPNGMTLDRMPLFVWSVIITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPVGGGDPILYQHLFWFFGHP
+	Blepharida      GAPDMAFPRNNNMSFWLLPPSLFLLLMSSMVESGAGTGWTVYPPLSSNIAHNGASVDLAIFSLHLAGISSILGAINFITTIINMRPAGMTLDRMPLFVWAVVITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Galeruca        GAPDMAFPRMNNMSFWLLPPSLFLLIMSSIVESGAGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTVINMRPKGMTLDRMPLFVWAVTITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Orthaltica      GAPDMAFPRMNNMSFWLLPPSLFLLIMSSMVESGAGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTIINMRPKGMQLDQMPLFVWAVIITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Paropsis        GAPDMAFPRMNNMSFWLLPPSLFFLLMSSIVESGAGTGWTVYPPLSANVAHSGSSVDLAIFSLYMAGISSILGAINFITTIINMRPTGMSIDRMPLFVWAVMITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPADGGDPILYQHLFWFFGHP
+	Timarcha        GAPDMAFPRMNNMSFWLLPPSLTLLLLSSITNNGAGTGWTVYPPLSANLAHNGSSVDLAIFSLHLAGISSILGAANFISTIMNMQISGMKLDQISLFPWSVMITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPSGGGDPILYQHLFWFFGHP
+	Zygograma       GAPDMAFPRMNNMSFWLLPPSLLFLVMSSIVENGVGTGWTVYPPLSANTAHSGSSVDLAIFSLHLAGISSILGAINFITTVANMHPMGMKLDQMPLFSWAVLITAILLLISLPVLAGAITMLLTDRNLNTSFFDPVSGGDPILYQHLFWFFGHP
+	Syneta          GAPDMAFPRMNNMSFWLLPPSLSLLLMSSIVENGAGTGWTVYPPLSANIAHSGSSVDLAIFSLHLAGISSILGAVNFITTVINMRPEKMTLDRMSLFIWAVTITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Dibolia         ????MAFPRMNNMSFWLLPPSLFLLLMSSMVESGVGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTIINMRPKGMSFDRMPLFVWSVLITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPSGGGDPILYQHLFWFFGHP
+	Sangariola      GAPDMAFPRMNNMSFWLLPPSLFLLLMSSMVESGAGTGWTVYPPLSANIAHGGSSVDLAIFSLHLAGISSILGAINFITTVINMRPMGMTLDRMPLFVWAVMITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Aulacophora     GAPDMAFPRMNNMSFWLLPPSLFLLIMSSVVESGAGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTVINMRPKGMTLDRMPLFVWAVVITAVLLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Diabrotica      GAPDMAFPRMNNMSFWLLPPSLLLLLLSSMVENGVGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTVINMRPMGMTFDRMPLFVWAVVITAVLLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Diorhabda       GAPDMAFPRMNNMSFWLLPPSLFLLIMSSIVESGAGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTVINMRPKGMTLDRMPLFVWAVVITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Schematiza      GAPDMAFPRMNNLSFWLLPPSLFLLIMSSIVESGAGTGWTVYPPLSSNIAHGGSSVDLAIFSLHLAGISSILGAINFITTVINMRPSGMKLDRLPLFVWAVMITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	Oides           GAPDMAFPRMNNMSFWLLPPSLLLLIMSSMVESGAGTGWTVYPPLSSNIAHSGSSVDLAIFSLHLAGISSILGAINFITTIINMRPSSMFMDQIPLFVWSVLITAILLLLSLPVLAGAITMLLTDRNLNTSFFDPAGGGDPILYQHLFWFFGHP
+	
+	
+	[EF1a amino acids]
+	Orsodacne       ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Chrysomela      SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSESRFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Altica          SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFDEIKKEVSSYIKKIGYNPAAVAFVP
+	Agelastica      SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Monolepta       SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Phyllobrotica   ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Allochroma      SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Chrysolina      SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQIIIGVNKMDSTEPPYSESRFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Aphthona        SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Chaetocnema     SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Systena         SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDDPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARLEEIKKEVSSYIKKIGYNPAAVAFVP
+	Monocesta       SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSESRFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Disonycha       SFKYAWVLDKLKAERERGITIDIALWKFETSKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Blepharida      SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Galeruca        SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARYEEIKKEVSSYIKKIGYNPAAVAFVP
+	Orthaltica      SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Paropsis        SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSDSRFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Timarcha        SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSETRFEEIKKEVSSYIKKIGYNPAGVPFVP
+	Zygograma       SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSETRFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Syneta          SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLVVGVNKMDSTEPPYSEPRFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Dibolia         ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Sangariola      SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Aulacophora     SFKYAWVLDKLKAERERGITIDIALWKFETSKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYREARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Diabrotica      ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
+	Diorhabda       SFKYAWVLDKLKAERERGITIDIALWKFETSKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Schematiza      SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSESRFEEIKKEVSSYIKKIGYNPAAVAFVP
+	Oides           SFKYAWVLDKLKAERERGITIDIALWKFETAKYYVTIIDAPGHRDFIKNMITGTSQADCAVLIVAAGTGEFEAGISKNGQTREHALLAFTLGVKQLIVGVNKMDSTEPPYSEARFEEIKKEVSSYIKKIGYNPAAVAFVP
+	
+	
+	[Morphology]
+	Orsodacne       20002  00000  01000  00100  10010  10110  11011  02100  00110  00001
+	Chrysomela      00102  10000  00011  10110  12011  10001  01010  10110  00101  01011
+	Altica          21112  22201  12121  11021  02110  00012  10011  11110  01101  00101
+	Agelastica      01110  11101  01021  11010  12100  11110  11011  10{01}10  00110  00000
+	Monolepta       11110  20001  01021  11021  02110  01010  11011  11010  00100  00000
+	Phyllobrotica   ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????
+	Allochroma      11111  20111  12111  01021  02110  00010  10011  11112  01101  00111
+	Chrysolina      00102  10100  00001  10110  12011  10001  01010  10010  01101  01011
+	Aphthona        21112  22201  12121  11021  02110  00012  10011  11112  11101  00101
+	Chaetocnema     21112  22201  12121  11021  02110  00012  10011  11112  11101  00101
+	Systena         21112  220?1  12121  11021  02110  00112  10011  11111  01101  00101
+	Monocesta       01110  21101  00121  11110  12200  ?1010  11011  11010  00100  00010
+	Disonycha       21112  21101  11121  11021  02110  00012  10111  10112  00101  00101
+	Blepharida      11102  10101  02121  11110  02110  00112  10011  10010  01101  01111
+	Galeruca        01110  12211  00021  11010  12000  1??10  11010  11010  00100  00000
+	Orthaltica      01112  20011  12121  11031  02110  ?0001  10001  02112  11101  00000
+	Paropsis        ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????
+	Timarcha        00102  10000  00001  10110  12011  0??01  01011  12???  ?1101  01001
+	Zygograma       ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????
+	Syneta          01012  00010  00111  10?00  11000  01110  01100  10112  00010  10001
+	Dibolia         21112  22001  12121  11021  02110  00012  10011  11112  01101  00111
+	Sangariola      21112  22201  12121  11021  02110  00112  10011  11112  00101  00101
+	Aulacophora     11100  10101  00021  01010  12300  01010  11011  01010  00110  00000
+	Diabrotica      ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????
+	Diorhabda       01110  11001  01021  11011  12000  10010  11010  11010  00100  00000
+	Schematiza      ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????  ?????
+	Oides           01110  10001  00021  11120  12001  01010  11110  11110  00110  00001
+	;
+end;
+
+begin mrbayes;
+	[Define pairs for the doublet model]
+	pairs   22:497, 21:498, 20:499, 19:500, 18:501, 17:502, 16:503, 33:172, 34:171, 35:170, 36:169, 37:168, 
+	        38:167, 45:160, 46:159, 47:158, 48:157, 49:156, 50:155, 51:154, 53:153, 54:152, 55:151, 59:150, 
+	        60:149, 61:148, 62:147, 63:146, 86:126, 87:125, 88:124, 89:123, 187:484, 186:485, 185:486, 
+	        184:487, 183:488, 182:489, 191:295, 192:294, 193:293, 194:292, 195:291, 196:290, 197:289, 
+	        198:288, 199:287, 200:286, 201:283, 202:282, 203:281, 204:280, 205:279, 206:278, 213:268, 
+	        214:267, 215:266, 216:265, 217:264, 226:259, 227:258, 228:257, 229:256, 230:255, 231:254, 
+	        232:253, 233:252, 304:477, 305:476, 306:475, 307:474, 308:473, 316:335, 317:334, 318:333, 
+	        319:332, 336:440, 337:439, 338:438, 339:437, 340:436, 341:435, 343:422, 344:421, 345:420, 
+	        346:419, 347:418, 348:417, 349:416, 351:414, 352:413, 353:412, 354:411, 355:408, 356:407, 
+	        357:406, 358:405, 359:404, 360:403, 361:402, 369:400, 370:399, 371:398, 372:397, 373:396, 
+	        376:394, 377:393, 379:392, 380:391, 381:390;
+	
+	[Define character sets]
+	charset ambiguously_aligned = 92-103 108-122 234-251 320-327 449-468;
+	charset stems               = 22 497 21 498 20 499 19 500 18 501 17 502 16 503 33 172 34 171 35 170 
+	                              36 169 37 168 38 167 45 160 46 159 47 158 48 157 49 156 50 155 51 154 
+	                              53 153 54 152 55 151 59 150 60 149 61 148 62 147 63 146 86 126 87 125 
+	                              88 124 89 123 187 484 186 485 185 486 184 487 183 488 182 489 191 295 
+	                              192 294 193 293 194 292 195 291 196 290 197 289 198 288 199 287 200 286 
+	                              201 283 202 282 203 281 204 280 205 279 206 278 213 268 214 267 215 266 
+	                              216 265 217 264 226 259 227 258 228 257 229 256 230 255 231 254 232 253 
+	                              233 252 304 477 305 476 306 475 307 474 308 473 316 335 317 334 318 333 
+	                              319 332 336 440 337 439 338 438 339 437 340 436 341 435 343 422 344 421 
+	                              345 420 346 419 347 418 348 417 349 416 351 414 352 413 353 412 354 411 
+	                              355 408 356 407 357 406 358 405 359 404 360 403 361 402 369 400 370 399 
+	                              371 398 372 397 373 396 376 394 377 393 379 392 380 391 381 390;
+	charset loops               = 1-15 23-32 39-44 52 56-58 64-85 90-122 127-145 161-166 173-181 188-190 
+	                              207-212 218-225 234-251 260-263 269-277 284 285 296-303 309-315 320-331 
+	                              342 350 362-368 374 375 378 382-389 395 401 409 410 415 423-434 441-472 
+	                              478-483 490-496 504-516;
+	charset rna                 =    1 -  516    ;
+	charset dna                 =  517 - 1398    ;
+	charset protein             = 1399 - 1692    ;
+	charset morphology          = 1693 - 1742    ;
+	charset D2                  =    1 -  516    ;
+	charset EF1a                =  517 -  936    ;
+	charset EF1a1st             =  517 -  936 \ 3;
+	charset EF1a2nd             =  518 -  936 \ 3;
+	charset EF1a3rd             =  519 -  936 \ 3;
+	charset CO1                 =  937 - 1398    ;
+	charset CO11st              =  937 - 1398 \ 3;
+	charset CO12nd              =  938 - 1398 \ 3;
+	charset CO13rd              =  939 - 1398 \ 3;
+	charset CO1aa               = 1399 - 1552    ;
+	charset EF1aa               = 1553 - 1692    ;
+	charset Morpho              = 1693 - 1742    ;
+	
+	[Define partitions]
+	partition by_gene_and_pos    = 10:rna,EF1a1st,EF1a2nd,EF1a3rd,CO11st,CO12nd,CO13rd,CO1aa,EF1aa,Morpho;
+	partition by_gene            = 6:rna,EF1a,CO1,CO1aa,EF1aa,Morpho;
+	partition by_gene_and_struct = 7:stems,loops,EF1a,CO1,CO1aa,EF1aa,Morpho;
+	
+	[Exclude the ambiguously aligned characters]
+	exclude ambiguously_aligned;
+	
+	[Select the partition to be used]
+	set partition = by_gene_and_struct;
+
+	[Since we will be using a codon model for partition 4, select the relevant genetic code]
+	lset applyto=(4)   code=metmt;
+	
+	[Apply the doublet model to the first partition (RNA stem regions)]
+	lset applyto=(1)   nucmodel=doublet;
+	
+	[Use a standard 4by4 nucleotide model for the second partition (loops)]
+	lset applyto=(2)   nucmodel=4by4;
+	
+	[Use a codon model for partitions 3 and 4 (Ef1a and CO1)]
+	lset applyto=(3,4) nucmodel=codon;
+	
+	[Use a GTR model for all nucleotide partitions]
+	lset nst=6;
+	
+	[Allow rates to vary across all partitions]
+	prset ratepr=variable;
+
+	[Used model averaging across fixed rate models for all amino-acid partitions]
+	prset aamodelpr=mixed;
+	
+	[Set some mcmc parameters. You will have to run this analysis longer to get
+         convergence; these settings will only start a short sample run when you type mcmc.]
+	mcmcp ngen=10000 nchains=1 printfreq=10;
+end;
diff --git a/test/NTSValidIn/linktest.nex b/test/NTSValidIn/linktest.nex
new file mode 100644
index 0000000..79d3d60
--- /dev/null
+++ b/test/NTSValidIn/linktest.nex
@@ -0,0 +1,101 @@
+#nexus
+begin taxa;
+  dimensions ntax=6;
+  title firstt;
+  taxlabels
+	P._fimbriata
+	'P. robusta'
+	'P. americana'
+	'P. myriophylla'
+	'P. polygama'
+	'P. macrophylla'
+  ;
+  blockid bogus;
+end;
+
+begin taxa;
+  dimensions ntax=6;
+  title second;
+  taxlabels
+	'P. fimbriata'
+	'X. robusta'
+	'P. americana'
+	'N. myriophylla'
+	'P. polygama'
+	'P. macrophylla'
+  ;
+  blockid bogus2;
+end;
+
+begin characters;
+	LINK TAXA= firstt;
+  dimensions nchar=45;
+  format datatype=dna missing=? gap=-;
+  title firstchars;
+  matrix
+	P._fimbriata    {a, G}cctcggcttaacgaacctcggcttaacgaacctcggcttaacga
+	P._robusta      (a, , C)cctcggcttaaccaacctcggcttaacgaacctcggcttaacga
+	P._americana    rcgtcgctttca---acgtcgctttcaccaacgtcgctttcacca
+	P._myriophylla  acgtcgctttca---acgtcgctttcaccaacgtc?ctttcacca
+	P._polygama     acgtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca
+	P._macrophylla  acgtcgctctcaccaacgtcgctttcaccaacgtcgctttcacca
+  ;
+end;
+
+begin characters;
+LINK TAXA= second;
+  title second_chars;
+	dimensions nchar=45;
+  format datatype=rna missing=? gap=-;
+  matrix
+	P._fimbriata    YRcucggcuuaacgaaccucggcuuaacgaaccucggcuuaacga
+	X._robusta      Nccucggcuuaaccaaccucggcuuaacgaaccucggcuuaacga
+	P._americana    acgucgcuuuca---acgucgcuuucaccaacgucgcuuucacca
+	N._myriophylla  acgucgcuuuca---acgucgcuuucaccaacguc?cuuucacca
+	P._polygama     acgucgcucucaccaacgucgcuuucaccaacguc?cuuucacca
+	P._macrophylla  acgucgcucucaccaacgucgcuuucaccaacgucgcuuucacca
+  ;
+end;
+begin trees;
+	title first_trees;
+LINK TAXA= second characters = bogus; 
+	tree one = [&U] ('P. fimbriata',
+	'X. robusta',
+	(		'P. americana',
+		'N. myriophylla'
+	)
+	'P. polygama',
+	'P. macrophylla');
+end;
+begin trees;
+LINK TAXA= firstt characters = bogus; 
+	title second_trees;
+	tree one = [&U] ('P. fimbriata',
+	'P. robusta',
+	(		'P. americana',
+		'P. myriophylla'
+	));
+end;
+begin assumptions;
+	title mixedupassump;
+	TAXSET  o(TAXA=firstt) = P._fimbriata P._robusta  ;
+	CHARSET o (Characters=second_chars)= 1-5 7 9 11 12-24\2  30-.\5;
+	CHARSET p  (Characters=firstchars Standard) = 2- 7 9-11 12-24\2  44-. ;
+	TAXSET  p (Standard TAXA=second) = 1 - . \2;
+	CHARSET r  (Characters=firstchars) = 2- 8 9-11   44-.  12-24\3;
+end;
+begin assumptions;
+	title explicit;
+    LINK TAXA = firstt CHARACTERS = 'second chars';
+	TAXSET o = P._fimbriata P._robusta  ;
+	CHARSET oe = 1-5 7 9 11 12-24\2  30-.\5;
+end;
+begin assumptions;
+	title explicit2;
+    LINK TAXA = second CHARACTERS = firstchars;
+	CHARSET pe = 2- 7 9-11 12-24\2  44-. ;
+	TAXSET pe = p 2;
+	
+end;
+
+
diff --git a/test/NTSValidIn/m.nex b/test/NTSValidIn/m.nex
new file mode 100644
index 0000000..3e3e1bf
--- /dev/null
+++ b/test/NTSValidIn/m.nex
@@ -0,0 +1,21 @@
+#NEXUS
+BEGIN TAXA;
+	DIMENSIONS NTax = 4;
+	TAXLABELS 'one fish' 'two fish' 'red fish' 'blue fish';
+END;
+BEGIN CHARACTERS;
+	DIMENSIONS NChar=9;
+	
+	CHARLABELS  'landmark 1' 'landmark 2' 'landmark 3' 'landmark 4' 'landmark 5' 'landmark 6' 'landmark 7' 'landmark 8';
+	FORMAT Datatype=Continuous Items = (X Y );
+Matrix
+'one fish'     (0 1 )  (2 3 )  (5 3 )  (6.5 2 )  (9.5 2.5 )  (9.5 0 )  (6.5 0.5 )  (4 0 )  (2 0 ) 
+'two fish'     (0 1.5 )  (2.5 2.8 )  (4.7 3 )  (6.5 2 )  (9.5 2.5 )  (8.5 0 )  (6.5 0.5 )  (4 0 )  (2 0 ) 
+'red fish'     (0 1.2 )  (2 3 )  (4.7 3 )  (7.5 2 )  (12.5 2.5 )  (9.5 0 )  (7.5 0.9 )  (4 0 )  (2 0 ) 
+'blue fish'    (0 1 )  (2 3 )  (5 3 )  (7.5 2 )  (9 2.5 )  (8.5 0.5 )  (7.5 0.8 )  (4 0 )  (2 0 ) ;
+END;
+[!Skipping unknown block (NOTES)...]
+begin assumptions;
+	charset t = 1-5\2;
+	charset u = t 6;
+end;
diff --git a/test/NTSValidIn/mdata.nex b/test/NTSValidIn/mdata.nex
new file mode 100644
index 0000000..bd8e654
--- /dev/null
+++ b/test/NTSValidIn/mdata.nex
@@ -0,0 +1,16 @@
+#NEXUS
+BEGIN DATA;
+	DIMENSIONS NTax = 4 NChar=9;
+	
+	CHARLABELS  'landmark 1' 'landmark 2' 'landmark 3' 'landmark 4' 'landmark 5' 'landmark 6' 'landmark 7' 'landmark 8';
+	FORMAT Datatype=Continuous Items = (X Y );
+Matrix
+'one fish'     (0 1 )  (2 3 )  (5 3 )  (6.5 2 )  (9.5 2.5 )  (9.5 0 )  (6.5 0.5 )  (4 0 )  (2 0 ) 
+'two fish'     (0 1.5 )  (2.5 2.8 )  (4.7 3 )  (6.5 2 )  (9.5 2.5 )  (8.5 0 )  (6.5 0.5 )  (4 0 )  (2 0 ) 
+'red fish'     (0 1.2 )  (2 3 )  (4.7 3 )  (7.5 2 )  (12.5 2.5 )  (9.5 0 )  (7.5 0.9 )  (4 0 )  (2 0 ) 
+'blue fish'    (0 1 )  (2 3 )  (5 3 )  (7.5 2 )  (9 2.5 )  (8.5 0.5 )  (7.5 0.8 )  (4 0 )  (2 0 ) ;
+END;
+begin assumptions;
+	charset t = 1-5\2;
+	charset u = t 6;
+end;
diff --git a/test/NTSValidIn/nhxtree.nex b/test/NTSValidIn/nhxtree.nex
new file mode 100644
index 0000000..bf9afec
--- /dev/null
+++ b/test/NTSValidIn/nhxtree.nex
@@ -0,0 +1,160 @@
+#NEXUS
+[written Thu Dec 20 00:38:47 CST 2007 by Mesquite  version 2.01 (build j28) at eunice.local/192.168.2.1]
+
+BEGIN TAXA;
+	TITLE Untitled_TAXA_Block_1;
+	DIMENSIONS NTAX=8;
+	TAXLABELS
+		A B C D E F G H 
+	;
+
+END;
+
+
+BEGIN CHARACTERS;
+	TITLE  Untitled_CHARACTERS_Block_1;
+	DIMENSIONS  NCHAR=9;
+	FORMAT DATATYPE = Protein GAP = - MISSING = ?;
+CHARSTATELABELS 
+		1 one, 2 two, 3 three, 4 four, 5 five, 6 six, 7 seven, 8 eight, 9 nine ; 
+	MATRIX
+	A  THIS-IS-A
+
+	B  THIS-IS-{D,N}
+
+	C  THIS-IS-C
+
+	D  THIS-IS-D
+
+	E  THIS-IS-E
+
+	F  THIS-IS-F
+
+	G  THIS-IS-G
+
+	H  THIS-IS-H
+
+
+;
+
+
+END;
+
+BEGIN TREES;
+	Title Untitled_TREES_Block_1;
+	LINK Taxa = Untitled_TAXA_Block_1;
+	TRANSLATE
+		1 A,
+		2 B,
+		3 C,
+		4 D,
+		5 E,
+		6 F,
+		7 G,
+		8 H;
+	TREE basic_rake = (1:1.0,(2:1.0,3:1.0):3.14159[&&NHX:S=Primates:E=1.1.1.1:D=Y:B=100],4:1.0[&&NHX:S=Primates:E=1.1.1.1:D=Y:Co=Y],5:1.0,6:1.0,7:1.0,8:1.0);
+
+END;
+
+
+BEGIN CODONS;
+CODESET * UNTITLED   =  universal:  1 -  9;
+
+
+END;
+
+BEGIN ASSUMPTIONS;
+	CHARSET * UNTITLEDo   =  1 - 3 \ 2 4 7-9;
+	CHARSET * UNTITLED   =  1 2  3 4 7-9;
+
+END;
+BEGIN ASSUMPTIONS;
+	TYPESET * UNTITLED   =  unord:  1 -  9;
+END;
+
+BEGIN MESQUITECHARMODELS;
+	ProbModelSet * UNTITLED   =  'Mk1 (est.)':  1 -  9;
+END;
+
+Begin MESQUITE;
+		MESQUITESCRIPTVERSION 2;
+		TITLE AUTO;
+		tell ProjectCoordinator;
+		getEmployee #mesquite.minimal.ManageTaxa.ManageTaxa;
+		tell It;
+			setID 0 2002854640106134798;
+		endTell;
+		getEmployee #mesquite.charMatrices.ManageCharacters.ManageCharacters;
+		tell It;
+			setID 0 5914780497712519392;
+			checksum 0 1033486703 null;
+		endTell;
+		getEmployee  #mesquite.charMatrices.BasicDataWindowCoord.BasicDataWindowCoord;
+		tell It;
+			showDataWindow #5914780497712519392 #mesquite.charMatrices.BasicDataWindowMaker.BasicDataWindowMaker;
+			tell It;
+				getWindow;
+				tell It;
+					setExplanationSize 30;
+					setAnnotationSize 20;
+					setFontIncAnnot 0;
+					setFontIncExp 0;
+					setSize 700 564;
+					setLocation 370 38;
+					setFont SanSerif;
+					setFontSize 10;
+					getToolPalette;
+					tell It;
+					endTell;
+					setTool mesquite.charMatrices.BasicDataWindowMaker.BasicDataWindow.arrow;
+					colorCells  #mesquite.charMatrices.ColorByState.ColorByState;
+					setBackground White;
+					toggleShowNames on;
+					toggleShowTaxonNames on;
+					toggleTight off;
+					toggleShowChanges off;
+					toggleSeparateLines off;
+					toggleShowStates on;
+					toggleAutoWCharNames off;
+					toggleShowDefaultCharNames off;
+					toggleConstrainCW on;
+					setColumnWidth 16;
+					toggleBirdsEye off;
+					toggleColorsPanel off;
+					birdsEyeWidth 2;
+					toggleLinkedScrolling on;
+					toggleScrollLinkedTables off;
+				endTell;
+				showWindow;
+				getEmployee #mesquite.categ.StateNamesStrip.StateNamesStrip;
+				tell It;
+					showStrip off;
+				endTell;
+				getEmployee #mesquite.charMatrices.AnnotPanel.AnnotPanel;
+				tell It;
+					togglePanel off;
+				endTell;
+				getEmployee #mesquite.charMatrices.CharReferenceStrip.CharReferenceStrip;
+				tell It;
+					showStrip off;
+				endTell;
+				getEmployee #mesquite.charMatrices.ColorCells.ColorCells;
+				tell It;
+					setColor Red;
+					removeColor off;
+				endTell;
+				getEmployee #mesquite.charMatrices.QuickKeySelector.QuickKeySelector;
+				tell It;
+					autotabOff;
+				endTell;
+				getEmployee #mesquite.align.AlignToDropped.AlignToDropped;
+				tell It;
+					gapCosts 8 3 2 2;
+					subCosts  5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 [...]
+				endTell;
+			endTell;
+		endTell;
+		endTell;
+end;
+
+
diff --git a/test/NTSValidIn/notaxablock.nex b/test/NTSValidIn/notaxablock.nex
new file mode 100644
index 0000000..608141d
--- /dev/null
+++ b/test/NTSValidIn/notaxablock.nex
@@ -0,0 +1,10 @@
+#NEXUS
+Begin Trees;
+  Translate 1 temporariaDMH84R1 ,
+  2 boyliiMVZ148929 ,
+  3 'luteiventris MT MVZ191016' ,
+  4 'luteiventris WA MVZ225749' ,
+  5 muscosaMVZ149006 ;
+ Tree a = [&U] (temporariaDMH84R1,'luteiventris WA MVZ225749',(boyliiMVZ148929,'luteiventris MT MVZ191016')) ;
+ TREE b = [&U](1,4,(2,3));
+End;
diff --git a/test/NTSValidIn/out.xml b/test/NTSValidIn/out.xml
new file mode 100644
index 0000000..fae6353
--- /dev/null
+++ b/test/NTSValidIn/out.xml
@@ -0,0 +1,1056 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<nex:nexml  version="0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nexml.org/2009" xmlns:nex="http://www.nexml.org/2009" xmlns="http://www.nexml.org/2009 generator="NEX_us2ml NCL version 2.1.17">
+  <otus id='t0' label='Untitled TAXA Block 1'>
+    <otu id='t0n0' label='D.persimilis'/>
+    <otu id='t0n1' label='D.pseudoobscura1'/>
+    <otu id='t0n2' label='D.pseudoobscura2'/>
+    <otu id='t0n3' label='D.miranda'/>
+    <otu id='t0n4' label='D.ambigua'/>
+    <otu id='t0n5' label='D.subobscura'/>
+    <otu id='t0n6' label='D.madeirensis'/>
+    <otu id='t0n7' label='D.willistoni'/>
+    <otu id='t0n8' label='D.lebanonensis'/>
+    <otu id='t0n9' label='D.melanogaster'/>
+    <otu id='t0n10' label='D.simulans'/>
+    <otu id='t0n11' label='D.mauritiana'/>
+    <otu id='t0n12' label='D.teissieri'/>
+    <otu id='t0n13' label='D.orena'/>
+    <otu id='t0n14' label='D.sechellia'/>
+    <otu id='t0n15' label='D.yakuba'/>
+    <otu id='t0n16' label='D.tsacasi'/>
+    <otu id='t0n17' label='D.crassifemur'/>
+    <otu id='t0n18' label='D.montana'/>
+    <otu id='t0n19' label='D.buzzatii 1'/>
+    <otu id='t0n20' label='D.buzzatii 2'/>
+    <otu id='t0n21' label='D.texana'/>
+    <otu id='t0n22' label='D.lummei'/>
+    <otu id='t0n23' label='D.lacicola'/>
+    <otu id='t0n24' label='D.borealis'/>
+    <otu id='t0n25' label='D.flavomontana'/>
+    <otu id='t0n26' label='D.americana'/>
+    <otu id='t0n27' label='Sc.albovittata'/>
+    <otu id='t0n28' label='D.immigrans'/>
+    <otu id='t0n29' label='D.mettleri'/>
+    <otu id='t0n30' label='D.arizonae 2'/>
+    <otu id='t0n31' label='D.hydei 1'/>
+    <otu id='t0n32' label='D.hydei 2'/>
+    <otu id='t0n33' label='D.mojavensis 1'/>
+    <otu id='t0n34' label='D.mojavensis 2'/>
+    <otu id='t0n35' label='D.mulleri 1'/>
+    <otu id='t0n36' label='D.mulleri 2'/>
+    <otu id='t0n37' label='D.navojoa'/>
+    <otu id='t0n38' label='D.virilis 1'/>
+    <otu id='t0n39' label='D.virilis 2'/>
+    <otu id='t0n40' label='D.silvestris'/>
+    <otu id='t0n41' label='D.grimshawi'/>
+    <otu id='t0n42' label='D.affinidisjuncta'/>
+    <otu id='t0n43' label='D.nigra'/>
+    <otu id='t0n44' label='D.mimica'/>
+    <otu id='t0n45' label='D.adiastola'/>
+    <otu id='t0n46' label='D.picticornis'/>
+    <otu id='t0n47' label='D.planitibia'/>
+    <otu id='t0n48' label='D.heteroneura'/>
+    <otu id='t0n49' label='D.differens'/>
+    <otu id='t0n50' label='D.wheeleri'/>
+    <otu id='t0n51' label='D.mayaguana'/>
+    <otu id='t0n52' label='D.hawaiiensis'/>
+    <otu id='t0n53' label='Z.tuberculatus'/>
+  </otus>
+  <characters id='c0' otus='t0' label='Untitled DATA Block 1' xsi:type='nex:DnaSeqs'>
+    <format>
+        <states id='s0n0'>
+          <state id='s0n0s0' symbol='A'/>
+          <state id='s0n0s1' symbol='C'/>
+          <state id='s0n0s2' symbol='G'/>
+          <state id='s0n0s3' symbol='T'/>
+          <state id='s0n0s15' label='Gap' symbol='-'/>
+          <state id='s0n0s16' label='Missing' symbol='?'/>
+          <uncertain_state_set id='s0n0s4' symbol='N'>
+            <member state='s0n0s0'/>
+            <member state='s0n0s1'/>
+            <member state='s0n0s2'/>
+            <member state='s0n0s3'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s5' symbol='B'>
+            <member state='s0n0s1'/>
+            <member state='s0n0s2'/>
+            <member state='s0n0s3'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s6' symbol='D'>
+            <member state='s0n0s0'/>
+            <member state='s0n0s2'/>
+            <member state='s0n0s3'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s7' symbol='H'>
+            <member state='s0n0s0'/>
+            <member state='s0n0s1'/>
+            <member state='s0n0s3'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s8' symbol='K'>
+            <member state='s0n0s2'/>
+            <member state='s0n0s3'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s9' symbol='M'>
+            <member state='s0n0s0'/>
+            <member state='s0n0s1'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s10' symbol='R'>
+            <member state='s0n0s0'/>
+            <member state='s0n0s2'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s11' symbol='S'>
+            <member state='s0n0s1'/>
+            <member state='s0n0s2'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s12' symbol='V'>
+            <member state='s0n0s0'/>
+            <member state='s0n0s1'/>
+            <member state='s0n0s2'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s13' symbol='W'>
+            <member state='s0n0s0'/>
+            <member state='s0n0s3'/>
+          </uncertain_state_set>
+          <uncertain_state_set id='s0n0s14' symbol='Y'>
+            <member state='s0n0s1'/>
+            <member state='s0n0s3'/>
+          </uncertain_state_set>
+        </states>
+      <char id='c0n0' states='s0n0'/>
+      <char id='c0n1' states='s0n0'/>
+      <char id='c0n2' states='s0n0'/>
+      <char id='c0n3' states='s0n0'/>
+      <char id='c0n4' states='s0n0'/>
+      <char id='c0n5' states='s0n0'/>
+      <char id='c0n6' states='s0n0'/>
+      <char id='c0n7' states='s0n0'/>
+      <char id='c0n8' states='s0n0'/>
+      <char id='c0n9' states='s0n0'/>
+      <char id='c0n10' states='s0n0'/>
+      <char id='c0n11' states='s0n0'/>
+      <char id='c0n12' states='s0n0'/>
+      <char id='c0n13' states='s0n0'/>
+      <char id='c0n14' states='s0n0'/>
+      <char id='c0n15' states='s0n0'/>
+      <char id='c0n16' states='s0n0'/>
+      <char id='c0n17' states='s0n0'/>
+      <char id='c0n18' states='s0n0'/>
+      <char id='c0n19' states='s0n0'/>
+      <char id='c0n20' states='s0n0'/>
+      <char id='c0n21' states='s0n0'/>
+      <char id='c0n22' states='s0n0'/>
+      <char id='c0n23' states='s0n0'/>
+      <char id='c0n24' states='s0n0'/>
+      <char id='c0n25' states='s0n0'/>
+      <char id='c0n26' states='s0n0'/>
+      <char id='c0n27' states='s0n0'/>
+      <char id='c0n28' states='s0n0'/>
+      <char id='c0n29' states='s0n0'/>
+      <char id='c0n30' states='s0n0'/>
+      <char id='c0n31' states='s0n0'/>
+      <char id='c0n32' states='s0n0'/>
+      <char id='c0n33' states='s0n0'/>
+      <char id='c0n34' states='s0n0'/>
+      <char id='c0n35' states='s0n0'/>
+      <char id='c0n36' states='s0n0'/>
+      <char id='c0n37' states='s0n0'/>
+      <char id='c0n38' states='s0n0'/>
+      <char id='c0n39' states='s0n0'/>
+      <char id='c0n40' states='s0n0'/>
+      <char id='c0n41' states='s0n0'/>
+      <char id='c0n42' states='s0n0'/>
+      <char id='c0n43' states='s0n0'/>
+      <char id='c0n44' states='s0n0'/>
+      <char id='c0n45' states='s0n0'/>
+      <char id='c0n46' states='s0n0'/>
+      <char id='c0n47' states='s0n0'/>
+      <char id='c0n48' states='s0n0'/>
+      <char id='c0n49' states='s0n0'/>
+      <char id='c0n50' states='s0n0'/>
+      <char id='c0n51' states='s0n0'/>
+      <char id='c0n52' states='s0n0'/>
+      <char id='c0n53' states='s0n0'/>
+      <char id='c0n54' states='s0n0'/>
+      <char id='c0n55' states='s0n0'/>
+      <char id='c0n56' states='s0n0'/>
+      <char id='c0n57' states='s0n0'/>
+      <char id='c0n58' states='s0n0'/>
+      <char id='c0n59' states='s0n0'/>
+      <char id='c0n60' states='s0n0'/>
+      <char id='c0n61' states='s0n0'/>
+      <char id='c0n62' states='s0n0'/>
+      <char id='c0n63' states='s0n0'/>
+      <char id='c0n64' states='s0n0'/>
+      <char id='c0n65' states='s0n0'/>
+      <char id='c0n66' states='s0n0'/>
+      <char id='c0n67' states='s0n0'/>
+      <char id='c0n68' states='s0n0'/>
+      <char id='c0n69' states='s0n0'/>
+      <char id='c0n70' states='s0n0'/>
+      <char id='c0n71' states='s0n0'/>
+      <char id='c0n72' states='s0n0'/>
+      <char id='c0n73' states='s0n0'/>
+      <char id='c0n74' states='s0n0'/>
+      <char id='c0n75' states='s0n0'/>
+      <char id='c0n76' states='s0n0'/>
+      <char id='c0n77' states='s0n0'/>
+      <char id='c0n78' states='s0n0'/>
+      <char id='c0n79' states='s0n0'/>
+      <char id='c0n80' states='s0n0'/>
+      <char id='c0n81' states='s0n0'/>
+      <char id='c0n82' states='s0n0'/>
+      <char id='c0n83' states='s0n0'/>
+      <char id='c0n84' states='s0n0'/>
+      <char id='c0n85' states='s0n0'/>
+      <char id='c0n86' states='s0n0'/>
+      <char id='c0n87' states='s0n0'/>
+      <char id='c0n88' states='s0n0'/>
+      <char id='c0n89' states='s0n0'/>
+      <char id='c0n90' states='s0n0'/>
+      <char id='c0n91' states='s0n0'/>
+      <char id='c0n92' states='s0n0'/>
+      <char id='c0n93' states='s0n0'/>
+      <char id='c0n94' states='s0n0'/>
+      <char id='c0n95' states='s0n0'/>
+      <char id='c0n96' states='s0n0'/>
+      <char id='c0n97' states='s0n0'/>
+      <char id='c0n98' states='s0n0'/>
+      <char id='c0n99' states='s0n0'/>
+      <char id='c0n100' states='s0n0'/>
+      <char id='c0n101' states='s0n0'/>
+      <char id='c0n102' states='s0n0'/>
+      <char id='c0n103' states='s0n0'/>
+      <char id='c0n104' states='s0n0'/>
+      <char id='c0n105' states='s0n0'/>
+      <char id='c0n106' states='s0n0'/>
+      <char id='c0n107' states='s0n0'/>
+      <char id='c0n108' states='s0n0'/>
+      <char id='c0n109' states='s0n0'/>
+      <char id='c0n110' states='s0n0'/>
+      <char id='c0n111' states='s0n0'/>
+      <char id='c0n112' states='s0n0'/>
+      <char id='c0n113' states='s0n0'/>
+      <char id='c0n114' states='s0n0'/>
+      <char id='c0n115' states='s0n0'/>
+      <char id='c0n116' states='s0n0'/>
+      <char id='c0n117' states='s0n0'/>
+      <char id='c0n118' states='s0n0'/>
+      <char id='c0n119' states='s0n0'/>
+      <char id='c0n120' states='s0n0'/>
+      <char id='c0n121' states='s0n0'/>
+      <char id='c0n122' states='s0n0'/>
+      <char id='c0n123' states='s0n0'/>
+      <char id='c0n124' states='s0n0'/>
+      <char id='c0n125' states='s0n0'/>
+      <char id='c0n126' states='s0n0'/>
+      <char id='c0n127' states='s0n0'/>
+      <char id='c0n128' states='s0n0'/>
+      <char id='c0n129' states='s0n0'/>
+      <char id='c0n130' states='s0n0'/>
+      <char id='c0n131' states='s0n0'/>
+      <char id='c0n132' states='s0n0'/>
+      <char id='c0n133' states='s0n0'/>
+      <char id='c0n134' states='s0n0'/>
+      <char id='c0n135' states='s0n0'/>
+      <char id='c0n136' states='s0n0'/>
+      <char id='c0n137' states='s0n0'/>
+      <char id='c0n138' states='s0n0'/>
+      <char id='c0n139' states='s0n0'/>
+      <char id='c0n140' states='s0n0'/>
+      <char id='c0n141' states='s0n0'/>
+      <char id='c0n142' states='s0n0'/>
+      <char id='c0n143' states='s0n0'/>
+      <char id='c0n144' states='s0n0'/>
+      <char id='c0n145' states='s0n0'/>
+      <char id='c0n146' states='s0n0'/>
+      <char id='c0n147' states='s0n0'/>
+      <char id='c0n148' states='s0n0'/>
+      <char id='c0n149' states='s0n0'/>
+      <char id='c0n150' states='s0n0'/>
+      <char id='c0n151' states='s0n0'/>
+      <char id='c0n152' states='s0n0'/>
+      <char id='c0n153' states='s0n0'/>
+      <char id='c0n154' states='s0n0'/>
+      <char id='c0n155' states='s0n0'/>
+      <char id='c0n156' states='s0n0'/>
+      <char id='c0n157' states='s0n0'/>
+      <char id='c0n158' states='s0n0'/>
+      <char id='c0n159' states='s0n0'/>
+      <char id='c0n160' states='s0n0'/>
+      <char id='c0n161' states='s0n0'/>
+      <char id='c0n162' states='s0n0'/>
+      <char id='c0n163' states='s0n0'/>
+      <char id='c0n164' states='s0n0'/>
+      <char id='c0n165' states='s0n0'/>
+      <char id='c0n166' states='s0n0'/>
+      <char id='c0n167' states='s0n0'/>
+      <char id='c0n168' states='s0n0'/>
+      <char id='c0n169' states='s0n0'/>
+      <char id='c0n170' states='s0n0'/>
+      <char id='c0n171' states='s0n0'/>
+      <char id='c0n172' states='s0n0'/>
+      <char id='c0n173' states='s0n0'/>
+      <char id='c0n174' states='s0n0'/>
+      <char id='c0n175' states='s0n0'/>
+      <char id='c0n176' states='s0n0'/>
+      <char id='c0n177' states='s0n0'/>
+      <char id='c0n178' states='s0n0'/>
+      <char id='c0n179' states='s0n0'/>
+      <char id='c0n180' states='s0n0'/>
+      <char id='c0n181' states='s0n0'/>
+      <char id='c0n182' states='s0n0'/>
+      <char id='c0n183' states='s0n0'/>
+      <char id='c0n184' states='s0n0'/>
+      <char id='c0n185' states='s0n0'/>
+      <char id='c0n186' states='s0n0'/>
+      <char id='c0n187' states='s0n0'/>
+      <char id='c0n188' states='s0n0'/>
+      <char id='c0n189' states='s0n0'/>
+      <char id='c0n190' states='s0n0'/>
+      <char id='c0n191' states='s0n0'/>
+      <char id='c0n192' states='s0n0'/>
+      <char id='c0n193' states='s0n0'/>
+      <char id='c0n194' states='s0n0'/>
+      <char id='c0n195' states='s0n0'/>
+      <char id='c0n196' states='s0n0'/>
+      <char id='c0n197' states='s0n0'/>
+      <char id='c0n198' states='s0n0'/>
+      <char id='c0n199' states='s0n0'/>
+      <char id='c0n200' states='s0n0'/>
+      <char id='c0n201' states='s0n0'/>
+      <char id='c0n202' states='s0n0'/>
+      <char id='c0n203' states='s0n0'/>
+      <char id='c0n204' states='s0n0'/>
+      <char id='c0n205' states='s0n0'/>
+      <char id='c0n206' states='s0n0'/>
+      <char id='c0n207' states='s0n0'/>
+      <char id='c0n208' states='s0n0'/>
+      <char id='c0n209' states='s0n0'/>
+      <char id='c0n210' states='s0n0'/>
+      <char id='c0n211' states='s0n0'/>
+      <char id='c0n212' states='s0n0'/>
+      <char id='c0n213' states='s0n0'/>
+      <char id='c0n214' states='s0n0'/>
+      <char id='c0n215' states='s0n0'/>
+      <char id='c0n216' states='s0n0'/>
+      <char id='c0n217' states='s0n0'/>
+      <char id='c0n218' states='s0n0'/>
+      <char id='c0n219' states='s0n0'/>
+      <char id='c0n220' states='s0n0'/>
+      <char id='c0n221' states='s0n0'/>
+      <char id='c0n222' states='s0n0'/>
+      <char id='c0n223' states='s0n0'/>
+      <char id='c0n224' states='s0n0'/>
+      <char id='c0n225' states='s0n0'/>
+      <char id='c0n226' states='s0n0'/>
+      <char id='c0n227' states='s0n0'/>
+      <char id='c0n228' states='s0n0'/>
+      <char id='c0n229' states='s0n0'/>
+      <char id='c0n230' states='s0n0'/>
+      <char id='c0n231' states='s0n0'/>
+      <char id='c0n232' states='s0n0'/>
+      <char id='c0n233' states='s0n0'/>
+      <char id='c0n234' states='s0n0'/>
+      <char id='c0n235' states='s0n0'/>
+      <char id='c0n236' states='s0n0'/>
+      <char id='c0n237' states='s0n0'/>
+      <char id='c0n238' states='s0n0'/>
+      <char id='c0n239' states='s0n0'/>
+      <char id='c0n240' states='s0n0'/>
+      <char id='c0n241' states='s0n0'/>
+      <char id='c0n242' states='s0n0'/>
+      <char id='c0n243' states='s0n0'/>
+      <char id='c0n244' states='s0n0'/>
+      <char id='c0n245' states='s0n0'/>
+      <char id='c0n246' states='s0n0'/>
+      <char id='c0n247' states='s0n0'/>
+      <char id='c0n248' states='s0n0'/>
+      <char id='c0n249' states='s0n0'/>
+      <char id='c0n250' states='s0n0'/>
+      <char id='c0n251' states='s0n0'/>
+      <char id='c0n252' states='s0n0'/>
+      <char id='c0n253' states='s0n0'/>
+      <char id='c0n254' states='s0n0'/>
+      <char id='c0n255' states='s0n0'/>
+      <char id='c0n256' states='s0n0'/>
+      <char id='c0n257' states='s0n0'/>
+      <char id='c0n258' states='s0n0'/>
+      <char id='c0n259' states='s0n0'/>
+      <char id='c0n260' states='s0n0'/>
+      <char id='c0n261' states='s0n0'/>
+      <char id='c0n262' states='s0n0'/>
+      <char id='c0n263' states='s0n0'/>
+      <char id='c0n264' states='s0n0'/>
+      <char id='c0n265' states='s0n0'/>
+      <char id='c0n266' states='s0n0'/>
+      <char id='c0n267' states='s0n0'/>
+      <char id='c0n268' states='s0n0'/>
+      <char id='c0n269' states='s0n0'/>
+      <char id='c0n270' states='s0n0'/>
+      <char id='c0n271' states='s0n0'/>
+      <char id='c0n272' states='s0n0'/>
+      <char id='c0n273' states='s0n0'/>
+      <char id='c0n274' states='s0n0'/>
+      <char id='c0n275' states='s0n0'/>
+      <char id='c0n276' states='s0n0'/>
+      <char id='c0n277' states='s0n0'/>
+      <char id='c0n278' states='s0n0'/>
+      <char id='c0n279' states='s0n0'/>
+      <char id='c0n280' states='s0n0'/>
+      <char id='c0n281' states='s0n0'/>
+      <char id='c0n282' states='s0n0'/>
+      <char id='c0n283' states='s0n0'/>
+      <char id='c0n284' states='s0n0'/>
+      <char id='c0n285' states='s0n0'/>
+      <char id='c0n286' states='s0n0'/>
+      <char id='c0n287' states='s0n0'/>
+      <char id='c0n288' states='s0n0'/>
+      <char id='c0n289' states='s0n0'/>
+      <char id='c0n290' states='s0n0'/>
+      <char id='c0n291' states='s0n0'/>
+      <char id='c0n292' states='s0n0'/>
+      <char id='c0n293' states='s0n0'/>
+      <char id='c0n294' states='s0n0'/>
+      <char id='c0n295' states='s0n0'/>
+      <char id='c0n296' states='s0n0'/>
+      <char id='c0n297' states='s0n0'/>
+      <char id='c0n298' states='s0n0'/>
+      <char id='c0n299' states='s0n0'/>
+      <char id='c0n300' states='s0n0'/>
+      <char id='c0n301' states='s0n0'/>
+      <char id='c0n302' states='s0n0'/>
+      <char id='c0n303' states='s0n0'/>
+      <char id='c0n304' states='s0n0'/>
+      <char id='c0n305' states='s0n0'/>
+      <char id='c0n306' states='s0n0'/>
+      <char id='c0n307' states='s0n0'/>
+      <char id='c0n308' states='s0n0'/>
+      <char id='c0n309' states='s0n0'/>
+      <char id='c0n310' states='s0n0'/>
+      <char id='c0n311' states='s0n0'/>
+      <char id='c0n312' states='s0n0'/>
+      <char id='c0n313' states='s0n0'/>
+      <char id='c0n314' states='s0n0'/>
+      <char id='c0n315' states='s0n0'/>
+      <char id='c0n316' states='s0n0'/>
+      <char id='c0n317' states='s0n0'/>
+      <char id='c0n318' states='s0n0'/>
+      <char id='c0n319' states='s0n0'/>
+      <char id='c0n320' states='s0n0'/>
+      <char id='c0n321' states='s0n0'/>
+      <char id='c0n322' states='s0n0'/>
+      <char id='c0n323' states='s0n0'/>
+      <char id='c0n324' states='s0n0'/>
+      <char id='c0n325' states='s0n0'/>
+      <char id='c0n326' states='s0n0'/>
+      <char id='c0n327' states='s0n0'/>
+      <char id='c0n328' states='s0n0'/>
+      <char id='c0n329' states='s0n0'/>
+      <char id='c0n330' states='s0n0'/>
+      <char id='c0n331' states='s0n0'/>
+      <char id='c0n332' states='s0n0'/>
+      <char id='c0n333' states='s0n0'/>
+      <char id='c0n334' states='s0n0'/>
+      <char id='c0n335' states='s0n0'/>
+      <char id='c0n336' states='s0n0'/>
+      <char id='c0n337' states='s0n0'/>
+      <char id='c0n338' states='s0n0'/>
+      <char id='c0n339' states='s0n0'/>
+      <char id='c0n340' states='s0n0'/>
+      <char id='c0n341' states='s0n0'/>
+      <char id='c0n342' states='s0n0'/>
+      <char id='c0n343' states='s0n0'/>
+      <char id='c0n344' states='s0n0'/>
+      <char id='c0n345' states='s0n0'/>
+      <char id='c0n346' states='s0n0'/>
+      <char id='c0n347' states='s0n0'/>
+      <char id='c0n348' states='s0n0'/>
+      <char id='c0n349' states='s0n0'/>
+      <char id='c0n350' states='s0n0'/>
+      <char id='c0n351' states='s0n0'/>
+      <char id='c0n352' states='s0n0'/>
+      <char id='c0n353' states='s0n0'/>
+      <char id='c0n354' states='s0n0'/>
+      <char id='c0n355' states='s0n0'/>
+      <char id='c0n356' states='s0n0'/>
+      <char id='c0n357' states='s0n0'/>
+      <char id='c0n358' states='s0n0'/>
+      <char id='c0n359' states='s0n0'/>
+      <char id='c0n360' states='s0n0'/>
+      <char id='c0n361' states='s0n0'/>
+      <char id='c0n362' states='s0n0'/>
+      <char id='c0n363' states='s0n0'/>
+      <char id='c0n364' states='s0n0'/>
+      <char id='c0n365' states='s0n0'/>
+      <char id='c0n366' states='s0n0'/>
+      <char id='c0n367' states='s0n0'/>
+      <char id='c0n368' states='s0n0'/>
+      <char id='c0n369' states='s0n0'/>
+      <char id='c0n370' states='s0n0'/>
+      <char id='c0n371' states='s0n0'/>
+      <char id='c0n372' states='s0n0'/>
+      <char id='c0n373' states='s0n0'/>
+      <char id='c0n374' states='s0n0'/>
+      <char id='c0n375' states='s0n0'/>
+      <char id='c0n376' states='s0n0'/>
+      <char id='c0n377' states='s0n0'/>
+      <char id='c0n378' states='s0n0'/>
+      <char id='c0n379' states='s0n0'/>
+      <char id='c0n380' states='s0n0'/>
+      <char id='c0n381' states='s0n0'/>
+      <char id='c0n382' states='s0n0'/>
+      <char id='c0n383' states='s0n0'/>
+      <char id='c0n384' states='s0n0'/>
+      <char id='c0n385' states='s0n0'/>
+      <char id='c0n386' states='s0n0'/>
+      <char id='c0n387' states='s0n0'/>
+      <char id='c0n388' states='s0n0'/>
+      <char id='c0n389' states='s0n0'/>
+      <char id='c0n390' states='s0n0'/>
+      <char id='c0n391' states='s0n0'/>
+      <char id='c0n392' states='s0n0'/>
+      <char id='c0n393' states='s0n0'/>
+      <char id='c0n394' states='s0n0'/>
+      <char id='c0n395' states='s0n0'/>
+      <char id='c0n396' states='s0n0'/>
+      <char id='c0n397' states='s0n0'/>
+      <char id='c0n398' states='s0n0'/>
+      <char id='c0n399' states='s0n0'/>
+      <char id='c0n400' states='s0n0'/>
+      <char id='c0n401' states='s0n0'/>
+      <char id='c0n402' states='s0n0'/>
+      <char id='c0n403' states='s0n0'/>
+      <char id='c0n404' states='s0n0'/>
+      <char id='c0n405' states='s0n0'/>
+      <char id='c0n406' states='s0n0'/>
+      <char id='c0n407' states='s0n0'/>
+      <char id='c0n408' states='s0n0'/>
+      <char id='c0n409' states='s0n0'/>
+      <char id='c0n410' states='s0n0'/>
+      <char id='c0n411' states='s0n0'/>
+      <char id='c0n412' states='s0n0'/>
+      <char id='c0n413' states='s0n0'/>
+      <char id='c0n414' states='s0n0'/>
+      <char id='c0n415' states='s0n0'/>
+      <char id='c0n416' states='s0n0'/>
+      <char id='c0n417' states='s0n0'/>
+      <char id='c0n418' states='s0n0'/>
+      <char id='c0n419' states='s0n0'/>
+      <char id='c0n420' states='s0n0'/>
+      <char id='c0n421' states='s0n0'/>
+      <char id='c0n422' states='s0n0'/>
+      <char id='c0n423' states='s0n0'/>
+      <char id='c0n424' states='s0n0'/>
+      <char id='c0n425' states='s0n0'/>
+      <char id='c0n426' states='s0n0'/>
+      <char id='c0n427' states='s0n0'/>
+      <char id='c0n428' states='s0n0'/>
+      <char id='c0n429' states='s0n0'/>
+      <char id='c0n430' states='s0n0'/>
+      <char id='c0n431' states='s0n0'/>
+      <char id='c0n432' states='s0n0'/>
+      <char id='c0n433' states='s0n0'/>
+      <char id='c0n434' states='s0n0'/>
+      <char id='c0n435' states='s0n0'/>
+      <char id='c0n436' states='s0n0'/>
+      <char id='c0n437' states='s0n0'/>
+      <char id='c0n438' states='s0n0'/>
+      <char id='c0n439' states='s0n0'/>
+      <char id='c0n440' states='s0n0'/>
+      <char id='c0n441' states='s0n0'/>
+      <char id='c0n442' states='s0n0'/>
+      <char id='c0n443' states='s0n0'/>
+      <char id='c0n444' states='s0n0'/>
+      <char id='c0n445' states='s0n0'/>
+      <char id='c0n446' states='s0n0'/>
+      <char id='c0n447' states='s0n0'/>
+      <char id='c0n448' states='s0n0'/>
+      <char id='c0n449' states='s0n0'/>
+      <char id='c0n450' states='s0n0'/>
+      <char id='c0n451' states='s0n0'/>
+      <char id='c0n452' states='s0n0'/>
+      <char id='c0n453' states='s0n0'/>
+      <char id='c0n454' states='s0n0'/>
+      <char id='c0n455' states='s0n0'/>
+      <char id='c0n456' states='s0n0'/>
+      <char id='c0n457' states='s0n0'/>
+      <char id='c0n458' states='s0n0'/>
+      <char id='c0n459' states='s0n0'/>
+      <char id='c0n460' states='s0n0'/>
+      <char id='c0n461' states='s0n0'/>
+      <char id='c0n462' states='s0n0'/>
+      <char id='c0n463' states='s0n0'/>
+      <char id='c0n464' states='s0n0'/>
+      <char id='c0n465' states='s0n0'/>
+      <char id='c0n466' states='s0n0'/>
+      <char id='c0n467' states='s0n0'/>
+      <char id='c0n468' states='s0n0'/>
+      <char id='c0n469' states='s0n0'/>
+      <char id='c0n470' states='s0n0'/>
+      <char id='c0n471' states='s0n0'/>
+      <char id='c0n472' states='s0n0'/>
+      <char id='c0n473' states='s0n0'/>
+      <char id='c0n474' states='s0n0'/>
+      <char id='c0n475' states='s0n0'/>
+      <char id='c0n476' states='s0n0'/>
+      <char id='c0n477' states='s0n0'/>
+      <char id='c0n478' states='s0n0'/>
+      <char id='c0n479' states='s0n0'/>
+      <char id='c0n480' states='s0n0'/>
+      <char id='c0n481' states='s0n0'/>
+      <char id='c0n482' states='s0n0'/>
+      <char id='c0n483' states='s0n0'/>
+      <char id='c0n484' states='s0n0'/>
+      <char id='c0n485' states='s0n0'/>
+      <char id='c0n486' states='s0n0'/>
+      <char id='c0n487' states='s0n0'/>
+      <char id='c0n488' states='s0n0'/>
+      <char id='c0n489' states='s0n0'/>
+      <char id='c0n490' states='s0n0'/>
+      <char id='c0n491' states='s0n0'/>
+      <char id='c0n492' states='s0n0'/>
+      <char id='c0n493' states='s0n0'/>
+      <char id='c0n494' states='s0n0'/>
+      <char id='c0n495' states='s0n0'/>
+      <char id='c0n496' states='s0n0'/>
+      <char id='c0n497' states='s0n0'/>
+      <char id='c0n498' states='s0n0'/>
+      <char id='c0n499' states='s0n0'/>
+      <char id='c0n500' states='s0n0'/>
+      <char id='c0n501' states='s0n0'/>
+      <char id='c0n502' states='s0n0'/>
+      <char id='c0n503' states='s0n0'/>
+      <char id='c0n504' states='s0n0'/>
+      <char id='c0n505' states='s0n0'/>
+      <char id='c0n506' states='s0n0'/>
+      <char id='c0n507' states='s0n0'/>
+      <char id='c0n508' states='s0n0'/>
+      <char id='c0n509' states='s0n0'/>
+      <char id='c0n510' states='s0n0'/>
+      <char id='c0n511' states='s0n0'/>
+      <char id='c0n512' states='s0n0'/>
+      <char id='c0n513' states='s0n0'/>
+      <char id='c0n514' states='s0n0'/>
+      <char id='c0n515' states='s0n0'/>
+      <char id='c0n516' states='s0n0'/>
+      <char id='c0n517' states='s0n0'/>
+      <char id='c0n518' states='s0n0'/>
+      <char id='c0n519' states='s0n0'/>
+      <char id='c0n520' states='s0n0'/>
+      <char id='c0n521' states='s0n0'/>
+      <char id='c0n522' states='s0n0'/>
+      <char id='c0n523' states='s0n0'/>
+      <char id='c0n524' states='s0n0'/>
+      <char id='c0n525' states='s0n0'/>
+      <char id='c0n526' states='s0n0'/>
+      <char id='c0n527' states='s0n0'/>
+      <char id='c0n528' states='s0n0'/>
+      <char id='c0n529' states='s0n0'/>
+      <char id='c0n530' states='s0n0'/>
+      <char id='c0n531' states='s0n0'/>
+      <char id='c0n532' states='s0n0'/>
+      <char id='c0n533' states='s0n0'/>
+      <char id='c0n534' states='s0n0'/>
+      <char id='c0n535' states='s0n0'/>
+      <char id='c0n536' states='s0n0'/>
+      <char id='c0n537' states='s0n0'/>
+      <char id='c0n538' states='s0n0'/>
+      <char id='c0n539' states='s0n0'/>
+      <char id='c0n540' states='s0n0'/>
+      <char id='c0n541' states='s0n0'/>
+      <char id='c0n542' states='s0n0'/>
+      <char id='c0n543' states='s0n0'/>
+      <char id='c0n544' states='s0n0'/>
+      <char id='c0n545' states='s0n0'/>
+      <char id='c0n546' states='s0n0'/>
+      <char id='c0n547' states='s0n0'/>
+      <char id='c0n548' states='s0n0'/>
+      <char id='c0n549' states='s0n0'/>
+      <char id='c0n550' states='s0n0'/>
+      <char id='c0n551' states='s0n0'/>
+      <char id='c0n552' states='s0n0'/>
+      <char id='c0n553' states='s0n0'/>
+      <char id='c0n554' states='s0n0'/>
+      <char id='c0n555' states='s0n0'/>
+      <char id='c0n556' states='s0n0'/>
+      <char id='c0n557' states='s0n0'/>
+      <char id='c0n558' states='s0n0'/>
+      <char id='c0n559' states='s0n0'/>
+      <char id='c0n560' states='s0n0'/>
+      <char id='c0n561' states='s0n0'/>
+      <char id='c0n562' states='s0n0'/>
+      <char id='c0n563' states='s0n0'/>
+      <char id='c0n564' states='s0n0'/>
+      <char id='c0n565' states='s0n0'/>
+      <char id='c0n566' states='s0n0'/>
+      <char id='c0n567' states='s0n0'/>
+      <char id='c0n568' states='s0n0'/>
+      <char id='c0n569' states='s0n0'/>
+      <char id='c0n570' states='s0n0'/>
+      <char id='c0n571' states='s0n0'/>
+      <char id='c0n572' states='s0n0'/>
+      <char id='c0n573' states='s0n0'/>
+      <char id='c0n574' states='s0n0'/>
+      <char id='c0n575' states='s0n0'/>
+      <char id='c0n576' states='s0n0'/>
+      <char id='c0n577' states='s0n0'/>
+      <char id='c0n578' states='s0n0'/>
+      <char id='c0n579' states='s0n0'/>
+      <char id='c0n580' states='s0n0'/>
+      <char id='c0n581' states='s0n0'/>
+      <char id='c0n582' states='s0n0'/>
+      <char id='c0n583' states='s0n0'/>
+      <char id='c0n584' states='s0n0'/>
+      <char id='c0n585' states='s0n0'/>
+      <char id='c0n586' states='s0n0'/>
+      <char id='c0n587' states='s0n0'/>
+      <char id='c0n588' states='s0n0'/>
+      <char id='c0n589' states='s0n0'/>
+      <char id='c0n590' states='s0n0'/>
+      <char id='c0n591' states='s0n0'/>
+      <char id='c0n592' states='s0n0'/>
+      <char id='c0n593' states='s0n0'/>
+      <char id='c0n594' states='s0n0'/>
+      <char id='c0n595' states='s0n0'/>
+      <char id='c0n596' states='s0n0'/>
+      <char id='c0n597' states='s0n0'/>
+      <char id='c0n598' states='s0n0'/>
+      <char id='c0n599' states='s0n0'/>
+      <char id='c0n600' states='s0n0'/>
+      <char id='c0n601' states='s0n0'/>
+      <char id='c0n602' states='s0n0'/>
+      <char id='c0n603' states='s0n0'/>
+      <char id='c0n604' states='s0n0'/>
+      <char id='c0n605' states='s0n0'/>
+      <char id='c0n606' states='s0n0'/>
+      <char id='c0n607' states='s0n0'/>
+      <char id='c0n608' states='s0n0'/>
+      <char id='c0n609' states='s0n0'/>
+      <char id='c0n610' states='s0n0'/>
+      <char id='c0n611' states='s0n0'/>
+      <char id='c0n612' states='s0n0'/>
+      <char id='c0n613' states='s0n0'/>
+      <char id='c0n614' states='s0n0'/>
+      <char id='c0n615' states='s0n0'/>
+      <char id='c0n616' states='s0n0'/>
+      <char id='c0n617' states='s0n0'/>
+      <char id='c0n618' states='s0n0'/>
+      <char id='c0n619' states='s0n0'/>
+      <char id='c0n620' states='s0n0'/>
+      <char id='c0n621' states='s0n0'/>
+      <char id='c0n622' states='s0n0'/>
+      <char id='c0n623' states='s0n0'/>
+      <char id='c0n624' states='s0n0'/>
+      <char id='c0n625' states='s0n0'/>
+      <char id='c0n626' states='s0n0'/>
+      <char id='c0n627' states='s0n0'/>
+      <char id='c0n628' states='s0n0'/>
+      <char id='c0n629' states='s0n0'/>
+      <char id='c0n630' states='s0n0'/>
+      <char id='c0n631' states='s0n0'/>
+      <char id='c0n632' states='s0n0'/>
+      <char id='c0n633' states='s0n0'/>
+      <char id='c0n634' states='s0n0'/>
+      <char id='c0n635' states='s0n0'/>
+      <char id='c0n636' states='s0n0'/>
+      <char id='c0n637' states='s0n0'/>
+      <char id='c0n638' states='s0n0'/>
+      <char id='c0n639' states='s0n0'/>
+      <char id='c0n640' states='s0n0'/>
+      <char id='c0n641' states='s0n0'/>
+      <char id='c0n642' states='s0n0'/>
+      <char id='c0n643' states='s0n0'/>
+      <char id='c0n644' states='s0n0'/>
+      <char id='c0n645' states='s0n0'/>
+      <char id='c0n646' states='s0n0'/>
+      <char id='c0n647' states='s0n0'/>
+      <char id='c0n648' states='s0n0'/>
+      <char id='c0n649' states='s0n0'/>
+      <char id='c0n650' states='s0n0'/>
+      <char id='c0n651' states='s0n0'/>
+      <char id='c0n652' states='s0n0'/>
+      <char id='c0n653' states='s0n0'/>
+      <char id='c0n654' states='s0n0'/>
+      <char id='c0n655' states='s0n0'/>
+      <char id='c0n656' states='s0n0'/>
+      <char id='c0n657' states='s0n0'/>
+      <char id='c0n658' states='s0n0'/>
+      <char id='c0n659' states='s0n0'/>
+      <char id='c0n660' states='s0n0'/>
+      <char id='c0n661' states='s0n0'/>
+      <char id='c0n662' states='s0n0'/>
+      <char id='c0n663' states='s0n0'/>
+      <char id='c0n664' states='s0n0'/>
+      <char id='c0n665' states='s0n0'/>
+      <char id='c0n666' states='s0n0'/>
+      <char id='c0n667' states='s0n0'/>
+      <char id='c0n668' states='s0n0'/>
+      <char id='c0n669' states='s0n0'/>
+      <char id='c0n670' states='s0n0'/>
+      <char id='c0n671' states='s0n0'/>
+      <char id='c0n672' states='s0n0'/>
+      <char id='c0n673' states='s0n0'/>
+      <char id='c0n674' states='s0n0'/>
+      <char id='c0n675' states='s0n0'/>
+      <char id='c0n676' states='s0n0'/>
+      <char id='c0n677' states='s0n0'/>
+      <char id='c0n678' states='s0n0'/>
+      <char id='c0n679' states='s0n0'/>
+      <char id='c0n680' states='s0n0'/>
+      <char id='c0n681' states='s0n0'/>
+      <char id='c0n682' states='s0n0'/>
+      <char id='c0n683' states='s0n0'/>
+      <char id='c0n684' states='s0n0'/>
+      <char id='c0n685' states='s0n0'/>
+      <char id='c0n686' states='s0n0'/>
+      <char id='c0n687' states='s0n0'/>
+      <char id='c0n688' states='s0n0'/>
+      <char id='c0n689' states='s0n0'/>
+      <char id='c0n690' states='s0n0'/>
+      <char id='c0n691' states='s0n0'/>
+      <char id='c0n692' states='s0n0'/>
+      <char id='c0n693' states='s0n0'/>
+      <char id='c0n694' states='s0n0'/>
+      <char id='c0n695' states='s0n0'/>
+      <char id='c0n696' states='s0n0'/>
+      <char id='c0n697' states='s0n0'/>
+      <char id='c0n698' states='s0n0'/>
+      <char id='c0n699' states='s0n0'/>
+      <char id='c0n700' states='s0n0'/>
+      <char id='c0n701' states='s0n0'/>
+      <char id='c0n702' states='s0n0'/>
+      <char id='c0n703' states='s0n0'/>
+      <char id='c0n704' states='s0n0'/>
+      <char id='c0n705' states='s0n0'/>
+      <char id='c0n706' states='s0n0'/>
+      <char id='c0n707' states='s0n0'/>
+      <char id='c0n708' states='s0n0'/>
+      <char id='c0n709' states='s0n0'/>
+      <char id='c0n710' states='s0n0'/>
+      <char id='c0n711' states='s0n0'/>
+      <char id='c0n712' states='s0n0'/>
+      <char id='c0n713' states='s0n0'/>
+      <char id='c0n714' states='s0n0'/>
+      <char id='c0n715' states='s0n0'/>
+      <char id='c0n716' states='s0n0'/>
+      <char id='c0n717' states='s0n0'/>
+      <char id='c0n718' states='s0n0'/>
+      <char id='c0n719' states='s0n0'/>
+      <char id='c0n720' states='s0n0'/>
+      <char id='c0n721' states='s0n0'/>
+      <char id='c0n722' states='s0n0'/>
+      <char id='c0n723' states='s0n0'/>
+      <char id='c0n724' states='s0n0'/>
+      <char id='c0n725' states='s0n0'/>
+      <char id='c0n726' states='s0n0'/>
+      <char id='c0n727' states='s0n0'/>
+      <char id='c0n728' states='s0n0'/>
+      <char id='c0n729' states='s0n0'/>
+      <char id='c0n730' states='s0n0'/>
+      <char id='c0n731' states='s0n0'/>
+      <char id='c0n732' states='s0n0'/>
+      <char id='c0n733' states='s0n0'/>
+      <char id='c0n734' states='s0n0'/>
+      <char id='c0n735' states='s0n0'/>
+      <char id='c0n736' states='s0n0'/>
+      <char id='c0n737' states='s0n0'/>
+      <char id='c0n738' states='s0n0'/>
+      <char id='c0n739' states='s0n0'/>
+      <char id='c0n740' states='s0n0'/>
+      <char id='c0n741' states='s0n0'/>
+      <char id='c0n742' states='s0n0'/>
+      <char id='c0n743' states='s0n0'/>
+      <char id='c0n744' states='s0n0'/>
+      <char id='c0n745' states='s0n0'/>
+      <char id='c0n746' states='s0n0'/>
+      <char id='c0n747' states='s0n0'/>
+      <char id='c0n748' states='s0n0'/>
+      <char id='c0n749' states='s0n0'/>
+      <char id='c0n750' states='s0n0'/>
+      <char id='c0n751' states='s0n0'/>
+      <char id='c0n752' states='s0n0'/>
+      <char id='c0n753' states='s0n0'/>
+      <char id='c0n754' states='s0n0'/>
+      <char id='c0n755' states='s0n0'/>
+      <char id='c0n756' states='s0n0'/>
+      <char id='c0n757' states='s0n0'/>
+      <char id='c0n758' states='s0n0'/>
+      <char id='c0n759' states='s0n0'/>
+      <char id='c0n760' states='s0n0'/>
+      <char id='c0n761' states='s0n0'/>
+      <char id='c0n762' states='s0n0'/>
+      <char id='c0n763' states='s0n0'/>
+      <char id='c0n764' states='s0n0'/>
+      <char id='c0n765' states='s0n0'/>
+      <char id='c0n766' states='s0n0'/>
+      <char id='c0n767' states='s0n0'/>
+      <char id='c0n768' states='s0n0'/>
+      <char id='c0n769' states='s0n0'/>
+      <char id='c0n770' states='s0n0'/>
+    </format>
+    <matrix>
+      <row id='c0n0' otu='t0n0'>
+        <seq>ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAAGGCGGCGGT [...]
+      </row>
+      <row id='c0n1' otu='t0n1'>
+        <seq>ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAAGGCGGCGGT [...]
+      </row>
+      <row id='c0n2' otu='t0n2'>
+        <seq>ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAAGGCGGCGGT [...]
+      </row>
+      <row id='c0n3' otu='t0n3'>
+        <seq>ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTATCCCTACGATGTGACTGTGCCCATCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGCTGAAGACTATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAAAGCGGCGGT [...]
+      </row>
+      <row id='c0n4' otu='t0n4'>
+        <seq>ATGTCA------CTGACCAACAAGAATGTGATTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGCTGGTTAAGCGTGATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAGCTGAAGGCCATCAATCCCAAGGTGACGGTCACCTTCTATCCGTACGATGTGACGGTGCCCATCAGCGAGACGACCAAGCTGCTGAAGACCATCTTTGCCCAGCTGAAGACCGTCGATGTGCTGATCAACGGTGCCGGCATCCTGGACGATTATCAGATTGAGCGCACCATTGCCGTTAACTACACGGGTCTGGTCAACACCACCACCGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCTGGCAGCAAGGCCGCCGT [...]
+      </row>
+      <row id='c0n5' otu='t0n5'>
+        <seq>ATGTCA------CTTACAAACAAGAATGTTGTTTTCGTGGCTGGTCTGGGAGGTATTGGCCTGGACACCAGTCGGGAGTTGGTTAAGCGAGATCTGAAGAATCTGGTCATCCTGGATCGCATTGACAATGCAGCGGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTACCCTTATGATGTGACTGTACCTGTCGCAGAGACCACCAAACTCCTGAAGACCATCTTTGCCCAGATCAAGACCATCGATGTCCTGATAAACGGTGCTGGCATCCTCGACGATCATCAGATTGAGCGTACTATTGCCGTTAACTACTCTGGCCTGGTCAACACCACCACAGCCATTCTGGACTTTTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATCATTTGCAACATTGGCTCCGTTACCGGTTTTAATGCCATCTACCAGGTGCCCGTTTACTCTGGCAGCAAGGCGGCGGT [...]
+      </row>
+      <row id='c0n6' otu='t0n6'>
+        <seq>ATGTCA------CTAACAAACAAGAATGTTGTTTTCGTGGCTGGTCTGGGAGGTATTGGCCTGGACACCAGTCGGGAGTTGGTTAAGCGAGATCTGAAGAATCTGGTCATCCTGGATCGCATTGACAATCCAGCGGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTACCCTTATGATGTGACTGTACCTGTCGCAGAGACCACCAAACTCCTGAAGACCATCTTTGCCCAGATCAAGACCATCGATGTCCTGATAAACGGTGCTGGCATCCTCGACGATCATCAGATTGAGCGTACTATTGCCGTTAACTACACTGGCCTGGTCAACACCACCACAGCCATTCTGGACTTTTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATCATTTGCAACATTGGCTCCGTTACCGGTTTTAATGCCATCTACCAGGTGCCTGTTTACTCTGGCAGCAAGGCGGCGGT [...]
+      </row>
+      <row id='c0n7' otu='t0n7'>
+        <seq>ATGGCT------CTCACCAACAAGAACATCATCTTTGTGGCCGGTCTGGGCGGCATTGGTCTGGACACCAGTCGCGAATTGGTCAAACGGGATCTCAAGAACTTGGTGATCCTGGATCGTATTGACAATCCTGCTGCCATTGCTGAACTGAAGGCAATCAATCCCAAAGTGACAGTTACCTTCTATCCCTATGATGTTACCACACCCTTGACAGAGACTACCAAATTGTTGAAGACCATTTTCGCCCAATTGAAGACTGTCGATGTCCTGATCAATGGAGCTGGCATTTTGGATGATCATCAGATCGAGCGTACCATTGCTGTGAACTTCACTGGTTTGGTCAATACCACCACAGCCATTTTGGACTTCTGGGATAAGCGTAAGGGTGGACCAGGTGGCGTCATCTGCAACATTGGCTCTGTGACCGGTTTCAATGCCATCTACCAGGTCCCTGTCTATTCCGCATCCAAAGCAGCTGT [...]
+      </row>
+      <row id='c0n8' otu='t0n8'>
+        <seq>ATGGAT------TTGACCAACAAGAACGTTATTTTCGTTGCCGCTCTGGGCGGTATTGGTCTCGACACGAGTCGGGAGCTCGTCAAGCGTAATCTGAAGAATTTTGTCATCTTGGACAGAGTTGAGAACCCGACTGCTCTTGCTGAGCTGAAGGCAATAAATCCCAAGGTGAACATCACCTTCCATACCTACGATGTGACCGTACCCGTTGCTGAGTCGAAGAAGCTGCTGAAGAAGATTTTCGATCAGCTGAAAACCGTTGACATTCTGATCAATGGTGCTGGTATTTTGGATGACCATCAGATTGAGCGCACCATTGCCATCAACTTCACTGGTCTGGTCAACACCACCACCGCTATTTTGGACTTTTGGGACAAGCGTAAGGGCGGTCCTGGTGGCATCATTGCCAACATTTGCTCCGTTACTGGCTTCAATGCCATCCACCAGGTGCCTGTCTACTCGGCATCCAAGGCTGCTGT [...]
+      </row>
+      <row id='c0n9' otu='t0n9'>
+        <seq>ATGTCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGATCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGATTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAAGGCCGCCGT [...]
+      </row>
+      <row id='c0n10' otu='t0n10'>
+        <seq>ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATCGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGACCTGAAGAACCTGGTAATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAAGGCCGCCGT [...]
+      </row>
+      <row id='c0n11' otu='t0n11'>
+        <seq>ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGCCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGCGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCTGCTGCCATTGCCGAGCTGCAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAAGGCCGCCGT [...]
+      </row>
+      <row id='c0n12' otu='t0n12'>
+        <seq>ATGGCGTTTACCTTGACCAACAAGAACGTGGTTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGGGACCTCAAGAACCTGGTCATCCTCGACCGCATTGAGAACCCGGCTGCCATCGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCATCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATCGCCGTCAACTACACCGGCCTGGTGAACACCACGACCGCCATCCTGGACTTCTGGGACAAGCGCAAGGGTGGACCCGGTGGCATCATCTGCAACATTGGATCCGTGACTGGATTCAACGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAAGGCTGCCGT [...]
+      </row>
+      <row id='c0n13' otu='t0n13'>
+        <seq>ATGGCATTCACCTTGACCAACAAGAACGTCATTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGTGATCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTATCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGACGACCGTCGATGTCCTGATCAACGGAGCTGGCATCCTGGACGATTACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGATTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGCATTATCTGCAACATTGGCTCCGTAACTGGATTCAATGCCATCTACCAGGTGCCCGTCTACTCTGGCACCAAGGCTGCCGT [...]
+      </row>
+      <row id='c0n14' otu='t0n14'>
+        <seq>ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCTGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAAGGCTGCCGT [...]
+      </row>
+      <row id='c0n15' otu='t0n15'>
+        <seq>ATGGCGTTTACCTTGACCAACAAGAACGTGGTTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGGGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATCGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCATCGATGTCCTGATCAACGGAGCTGGCATCCTGGACGATCACCAGATCGAGCGCACCATCGCCGTCAACTACACCGGCCTGGTGAACACCACGACGGCCATCCTGGACTTCTGGGACAAGCGCAAGGGTGGACCCGGTGGTATCATCTGCAACATTGGATCCGTGACTGGATTCAACGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAAGGCTGCCGT [...]
+      </row>
+      <row id='c0n16' otu='t0n16'>
+        <seq>ATGTCGACGACACTCACCAACAAGAACGTCATTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCAAGGAGCTGGTCAAGCGCGACCTCAAGAACCTTGTGATCCTGGACCGCATTGACAACCCGGCGGCCATTGCCGAGCTGAAGGCAATCAATCCGAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCGATTACTGAGACCACCAAGCTGCTGAAGACCATTTTCGCCAAGGTTAAGACCGTGGACATTCTGATCAACGGAGCTGGCATCCTGGACGACCATCAGATCGAGCGCACCATCGCCGTCAACTACACGGGGCTGGTCAACACGACGACGGCCATCCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCGGGCGGCATTATCTGCAACATTGGATCGGTGACGGGCTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAAGGCCGCCGT [...]
+      </row>
+      <row id='c0n17' otu='t0n17'>
+        <seq>ATG---TTC---ATCGCTGGCAAGAACATCATCTTTGTCGCTGGTCTCGGCGGCATTGGACTGGAGACGAGTCGCGAGATTGTCAAGAGCGGTCCCAAGAACCTAGTGATCCTTGATCGTGCGCCGAATCCGGCTGCCATTGCTGAGCTGCAGGCGCTTAATCCCAAGGTGACCGTATCCTTTTATCTCTACGATGTGACAGTACCGCAGTCCGAAACTGTCAAGCTGCTGAAGACAATCTTCGCGAAGCTGAAGACCATCGATTTGCTCATCAATGGCGCCGGCATTCTGGACGATCATCAGATCGAGCGTACCATTGCGGTGAATTTCACTGGTACGGTGAACACCACGACCGCCATCATGGAGTTCTGGGACAAGCGCAAGGGTGGACCAGGTGGCGTTGTTGCCAACATTTGCTCGGTGACTGGATTCAATTCCATTTACCAGGTGCCTGTCTACTCTGCCTCGAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n18' otu='t0n18'>
+        <seq>ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGGATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACGGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGACCAGGCGGAGTCATTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n19' otu='t0n19'>
+        <seq>ATGGCC------ATCGCTAATAAGAACATCATCTTTGTCGCTGGACTCGGTGGCATTGGACTCGACACCAGTCGGGAGATTGTCAAGAGCGGCCCTAAGAACCTGGTGATCCTTGATCGCATCGAAAACCCAGCTGCCATTGCTGAGCTGAAGGCCCTCAATCCAAATGTGACCGTCACGTTCTATACCTATGATGTGACCGTTTCGGTAGCAGAGTCCACAAAACTCCTGAAGACAATCTTCGACCAGCTGAAGACAGTGGATCTGCTCATCAATGGAGCCGGCATCCTGGATGAAGATCAAGTCGAGCGAACCATTGCGGTGAACTTTGCGGGCACAGTGAACACCACCACTGCCATAATGTCATTCTGGGACAAGCGTAAGGGCGGTCCAGGTGGTGTCATTGCGAACATTTGCTCGGTGACTGGATTCAATGCCCTCTACCAGGCACCCGTCTATTCCGCCTCAAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n20' otu='t0n20'>
+        <seq>ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGGGAAATTGTCAAGAGCGGCCCAAAGAACCTGGTGATCCTTGATCGCATTGAAAACCCAGCTGCCATTGCTGAGCTGAAGGCCCTCAACCCAAAGGTGACCGTCACTTTCTATCCCTATGATGTGACCGTTCCGGTAGCAGAGACCACAAAACTCCTGAAGACAATCTTCGACAAGCTGAAGACAGTGGATCTGCTCATCAATGGAGCTGGCATCCTAGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTTACAGGCACAGTGAACACCACCACTGCCATCATGGCATTCTGGGACAAGCGTAAGGGCGGTCCAGGTGGTGTCATTGCGAACATTTGCTCGGTGACTGGCTTCAATTCCATCTACCAGGTGCCCGTTTATTCCGCCTCTAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n21' otu='t0n21'>
+        <seq>ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTAACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGTGGTCCAGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n22' otu='t0n22'>
+        <seq>ATGGCG------ATCGCTAACAAGAACATTATTTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGACCGGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n23' otu='t0n23'>
+        <seq>ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTAAAAACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGCACTATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGTAAGGGCGGACCAGGCGGAGTCGTTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n24' otu='t0n24'>
+        <seq>ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGCGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGTTGGCAGAAACCACGAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGCCCAGGCGGAGTCGTTGCAAACATCTGCTCCGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAAAGCGGCTGC [...]
+      </row>
+      <row id='c0n25' otu='t0n25'>
+        <seq>ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGCCCAGGCGGAGTCATTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n26' otu='t0n26'>
+        <seq>ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATAGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATTGAGAACCCGACAGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGTGGCCCAGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n27' otu='t0n27'>
+        <seq>ATGTGT------ATCGCTGGCAAGAATATCATCTTTGTCGCTGGTCTCGGTGGCATTGGACTGGACACCAATCGCGAGATTGTCAAGAGCGGTCCCAAGAACCTAGTGATCCTTGATCGCATTGAGAATCCGGCTGCCATTGCCGAGCTGCAGGCGATTAATCCCAATGTGACCGTATCCTTTTATCCCTACGATGTTACAGTAGCGTTGGCTGAAAGTGTCAAGCTGCTGAAGACAATCTTCGCTAAGCTGAAGACAGTTGATTTGCTCGTCAATGGAGCTGGCATTCTGGACGATCATCAGATTGAGCGGACCATTGCAGTGAATTTCACTGGTACTGTGAATACCACAACTGCTATCATGGAGTTCTGGGATAAGCGCAAGGGTGGACCAGGTGGCGTTATTGCCAACATTTGCTCAGTGACAGGATTCAATTCCATTTACCAGGTGCCTGTATACTCTGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n28' otu='t0n28'>
+        <seq>ATGGCA------ATCGCTAACAAGAACATTATCTTTGTCGCTGGTCTGGGCGGCATTGGTCTGGACACGAGCAAGGGAATCGTCAAAGCTGGACCCAAGAATCTGGTGATCTTGGACCGCATTGAGAACCCCGCAGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACCGTTACTTTCTATCCCTACGATGTCACTGTTCCGCTGGCGGAGACCAAGAAGCTGCTCACGACCATCTTCGCCAAGCTGAAGACCGTTGATCTGCTGATCAATGGTGCAGGCATCCTGAACGATCATCAGATCGAACTCACCATCGCAATAAATTTCACCGGTCTGGTTAACACCACCACCGCTATCATGGACTTCTGGGATAAGCGTAAGGGCGGCCCAGGTGGCGCCATTGCCAACATCTGCTCTGTGACTGGATTCAATGCCATTTACCAGGTGCCCGTCTACTCAGCCTCCAAGGCGGCTGT [...]
+      </row>
+      <row id='c0n29' otu='t0n29'>
+        <seq>ATGGCA------ATCGCTAACAAGAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGGTTGGACACCAGTCGAGAGATTGTCAAGAGTGGACCAAAGAACCTGGTAATTCTCGATCGAGTTGAGAACCCCACTGCCATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACCATCACGTTCTATCCCTATGATGTGACCGTTTCGGTAGCAGAATCCACAAAGTTGCTCAAGACAATCTTCGACAAACTGAAGACGGTGGACCTGCTTATCAATGGCGCTGGCATCCTGGACGATTACCAGATCGAGCGTACCATTGCGGTGAACTTTGCCGGCACAGTAAACACCACCACTGCCATCATGGCATTCTGGGACAAGCGCAAGGGAGGCCCAGGTGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAACTCTATCTACCAGGTGCCCGTCTATTCTGCCTCCAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n30' otu='t0n30'>
+        <seq>ATGGCA------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTTGACACCAGTCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCTGCTATTGCCGAACTGAAGGCACTCAACCCCAAGGTGACCGTTACGTTCTATCCCTATGATGTCACCGTCTCGGTAGCAGAGACTACAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTCGATCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGTAAGGGCGGCCCAGGCGGTGTCATTGCCAATATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCTGTGTACTCCGCATCCAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n31' otu='t0n31'>
+        <seq>ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTGGACACCAGTCGCGAGATCGTCAAGAGTGGCCCAAAGAACCTCGTTATCCTTGATCGAATTGACAACCCAGCTGCTATAGCTGAGCTGAAGGCTATCAACCCAAAGGTGACCGTCACGTTCTACCCCTATGATGTAACTGTTTCGGTGGCAGAGTCCACAAAGCTGCTCAAGGTAATCTTCGACAAGCTGAAGACAGTGGATCTGCTTATCAATGGCGCTGGCATCCTGGACGACTACCAGATCGAACGCACCATTGCAGTGAACTTTGCCGGCACAGTGAACACCACCACAGCCATCATGGCATTCTGGGACAAGCGCAAGGGCGGCCCAGGAGGTGTCATTGCCAATATCTGCTCGGTGACTGGTTTCAACGCAATCTACCAGGTGCCCGTCTATTCCGCTTCCAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n32' otu='t0n32'>
+        <seq>ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTGGACACCAGTCGCGAGATCGTCAAGAGTGGCCCAAAGAACCTGGTTATCCTTGATCGAATTGACAACCCAGCTGCTATTGCTGAGCTGAAGGCCATCAACCCAAAGGTGACCATCACGTTCTACCCCTATGATGTAACTGTTTCGGTGGCAGAGTCCACAAAGCTGCTCAAGGTAATCTTCGACAAGCTGAAGACAGTGGATCTGCTTATCAATGGCGCTGGCATCCTGGACGACTACCAGATCGAACGCACCATTGCAGTGAACTTTGCCGGTACAGTGAACACCACCACAGCCATCATGGCATTCTGGGACAAGCGCAAGGGCGGCCCAGGAGGTGTCATTGCCAATATCTGCTCGGTGACTGGTTTCAACGCAATCTACCAGGTGCCCGTCTATTCCGCTTCCAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n33' otu='t0n33'>
+        <seq>ATGGCC------ATCGCTAACAAGAATATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAAGGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCGGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCTCTATGATGTCACCGTCTCGGTAGCCGAGAGCACAAAGCTTCTGCAGAAAATCTTTGACCAGCTTAAGACAGTCGATCTGCTCATCAATGGAGCTGGCATCCTGGATGACCACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACAGTGAACACCATCACGGCCATCATGTCCTTCTGGGACAAGCGTAAGGGCGGCCCAGGCGGTGTCATTGCGAACGTCTGTTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCGGTGTATTCCGCATCCAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n34' otu='t0n34'>
+        <seq>ATGGCA------ATCGCTAACAAGAACATCATATTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCTGCAATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTCGATCTGCTCATCAATGGGACAGGCATCCTGGACGACCACCAAATCGAGCGTACCATTGCGGTGAACTTCACAGGCACATTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCCAATATCTGCTCGGTGACTGGCTTCAATGCCATCTTACCAGTGCCTGTGTACTCGGCATCCAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n35' otu='t0n35'>
+        <seq>ATGGCC------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCAAAGAACCTGGTCATCCTTGACCGCATTGAGAACCCAGCTGCTATTGCCGAGCTGAAGGCACTCAACCCAAATGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCCCGGTAGCAGAGACCACGAAGCTTTTGCAGAAAATCTTTGACCAGCTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACGGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n36' otu='t0n36'>
+        <seq>ATGGTT------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCAAAGAACCTGGTCATCCTTGACCGCATTGAGAACCCAGCCGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACAAAGCTGCTGAAGACCATCTTCGACAAGTTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACTGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTATCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n37' otu='t0n37'>
+        <seq>ATGGCC------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGCCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCAGCTGCCATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACCTTCTATCCCTATGATGTGACCGTCCCGGTTGCAGAGACCACAAAGCTTTTGAAGACAATCTTCGACAAGCTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATTGAGCGCACCATTGCAGTGAACTTCACAGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n38' otu='t0n38'>
+        <seq>ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACAGTCACATTTTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTAAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGCCCGGGCGGAGTTATTGCAAACATTTGCTCGGTGTCTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAGAGGCAGCTGC [...]
+      </row>
+      <row id='c0n39' otu='t0n39'>
+        <seq>ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACAGTCACATTTTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTAAATTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGCCCGGGCGGAGTTATTGCAAACATTTGCTCGGTGTCTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAGAGGCAGCTGC [...]
+      </row>
+      <row id='c0n40' otu='t0n40'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACTTGGTGGTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCATTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATACTCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAATGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n41' otu='t0n41'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCTGTGAATTTTACAGGTTTGGTGAACACCACAACTGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGTTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAAGCGGCTGC [...]
+      </row>
+      <row id='c0n42' otu='t0n42'>
+        <seq>ATGGTT------ATCGCTAACAGTAACGTCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGGTGCTTGACCGCGTTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCGTTACATTCTATCCGTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCGGTGAATTTTACAGGTACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATTTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAAGCGGCTGC [...]
+      </row>
+      <row id='c0n43' otu='t0n43'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGCGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAATTTGGTGTTGCTCGATCGCATTGACAATCCCGCTGCCATTAATGAGTTGAGAGCCCTCAATCCCAAGGTGACCGTTACATTTTATTCCTATGATGTAACCGTTCCGTTGGCCGAAACCAAAAAGCTTTTGAAGACAATCTTCGACAAGCTGAAGACTGTTGATCTGCTCATCAATGGTGCTGGCATCCTGGATGATCATCAGATTGAGCGCACCATTGCGGTGAATTTCACTGGTACAGTGAACACCACCACTGCGATCATGGATTTCTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATTGTTGCCAACATCTGCTCAGTGACTGGCTTCAACTCCATCTACCAAGTGCCCGTTTACTCAGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n44' otu='t0n44'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGTCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAGTGCGCTCAATCCCAAGGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACTGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATCATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGTACAGTGAACACCACTACTGCGATCATGGATTTCTGGGACAAGCGTAACGGCGGCCCCGGTGGTGTTATTGCCAACATCTGCTCAGTGACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n45' otu='t0n45'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAGTGCACTCAATCCTAAGGTGACCGTTACATTCTATCCCTATGATGTTACCGTACCGTTGGATGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATTCTGGACGACAATCAGATTGAGCGCACCATTGCGGTGAATTTTACTGGTACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n46' otu='t0n46'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTCGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGCTGAAAGCCCTTAACCCGAAGGTGACCATTACATTCTATCCCTATGATGTAACAGTGCCGGTGGATGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTCCTCATCAATGGCGCTGGTATCCTGGATGATCATCAGATTGAGCGCACCATTGCGGTGAACTTTGCAGGTACAGTGAACACCACAACAGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATCTGCTCCGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n47' otu='t0n47'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACCTGGTGGTGCTTGATCGCGTTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGGTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n48' otu='t0n48'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACTTGGTGGTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCATTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATACTCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTGGTTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n49' otu='t0n49'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACCTGGTGGTGCTTGATCGCGTTGACAACCCCGCTGCAATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGGTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACGAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGATAAGCGTAAGGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAGGCGGCTGC [...]
+      </row>
+      <row id='c0n50' otu='t0n50'>
+        <seq>ATGGTT------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCGAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCTGCGGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTTTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACGAAGCTTCTGAAGACAATCTTCGACAAGCTGAAGACAGTCGACATACTCATCAATGGAGCTGGTATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACGGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTATCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n51' otu='t0n51'>
+        <seq>ATGGTA------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGGGAAATCGTCAAGAGCGGCCCAAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCAGCTGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGATCGTTACGTTCTATCCCTATGATGTAACCGTCCCGGTAGCAGAGACCACAAAGCTTCTGAAGATAATCTTCGACAAGCTAAAGACTGTGGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCTGTGAACTTCACTGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTATTCCGCATCGAAGGCAGCTGC [...]
+      </row>
+      <row id='c0n52' otu='t0n52'>
+        <seq>ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCTGTGAATTTTACAGGTTTGGTGAACACCACAACTGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGTTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAAAGCGGCTGC [...]
+      </row>
+      <row id='c0n53' otu='t0n53'>
+        <seq>ATGGTCTTTNNNCTGCCCAACAAGAACGTGATCTTCGTCGCCGGCCTGGGCGGCATCGGTCTGGACACCAGTCGCGAGATTGTCAAGGCTGGTCCCAAGAACCTGGTGATCCTCGATCGTGTGGAGAACCCCGCCGCCATTGCTGAGCTGCAGGCCATCAATCCCAAGGTGACTGTCACCTTCTATCCCTACGATGTCACCGTGCCACTCAGTGAGTCTGTCAAGCTGCTGAAGACCATCTTCGACAAGTTGAAGACCATCGATCTGTTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAACGCACCATCGCTGTGAACTTCACTGGCCTGGTGAACACCACCACCGCCATTCTGCAGTTCTGGGACAAGCGTAAGGGTGGTCCCGGTGGCGTTATTGCCAACATCTGCTCCGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGCCTCGAAGGCAGCTGT [...]
+      </row>
+    </matrix>
+  </characters>
+</nex:nexml>
diff --git a/test/NTSValidIn/parens_intree.tre b/test/NTSValidIn/parens_intree.tre
new file mode 100644
index 0000000..1fecf52
--- /dev/null
+++ b/test/NTSValidIn/parens_intree.tre
@@ -0,0 +1,9 @@
+#NEXUS
+begin taxa;
+	dimensions ntax = 4
+	; taxlabels a[hi jeet]c 'b (' c d;
+	end;
+begin trees;
+	tree a = (1,('b (', c),d);
+end;
+
diff --git a/test/NTSValidIn/partitions.nex b/test/NTSValidIn/partitions.nex
new file mode 100644
index 0000000..019a367
--- /dev/null
+++ b/test/NTSValidIn/partitions.nex
@@ -0,0 +1,60 @@
+#nexus
+
+begin taxa;
+  dimensions ntax=6;
+  taxlabels
+	'P. fimbriata'
+	'P. robusta'
+	'P. americana'
+	'P. myriophylla'
+	'P. polygama'
+	'P. macrophylla'
+  ;
+  blockid bogus;
+end;
+
+[!
+*************
+* dna       *
+*************
+]
+begin characters;
+  dimensions nchar=45;
+  format datatype=dna missing=? gap=-;
+  title dna_forty_five;
+	CHARLABELS labone labtwo labthree labfour labfive labsix labseven;
+
+  matrix
+	P._fimbriata    {a, G}cctcggcttaacgaacctcggcttaacgaacctcggcttaacga
+	P._robusta      (a, , C)cctcggcttaaccaacctcggcttaacgaacctcggcttaacga
+	P._americana    rcgtcgctttca---acgtcgctttcaccaacgtcgctttcacca
+	P._myriophylla  acgtcgctttca---acgtcgctttcaccaacgtc?ctttcacca
+	P._polygama     acgtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca
+	P._macrophylla  acgtcgctctcaccaacgtcgctttcaccaacgtcgctttcacca
+  ;
+end;
+
+begin trees;
+	tree treone = (1,2,3,4,5,6);
+	tree tretwo = (1,(2,3),4,5,6)[test];
+	tree trethr = (1,2,(3,4),5,6);
+end;
+BEGIN Sets;
+    Charset csone = 1-3;
+    CHARPARTITION csparttwo (STANDARD CHARACTERS='dna forty five') = firstthree: csone, next: 4-12\2, anothergr : 5 - . \2 , rest : 14 - 44\2;
+    CHARPARTITION cspart (STANDARD CHARACTERS='dna forty five') = firstthree: csone, next: 4-14\2, anothergr : 5 - . \2 , rest : 16 - 44\2;
+    TaxPARTITION cspart = firstthree: P._fimbriata-3, next: 4, anothergr : 6 , rest : 5;
+    TreePARTITION cspart=next:3,firstthree:1-2;
+end; BEGIN ASSUMPTIONS;
+	Usertype mine (stepmatrix) = 4 a c g t . 1 1 1 2 . 2 2 3 3 . 3 4 4 4 . ;
+    ExSet  e = 3-. \ 4;
+    TypeSet * ts = ORD: csone 3-14\2, UNORD: 4-.\2, mine : 15-. \2;
+    WtSet  t = 2: csone 3-14\2, 1: 4-.\2, 3 : 15-. \2;
+    WtSet  tes = 2: csone 3-14\2, 6.01: 4-.\2, 3 : 15-. \2;
+    WtSet * tvecs (vector ) = 1 2  3 1 2 3  1  2 3 
+                             1 2  3 1 2 3  11 2 3 
+                             1 21 3 1 2 3  1  2 3 
+                             1 2  3 1 2 31 1  2 3 
+                             1 2  3 1 2 3  1  2 3  ;
+    ExSet * edef = 2-. \ 4;
+end;
diff --git a/test/NTSValidIn/paup_characters.nex b/test/NTSValidIn/paup_characters.nex
new file mode 100644
index 0000000..28f0289
--- /dev/null
+++ b/test/NTSValidIn/paup_characters.nex
@@ -0,0 +1,28 @@
+#nexus
+
+begin taxa;
+  dimensions ntax=6;
+  taxlabels
+	'P. fimbriata'
+	'P. robusta'
+	'P. americana'
+	'P. myriophylla'
+	'P. polygama'
+	'P. macrophylla'
+  ;
+  blockid bogus;
+end;
+
+begin characters;
+  dimensions nchar=45;
+  format datatype=dna missing=? symbols="01" gap=-;
+  title paup_multi;
+  matrix
+	P._fimbriata    {a, G}  cctcggcttaac 1    aacctcggcttaacgaacctcggcttaacga
+	P._robusta      (a, , C)cctcggcttaac 0    aacctcggcttaacgaacctcggcttaacga
+	P._americana    m       cgtcgctttca- -    -acgtcgctttcaccaacgtcgctttcacca
+	P._myriophylla  a       cgtcgctttca- -    -acgtcgctttcaccaacgtc?ctttcacca
+	P._polygama     a       cgtcgctctcac ?    aacgtcgctttcaccaacgtc?ctttcacca
+	P._macrop[i]hylla  a    cgtcgctctca? {01} aacgtcgctttcaccaacgtcgctttcacca
+  ;
+end;
diff --git a/test/NTSValidIn/primates.nex b/test/NTSValidIn/primates.nex
new file mode 100755
index 0000000..62ef8a6
--- /dev/null
+++ b/test/NTSValidIn/primates.nex
@@ -0,0 +1,19 @@
+#NEXUS
+begin data;
+dimensions ntax=12 nchar=898;
+format datatype=dna interleave=no gap=-;
+matrix
+Tarsius_syrichta	AAGTTTCATTGGAGCCACCACTCTTATAATTGCCCATGGCCTCACCTCCTCCCTATTATTTTGCCTAGCAAATACAAACTACGAACGAGTCCACAGTCGAACAATAGCACTAGCCCGTGGCCTTCAAACCCTATTACCTCTTGCAGCAACATGATGACTCCTCGCCAGCTTAACCAACCTGGCCCTTCCCCCAACAATTAATTTAATCGGTGAACTGTCCGTAATAATAGCAGCATTTTCATGGTCACACCTAACTATTATCTTAGTAGGCCTTAACACCCTTATCACCGCCCTATATTCCCTATATATACTAATCATAACTCAACGAGGAAAATACACATATCATATCAACAATATCATGCCCCCTTTCACCCGAGAAAATACATTAATAATCATACACCTATTTCCCTTAATCCTACTATCTACCAACCCCAAAGTAATTATAGGAACCATGTACTGTAAATATAGTTTAAAC [...]
+Lemur_catta		AAGCTTCATAGGAGCAACCATTCTAATAATCGCACATGGCCTTACATCATCCATATTATTCTGTCTAGCCAACTCTAACTACGAACGAATCCATAGCCGTACAATACTACTAGCACGAGGGATCCAAACCATTCTCCCTCTTATAGCCACCTGATGACTACTCGCCAGCCTAACTAACCTAGCCCTACCCACCTCTATCAATTTAATTGGCGAACTATTCGTCACTATAGCATCCTTCTCATGATCAAACATTACAATTATCTTAATAGGCTTAAATATGCTCATCACCGCTCTCTATTCCCTCTATATATTAACTACTACACAACGAGGAAAACTCACATATCATTCGCACAACCTAAACCCATCCTTTACACGAGAAAACACCCTTATATCCATACACATACTCCCCCTTCTCCTATTTACCTTAAACCCCAAAATTATTCTAGGACCCACGTACTGTAAATATAGTTTAAA-AAAA [...]
+Homo_sapiens		AAGCTTCACCGGCGCAGTCATTCTCATAATCGCCCACGGGCTTACATCCTCATTACTATTCTGCCTAGCAAACTCAAACTACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCACTAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTAACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCATTACCGGGTTTTCCTCTTGTAAATATAGTTTAACCAAA [...]
+Pan	  		AAGCTTCACCGGCGCAATTATCCTCATAATCGCCCACGGACTTACATCCTCATTATTATTCTGCCTAGCAAACTCAAATTATGAACGCACCCACAGTCGCATCATAATTCTCTCCCAAGGACTTCAAACTCTACTCCCACTAATAGCCTTTTGATGACTCCTAGCAAGCCTCGCTAACCTCGCCCTACCCCCTACCATTAATCTCCTAGGGGAACTCTCCGTGCTAGTAACCTCATTCTCCTGATCAAATACCACTCTCCTACTCACAGGATTCAACATACTAATCACAGCCCTGTACTCCCTCTACATGTTTACCACAACACAATGAGGCTCACTCACCCACCACATTAATAACATAAAGCCCTCATTCACACGAGAAAATACTCTCATATTTTTACACCTATCCCCCATCCTCCTTCTATCCCTCAATCCTGATATCATCACTGGATTCACCTCCTGTAAATATAGTTTAACCAAAACATCA [...]
+Gorilla   		AAGCTTCACCGGCGCAGTTGTTCTTATAATTGCCCACGGACTTACATCATCATTATTATTCTGCCTAGCAAACTCAAACTACGAACGAACCCACAGCCGCATCATAATTCTCTCTCAAGGACTCCAAACCCTACTCCCACTAATAGCCCTTTGATGACTTCTGGCAAGCCTCGCCAACCTCGCCTTACCCCCCACCATTAACCTACTAGGAGAGCTCTCCGTACTAGTAACCACATTCTCCTGATCAAACACCACCCTTTTACTTACAGGATCTAACATACTAATTACAGCCCTGTACTCCCTTTATATATTTACCACAACACAATGAGGCCCACTCACACACCACATCACCAACATAAAACCCTCATTTACACGAGAAAACATCCTCATATTCATGCACCTATCCCCCATCCTCCTCCTATCCCTCAACCCCGATATTATCACCGGGTTCACCTCCTGTAAATATAGTTTAACCAAAAC [...]
+Pongo     		AAGCTTCACCGGCGCAACCACCCTCATGATTGCCCATGGACTCACATCCTCCCTACTGTTCTGCCTAGCAAACTCAAACTACGAACGAACCCACAGCCGCATCATAATCCTCTCTCAAGGCCTTCAAACTCTACTCCCCCTAATAGCCCTCTGATGACTTCTAGCAAGCCTCACTAACCTTGCCCTACCACCCACCATCAACCTTCTAGGAGAACTCTCCGTACTAATAGCCATATTCTCTTGATCTAACATCACCATCCTACTAACAGGACTCAACATACTAATCACAACCCTATACTCTCTCTATATATTCACCACAACACAACGAGGTACACCCACACACCACATCAACAACATAAAACCTTCTTTCACACGCGAAAATACCCTCATGCTCATACACCTATCCCCCATCCTCCTCTTATCCCTCAACCCCAGCATCATCGCTGGGTTCGCCTACTGTAAATATAGTTTAACCAAAAC [...]
+Hylobates 		AAGCTTTACAGGTGCAACCGTCCTCATAATCGCCCACGGACTAACCTCTTCCCTGCTATTCTGCCTTGCAAACTCAAACTACGAACGAACTCACAGCCGCATCATAATCCTATCTCGAGGGCTCCAAGCCTTACTCCCACTGATAGCCTTCTGATGACTCGCAGCAAGCCTCGCTAACCTCGCCCTACCCCCCACTATTAACCTCCTAGGTGAACTCTTCGTACTAATGGCCTCCTTCTCCTGGGCAAACACTACTATTACACTCACCGGGCTCAACGTACTAATCACGGCCCTATACTCCCTTTACATATTTATCATAACACAACGAGGCACACTTACACACCACATTAAAAACATAAAACCCTCACTCACACGAGAAAACATATTAATACTTATGCACCTCTTCCCCCTCCTCCTCCTAACCCTCAACCCTAACATCATTACTGGCTTTACTCCCTGTAAACATAGTTTAATCAAAAC [...]
+Macaca_fuscata		AAGCTTTTCCGGCGCAACCATCCTTATGATCGCTCACGGACTCACCTCTTCCATATATTTCTGCCTAGCCAATTCAAACTATGAACGCACTCACAACCGTACCATACTACTGTCCCGAGGACTTCAAATCCTACTTCCACTAACAGCCTTTTGATGATTAACAGCAAGCCTTACTAACCTTGCCCTACCCCCCACTATCAATCTACTAGGTGAACTCTTTGTAATCGCAACCTCATTCTCCTGATCCCATATCACCATTATGCTAACAGGACTTAACATATTAATTACGGCCCTCTACTCTCTCCACATATTCACTACAACACAACGAGGAACACTCACACATCACATAATCAACATAAAGCCCCCCTTCACACGAGAAAACACATTAATATTCATACACCTCGCTCCAATTATCCTTCTATCCCTCAACCCCAACATCATCCTGGGGTTTACCTCCTGTAGATATAGTTTAACTA [...]
+M_mulatta		AAGCTTTTCTGGCGCAACCATCCTCATGATTGCTCACGGACTCACCTCTTCCATATATTTCTGCCTAGCCAATTCAAACTATGAACGCACTCACAACCGTACCATACTACTGTCCCGGGGACTTCAAATCCTACTTCCACTAACAGCTTTCTGATGATTAACAGCAAGCCTTACTAACCTTGCCCTACCCCCCACTATCAACCTACTAGGTGAACTCTTTGTAATCGCGACCTCATTCTCCTGGTCCCATATCACCATTATATTAACAGGATTTAACATACTAATTACGGCCCTCTACTCCCTCCACATATTCACCACAACACAACGAGGAGCACTCACACATCACATAATCAACATAAAACCCCCCTTCACACGAGAAAACATATTAATATTCATACACCTCGCTCCAATCATCCTCCTATCTCTCAACCCCAACATCATCCTGGGGTTTACTTCCTGTAGATATAGTTTAACTAAAACA [...]
+M_fascicularis		AAGCTTCTCCGGCGCAACCACCCTTATAATCGCCCACGGGCTCACCTCTTCCATGTATTTCTGCTTGGCCAATTCAAACTATGAGCGCACTCATAACCGTACCATACTACTATCCCGAGGACTTCAAATTCTACTTCCATTGACAGCCTTCTGATGACTCACAGCAAGCCTTACTAACCTTGCCCTACCCCCCACTATTAATCTACTAGGCGAACTCTTTGTAATCACAACTTCATTTTCCTGATCCCATATCACCATTGTGTTAACGGGCCTTAATATACTAATCACAGCCCTCTACTCTCTCCACATGTTCATTACAGTACAACGAGGAACACTCACACACCACATAATCAATATAAAACCCCCCTTCACACGAGAAAACATATTAATATTCATACACCTCGCTCCAATTATCCTTCTATCTCTCAACCCCAACATCATCCTGGGGTTTACCTCCTGTAAATATAGTTTAACTA [...]
+M_sylvanus		AAGCTTCTCCGGTGCAACTATCCTTATAGTTGCCCATGGACTCACCTCTTCCATATACTTCTGCTTGGCCAACTCAAACTACGAACGCACCCACAGCCGCATCATACTACTATCCCGAGGACTCCAAATCCTACTCCCACTAACAGCCTTCTGATGATTCACAGCAAGCCTTACTAATCTTGCTCTACCCTCCACTATTAATCTACTGGGCGAACTCTTCGTAATCGCAACCTCATTTTCCTGATCCCACATCACCATCATACTAACAGGACTGAACATACTAATTACAGCCCTCTACTCTCTTCACATATTCACCACAACACAACGAGGAGCGCTCACACACCACATAATTAACATAAAACCACCTTTCACACGAGAAAACATATTAATACTCATACACCTCGCTCCAATTATTCTTCTATCTCTTAACCCCAACATCATTCTAGGATTTACTTCCTGTAAATATAGTTTAATTAAAAC [...]
+Saimiri_sciureus	AAGCTTCACCGGCGCAATGATCCTAATAATCGCTCACGGGTTTACTTCGTCTATGCTATTCTGCCTAGCAAACTCAAATTACGAACGAATTCACAGCCGAACAATAACATTTACTCGAGGGCTCCAAACACTATTCCCGCTTATAGGCCTCTGATGACTCCTAGCAAATCTCGCTAACCTCGCCCTACCCACAGCTATTAATCTAGTAGGAGAATTACTCACAATCGTATCTTCCTTCTCTTGATCCAACTTTACTATTATATTCACAGGACTTAATATACTAATTACAGCACTCTACTCACTTCATATGTATGCCTCTACACAGCGAGGTCCACTTACATACAGCACCAGCAATATAAAACCAATATTTACACGAGAAAATACGCTAATATTTATACATATAACACCAATCCTCCTCCTTACCTTGAGCCCCAAGGTAATTATAGGACCCTCACCTTGTAATTATAGTTTAGCT [...]
+;
+end;
diff --git a/test/NTSValidIn/protein.nex b/test/NTSValidIn/protein.nex
new file mode 100644
index 0000000..2aad28b
--- /dev/null
+++ b/test/NTSValidIn/protein.nex
@@ -0,0 +1,32 @@
+#nexus
+
+begin taxa;
+  dimensions ntax=6;
+  taxlabels
+	'P. fimbriata'
+	'P. robusta'
+	'P. americana'
+	'P. myriophylla'
+	'P. polygama'
+	'P. macrophylla'
+  ;
+end;
+begin characters;
+   dimensions nchar= 90;
+   format datatype=protein missing=? gap=- matchchar=.  interleave=yes;
+   MATRIX  
+	P._fimbriata    {a, G}Rctcggcttaacgaacctcggcttaacgaacctcggcttaacga
+	P._robusta      (a, , C)cctcggcttaaccaacctcggcttaacgaacctcggcttaacga
+	P._americana    ACDEFGHIKLMNPQRSTVWY*BZAAAAAAAAAAtcgctttcacca
+	P._myriophylla  acgtcgctttca---acgtcgctttcaccaacgtc?ctttca.ca
+	P._polygama     a.gtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca
+	P._macrophylla  acgtcgctctcaccaacgtcgctttcaccaacgtcgctttcacca
+
+	P._fimbriata    Rcctcggcttaacgaacctcggcttaacgaacctcggcttaacga
+	P._robusta      (a, , C)cctcggcttaaccaacctcggcttaacgaacctcggcttaacga
+	P._americana    rcgtcgctttca---acgtcgctttcaccaacgtcgctttcacca
+	P._myriophylla  acgtcgctttca---acgtcgct.tcaccaacgtc?ctttcacca
+	P._polygama     acgtcgctctcaccaacgtcgctttcaccaacgtc?ctttcacca
+	P._macrophylla  acgtcgctctcaccaacgtcgct..caccaacgtcgctttcacca
+  ;
+end;
diff --git a/test/NTSValidIn/replicase.nex b/test/NTSValidIn/replicase.nex
new file mode 100755
index 0000000..d483206
--- /dev/null
+++ b/test/NTSValidIn/replicase.nex
@@ -0,0 +1,48 @@
+#NEXUS
+
+begin data;
+	dimensions  ntax=9 nchar=720;
+	format datatype=rna interleave=no gap=- missing=?;
+	matrix
+	[       1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50]
+	FR      GGC AAC GGU --- GUG UUU ACU GUU CCG AAG AAC AAU AAA AUA GAU CGG GCU GCU UGC AAA GAG CCU GAU AUG AAU AUG UAC UUA CAG AAA GGG GUC GGC GGU UUC AUC CGU CGC CGC CUU AAG ACU GUG GGU AUA GAC UUG AAC GAU CAA ACG AUC AAU CAA CGC CUG GCU CAA CAA GGU AGC CGU GAU GGG UCU UUG GCG ACG AUA GAC UUA UCG UCU GCU UCU GAC UCC AUC AGC GAC CGC CUA GUG UGG AGU UUU CUC CCA CCU GAG CUA UAU UCA UAU CUC GAC AUG AUU CGA AGC CAC UAC GGU UAC GUA --- AAU GGC AAG AUG AUU CGU UGG GAA CUA UUU UCG ACG AUG GGU AAU [...]
+	MS2     GGG AAC GGA --- GUG UUU ACA GUU CCG AAG AAU AAU AAA AUA GAU CGG GCU GCC UGU AAG GAG CCU GAU AUG AAU AUG UAC CUC CAG AAA GGG GUC GGU GCU UUC AUC AGA CGC CGG CUC AAA UCC GUU GGU AUA GAC CUG AAU GAU CAA UCG AUC AAC CAG CGU CUG GCU CAG CAG GGC AGCGUAGAUGGUUCGCUUGCGACGAUAGACUUAUCGUCUGCAUCCGAUUCCAUCUCCGAUCGCCUGGUGUGGAGUUUUCUCCCACCUGAGCUAUAUUCAUAUCUCGAUCGUAUCCGCUCACACUACGGA---GUA---GAUGGCGAGACGAUACGAUGGGAACUAUUUUCCACAAUGGGAAAUGGGUUCACAUUUGAGCUAGAGUCCAUGAUAUUCUGGGCAAUAGUCAAAGCGACCCAAAUC [...]
+	GA      GGC AAC GGU --- UUG UUU UCU GUU CCG AAG AAC AAU AAA AUA GAU CGG GCU GCC UGU AAG GAG CCU GAU AUG AAU AUG UAC CUU CAG AAG GGG GCG GGA UCU UUU AUA AGA AAA CGC CUU CGC UCC GUC GGU AUA GAU CUU AAC GAU CAG ACG CGC AAU CAG GAA UUA GCC CGA CUU GGC AGCAUUGAUGGUUCGCUCGCUACUAUUGAUCUUAGUAGCGCUAGCGAUUCCAUCUCUGACCGUCUUGUCUGGGAUCUACUUCCGCCGCACGUUUAUUCAUACCUCGCUCGUAUCCGAACAUCGUUCACUAUGAUC---GAUGGGCGUUUACAUAAGUGGGGUCUAUUUUCUACCAUGGGUAAUGGCUUCACGUUCGAACUCGAGUCCAUGAUCUUUUGGGCUUUAAGCAAGAGCAUUAUGCUG [...]
+	SP      UCA --- AAU AAA GCA GUC ACU GUU CCA AAG AAC AGU AAA ACU GAU CGC UGU AUU GCU AUC GAG CCC GGC UGG AAU AUG UUU UUC CAG UUA GGC GUC GGU GCA GUG CUA CGC GAU AGG UUG CGU UUA UGG AAG AUU GAU CUU AAU GAC CAA UCG ACC AAU CAA CGC CUC GCG CGU GAU GGG UCUCUGCUAAAUCAUUUAGCUACCAUAGACUUAUCUGCAGCCAGCGAUUCAAUCAGCCUUAAGCUUGUUGAGUUGCUCAUGCCCCCUGAAUGGUAUGACCUUCUAACGGAUCUCCGAUCCGAUGAAGGAAUACUGCCUGACGGGCGAGUUGUGACCUAUGAGAAAAUAUCCUCCAUGGGUAAUGGCUACACUUUCGAACUCGAGUCGCUUAUUUUUGCGGCUAUCGCUCGAAGUGUGUGCGAG [...]
+	NL95    UCG --- AAU AAA GCA GUC ACU GUU CCA AAG AAC AGU AAA ACU GAU CGC UGC AUU GCU AUC GAG CCC GGC UGG AAU AUG UUU UUC CAG UUA GGC GUC GGU GCU GUG CUC CGU GAU CGG UUG CGC CUU UGG CAU AUU GAU CUC AAU GAU CAA UCU GUU AAU CAG CGC CUC GCA CGU GAU GCA UCGCAGUUGGACCAUUUGGCCACUGUCGAUUUAUCAGCAGCAAGCGAUUCGAUAAGCUUACGGCUUGUUGAACUGCUAAUGCCGCCUGCUUGGUUUGAUCUCCUGACCGAUCUCCGAUCGGACCAGGGAAUCCUGCCUGACGGGCGUGUCGUUACUUACGAGAAAAUAUCCUCCAUGGGUAAUGGCUACACUUUUGAGCUAGAGUCGUUAAUUUUCGCGGCUCUCGCCAGAAGUGUGUGCGAG [...]
+	M11     CCU UUC AAU AAA GCA GUU ACU GUA CCA AAG AAC AGU AAA ACU GAU CGC UGU AUA GCC AUC GAA CCU GGC UGG AAU AUG UUU UUC CAG CUA GGU AUC GGU GGU GUU AUA CGC GAA AAG UUG CGU UUG UGG GGC AUC GAU CUG AAU GAU CAG ACG AUU AAC CAA ACG CGC GCA UAU UUA GGC AGCCGUGAUGAUAAUCUCGCCACGGUGGAUCUCUCAAGAGCUAGCGAUACUAUUUCGCUUGCCCUUGUUGAGCUCCUUAUGCCUCCUGAGUGGUUUAAGGUCCUGUUGGCCUUAAGAUCACCCAAGGGCAUCUUGCCAGAUGGUACCGUCAUUACUUAUGAGAAAAUAUCCUCAAUGGGUAAUGGCUAUACCUUCGAGCUUGAGUCGCUUAUAUUUGCGGCUCUUGCUCGGUCUUUAUGCGAA [...]
+	MX1     CCU UUC AAU AAA GCA GUU ACU GUA CCA AAG AAC AGU AAA ACU GAU CGC UGC AUC GCU AUC GAG CCA GGC UGG AAU AUG UUU UUC CAG UUG GGC AUU GGU GGC GUA AUU CGC GAA AAG UUG CAC UUG UGG AAU AUC GAC CUG AAU GAU CAG ACG AUU AAC CAG GUG CGC GCA UAU UCA GGC AGCUGUAGCAAUGAACUUGCUACAGUGGAUCUCUCGAGCGCGAGUGAUACUAUUUCGCUUGCGCUCGUUGAGCUCCUGCUACCCCCUGCGUGGUUUAAAGUCCUUACGGACCUUAGGUCACGAAGGGGUAUGUUGCCAGACGGUAGAAUCAUUACCUAUGAGAAAAUUUCCUCAAUGGGUAACGGUUUCACCUUCGAGCUCGAGUCGCUUAUAUUUGCAGCUCUUGCUCGGUCUUUAUGCGAG [...]
+	QB      CCU UUU AAU AAA GCA GUU ACU GUA CCU AAG AAC AGU AAG ACA GAU CGU UGU AUU GCU AUC GAA CCU GGU UGG AAU AUG UUU UUC CAA CUG GGU AUC GGU GGC AUU CUA CGC GAU CGG UUG CGU UGC UGG GGU AUC GAU CUG AAU GAU CAG ACG AUA AAU CAG CGC CGC GCU CAC GAA GGC UCCGUUACUAAUAACUUAGCAACGGUUGAUCUCUCAGCGGCAAGCGAUUCUAUAUCUCUUGCCCUCUGUGAGCUCUUAUUGCCCCUAGGCUGGUUUGAGGUUCUUAUGGACCUCAGAUCACCUAAGGGGCGAUUGCCUGACGGUAGUGUUGUUACCUACGAGAAGAUUUCUUCUAUGGGUAACGGUUACACAUUCGAGCUCGAGUCGCUUAUUUUUGCUUCUCUCGCUCGUUCCGUUUGUGAG [...]
+	PP7     GAC AGC --- CGG UUC GAU UUU GUC GCU AAG ACC GCG AAG GCG GUU CGC UUC AUC GCU AUG GAG CCA GAA CUU AAC AUG CUG CUG CAG AAA UCU GUA GGA GAC ACG AUA AGG GCU GCU CUG CGG AAA GCG GGU AUC GAU CUC AAU ACC CAG CGA CUA AAU CAA GAU CUU GCG UAC CAC GGA UCCGUUUUUCGGAAUCUCGGUACGAUAGAUCUGUCUAGCGCUUCCGAUACGUUAAGCAUUGAACUCGUGCGGCAGUACCUGCCGAAGCGGUUUCUCCGCUAUGUAUUGGAUCUCCGAACCCCCUACACGAGUGUA---GGUGGUAAGAAGCACAGGCUCGAGAAGGUCGCUUCGAUGGGCAACGGGUUCAUUUUUGAACUCCAGAGCCUCAUCUACGCAGCCUUCGCGCAUGCCAUGACGCUA [...]
+	;
+end;
+
+begin mrbayes;
+	[The following line is useful for automatic execution with no
+	 warnings issued before files are overwritten and automatic
+	 termination of chains after the prespecified number of generations.]
+	set autoclose=yes nowarn=yes;
+	
+	[The following block demonstrates how you can set up a model that
+	 allows the third codon position to have gamma-distributed rate
+	 variation with a different shape parameter than the first and 
+	 second positions.]
+
+	[First define character sets]
+	charset first_pos  = 1-720\3;
+	charset second_pos = 2-720\3;
+	charset third_pos  = 3-720\3;
+	
+	[Define the partition]
+	partition by_codon = 3:first_pos,second_pos,third_pos;
+	
+	[Select the partition]
+	set partition=by_codon;
+	
+	[Set a GTR + gamma model for all partitions]
+	lset nst=6 rates=gamma;
+
+	[This is the line that allows the gamma shape parameter of the third codon position
+	 to be unique:]
+	unlink shape=(3);
+end;
diff --git a/test/NTSValidIn/t.nex b/test/NTSValidIn/t.nex
new file mode 100644
index 0000000..4c0b551
--- /dev/null
+++ b/test/NTSValidIn/t.nex
@@ -0,0 +1,115 @@
+#NEXUS
+BEGIN TAXA;
+	DIMENSIONS NTax = 49;
+	TAXLABELS Tm Ur Um Nn pl Mp Ml Cp Ct Lp Ca Uc Vf Hh Cc Aj Pp Pt Pq Tb Cs Db Eh Ec Eb Lg Cd Gc Sc Bb To Gg Gt Ac Mk Oa Oc He Am Cu Dl Ab Aa cq Dd Al Rt Ov Oh;
+END;
+BEGIN CHARACTERS;
+	DIMENSIONS NChar=2;
+	
+	
+	FORMAT Datatype=Continuous;
+Matrix
+Tm      (2.423245874 )  (2.062957834 ) 
+Ur      (2.400192489 )  (1.918030337 ) 
+Um      (1.970346876 )  (1.754348336 ) 
+Nn      (0.6434526765 )  (0.0211892991 ) 
+pl      (0.84509804 )  (0.0569048513 ) 
+Mp      (0.3979400087 )  (0.3979400087 ) 
+Ml      (1.064457989 )  (-0.060480747 ) 
+Cp      (1.547774705 )  (2.307067951 ) 
+Ct      (1.123851641 )  (1.653212514 ) 
+Lp      (1.301029996 )  (2.204119983 ) 
+Ca      (0.9444826722 )  (0.9590413923 ) 
+Uc      (0.5682017241 )  (0.0413926852 ) 
+Vf      (0.6812412374 )  (0.587710965 ) 
+Hh      (1.428134794 )  (2.184123354 ) 
+Cc      (1.716003344 )  (1.397940009 ) 
+Aj      (1.769377326 )  (1.7930916 ) 
+Pp      (1.719331287 )  (1.365487985 ) 
+Pt      (2.206825876 )  (1.84260924 ) 
+Pq      (2.192567453 )  (2.372912003 ) 
+Tb      (2.397940009 )  (0.3010299957 ) 
+Cs      (3.301029996 )  (0.8228216453 ) 
+Db      (3.079181246 )  (1.193124598 ) 
+Eh      (2.301029996 )  (1.544068044 ) 
+Ec      (2.544068044 )  (1.352182518 ) 
+Eb      (2.371067862 )  (2.217483944 ) 
+Lg      (1.977723605 )  (-0.301029996 ) 
+Cd      (2.740362689 )  (2 ) 
+Gc      (3.031408464 )  (1.927370363 ) 
+Sc      (2.792391689 )  (2.139879086 ) 
+Bb      (2.937016107 )  (2.123851641 ) 
+To      (2.7084209 )  (1.942008053 ) 
+Gg      (1.795880017 )  (1.301029996 ) 
+Gt      (1.311753861 )  (0.7242758696 ) 
+Ac      (1.574031268 )  (0.8129133566 ) 
+Mk      (0.6989700043 )  (-1.36653154 ) 
+Oa      (2.054995862 )  (1.356981401 ) 
+Oc      (1.929418926 )  (1.15624619 ) 
+He      (2.355068206 )  (1.903089987 ) 
+Am      (1.726319612 )  (0.5797835966 ) 
+Cu      (2.334453751 )  (1.875061263 ) 
+Dl      (2.113943352 )  (0.3424226808 ) 
+Ab      (2.133538908 )  (0.6989700043 ) 
+Aa      (1.698970004 )  (1 ) 
+cq      (2.477121255 )  (1.111598525 ) 
+Dd      (1.740362689 )  (0.1139433523 ) 
+Al      (2.584331224 )  (1.206825876 ) 
+Rt      (2 )  (1.477121255 ) 
+Ov      (1.755874856 )  (0.2922560714 ) 
+Oh      (1.86923172 )  (0.45484486 ) ;
+END;
+BEGIN TREES;
+	TRANSLATE
+		1 Tm,
+		10 Lp,
+		11 Ca,
+		12 Uc,
+		13 Vf,
+		14 Hh,
+		15 Cc,
+		16 Aj,
+		17 Pp,
+		18 Pt,
+		19 Pq,
+		2 Ur,
+		20 Tb,
+		21 Cs,
+		22 Db,
+		23 Eh,
+		24 Ec,
+		25 Eb,
+		26 Lg,
+		27 Cd,
+		28 Gc,
+		29 Sc,
+		3 Um,
+		30 Bb,
+		31 To,
+		32 Gg,
+		33 Gt,
+		34 Ac,
+		35 Mk,
+		36 Oa,
+		37 Oc,
+		38 He,
+		39 Am,
+		4 Nn,
+		40 Cu,
+		41 Dl,
+		42 Ab,
+		43 Aa,
+		44 cq,
+		45 Dd,
+		46 Al,
+		47 Rt,
+		48 Ov,
+		49 Oh,
+		5 pl,
+		6 Mp,
+		7 Ml,
+		8 Cp,
+		9 Ct
+	;
+	TREE Untitled_Tree = [&R]((((((1:2000000.0,2:2.435E6)n95:3000000.0,3:5000000.0)n31:3.9E7,((4:5000000.0,5:5000000.0)n92:2.6E7,(6:2.0E7,7:2.0E7)n07:1.1E7)n93:1.3E7)n06:8000000.0,(((((8:2500000.0,9:2500000.0)n34:500000.0,10:3000000.0)n32:3000000.0,11:6000000.0)n28:3000000.0,12:9000000.0)n22:500000.0,13:9500000.0)n21:4.25E7)n05:6000000.0,((14:5000000.0,15:5000000.0)n18:2.1E7,(16:9000000.0,(17:2500000.0,(18:2000000.0,19:2000000.0)n36:500000.0)n35:6500000.0)n23:1.7E7)n10:3.2E7)n03:1.2E7,(((20 [...]
+END;
diff --git a/test/NTSValidIn/treeswithouttaxa.nex b/test/NTSValidIn/treeswithouttaxa.nex
new file mode 100644
index 0000000..e806e9d
--- /dev/null
+++ b/test/NTSValidIn/treeswithouttaxa.nex
@@ -0,0 +1,4 @@
+#NEXUS
+begin trees;
+	tree test = [&U] (a ,(b,c),d);
+end;
diff --git a/test/NTSValidIn/unaligned.nex b/test/NTSValidIn/unaligned.nex
new file mode 100644
index 0000000..0474713
--- /dev/null
+++ b/test/NTSValidIn/unaligned.nex
@@ -0,0 +1,28 @@
+#nexus
+
+begin taxa; 
+  dimensions ntax=10;
+  taxlabels
+    taxon_1
+    taxon_2
+    taxon_3
+    taxon_4
+    taxon_5
+    taxon_6
+    taxon_7
+    taxon_8
+    taxon_9
+    taxon_10
+    ;
+end;
+
+begin unaligned;
+  dimensions ntax=5;
+  format datatype=dna;
+  matrix
+    taxon_10 ACYAGGACTAGATCAAGTT,
+    taxon_2 ACCAGGAC(CT)AGCGGATCAAG,
+    taxon_7 ACCAGGACTAGATCAAG,
+    taxon_4 AGCCAGGACTAGTTC,
+    taxon_5 {AG}TCAGGACNAGA?CAAGTTC;
+end;
diff --git a/test/NTSValidOut/adh.nex b/test/NTSValidOut/adh.nex
new file mode 100644
index 0000000..f54bb87
--- /dev/null
+++ b/test/NTSValidOut/adh.nex
@@ -0,0 +1,77 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 54;
+    TAXLABELS D.persimilis D.pseudoobscura1 D.pseudoobscura2 D.miranda D.ambigua D.subobscura D.madeirensis D.willistoni D.lebanonensis D.melanogaster D.simulans D.mauritiana D.teissieri D.orena D.sechellia D.yakuba D.tsacasi D.crassifemur D.montana D.buzzatii_1 D.buzzatii_2 D.texana D.lummei D.lacicola D.borealis D.flavomontana D.americana Sc.albovittata D.immigrans D.mettleri D.arizonae_2 D.hydei_1 D.hydei_2 D.mojavensis_1 D.mojavensis_2 D.mulleri_1 D.mulleri_2 D.navojoa D.virilis_1 D. [...]
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=771;
+    FORMAT Datatype=DNA  Gap=-;
+Matrix
+D.persimilis          ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAA [...]
+D.pseudoobscura1      ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAA [...]
+D.pseudoobscura2      ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCATCACCTTCTATCCCTACGATGTGACTGTGCCCGTCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGGTGAAGACAATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCTCCAA [...]
+D.miranda             ATGTCT------CTCACCAACAAGAACGTCGTTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGTTGGTCAAGCGTAATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTATCCCTACGATGTGACTGTGCCCATCGCTGAGACCACCAAGCTCCTGAAGACCATCTTTGCCCAGCTGAAGACTATCGATGTCCTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAGCGCACCATTGCCGTTAACTACACGGGCCTGGTCAACACCACCACAGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAA [...]
+D.ambigua             ATGTCA------CTGACCAACAAGAATGTGATTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCCGGGAGCTGGTTAAGCGTGATCTGAAGAACCTGGTCATCCTGGATCGCATTGACAATCCGGCTGCCATTGCCGAGCTGAAGGCCATCAATCCCAAGGTGACGGTCACCTTCTATCCGTACGATGTGACGGTGCCCATCAGCGAGACGACCAAGCTGCTGAAGACCATCTTTGCCCAGCTGAAGACCGTCGATGTGCTGATCAACGGTGCCGGCATCCTGGACGATTATCAGATTGAGCGCACCATTGCCGTTAACTACACGGGTCTGGTCAACACCACCACCGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGCATCATTTGCAACATTGGCTCCGTCACCGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCTGGCAGCAA [...]
+D.subobscura          ATGTCA------CTTACAAACAAGAATGTTGTTTTCGTGGCTGGTCTGGGAGGTATTGGCCTGGACACCAGTCGGGAGTTGGTTAAGCGAGATCTGAAGAATCTGGTCATCCTGGATCGCATTGACAATGCAGCGGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTACCCTTATGATGTGACTGTACCTGTCGCAGAGACCACCAAACTCCTGAAGACCATCTTTGCCCAGATCAAGACCATCGATGTCCTGATAAACGGTGCTGGCATCCTCGACGATCATCAGATTGAGCGTACTATTGCCGTTAACTACTCTGGCCTGGTCAACACCACCACAGCCATTCTGGACTTTTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATCATTTGCAACATTGGCTCCGTTACCGGTTTTAATGCCATCTACCAGGTGCCCGTTTACTCTGGCAGCAA [...]
+D.madeirensis         ATGTCA------CTAACAAACAAGAATGTTGTTTTCGTGGCTGGTCTGGGAGGTATTGGCCTGGACACCAGTCGGGAGTTGGTTAAGCGAGATCTGAAGAATCTGGTCATCCTGGATCGCATTGACAATCCAGCGGCCATTGCCGAACTGAAGGCAATCAATCCCAAGGTGACCGTCACCTTCTACCCTTATGATGTGACTGTACCTGTCGCAGAGACCACCAAACTCCTGAAGACCATCTTTGCCCAGATCAAGACCATCGATGTCCTGATAAACGGTGCTGGCATCCTCGACGATCATCAGATTGAGCGTACTATTGCCGTTAACTACACTGGCCTGGTCAACACCACCACAGCCATTCTGGACTTTTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATCATTTGCAACATTGGCTCCGTTACCGGTTTTAATGCCATCTACCAGGTGCCTGTTTACTCTGGCAGCAA [...]
+D.willistoni          ATGGCT------CTCACCAACAAGAACATCATCTTTGTGGCCGGTCTGGGCGGCATTGGTCTGGACACCAGTCGCGAATTGGTCAAACGGGATCTCAAGAACTTGGTGATCCTGGATCGTATTGACAATCCTGCTGCCATTGCTGAACTGAAGGCAATCAATCCCAAAGTGACAGTTACCTTCTATCCCTATGATGTTACCACACCCTTGACAGAGACTACCAAATTGTTGAAGACCATTTTCGCCCAATTGAAGACTGTCGATGTCCTGATCAATGGAGCTGGCATTTTGGATGATCATCAGATCGAGCGTACCATTGCTGTGAACTTCACTGGTTTGGTCAATACCACCACAGCCATTTTGGACTTCTGGGATAAGCGTAAGGGTGGACCAGGTGGCGTCATCTGCAACATTGGCTCTGTGACCGGTTTCAATGCCATCTACCAGGTCCCTGTCTATTCCGCATCCAA [...]
+D.lebanonensis        ATGGAT------TTGACCAACAAGAACGTTATTTTCGTTGCCGCTCTGGGCGGTATTGGTCTCGACACGAGTCGGGAGCTCGTCAAGCGTAATCTGAAGAATTTTGTCATCTTGGACAGAGTTGAGAACCCGACTGCTCTTGCTGAGCTGAAGGCAATAAATCCCAAGGTGAACATCACCTTCCATACCTACGATGTGACCGTACCCGTTGCTGAGTCGAAGAAGCTGCTGAAGAAGATTTTCGATCAGCTGAAAACCGTTGACATTCTGATCAATGGTGCTGGTATTTTGGATGACCATCAGATTGAGCGCACCATTGCCATCAACTTCACTGGTCTGGTCAACACCACCACCGCTATTTTGGACTTTTGGGACAAGCGTAAGGGCGGTCCTGGTGGCATCATTGCCAACATTTGCTCCGTTACTGGCTTCAATGCCATCCACCAGGTGCCTGTCTACTCGGCATCCAA [...]
+D.melanogaster        ATGTCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGATCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGCGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGATTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAA [...]
+D.simulans            ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATCGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGACCTGAAGAACCTGGTAATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAA [...]
+D.mauritiana          ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGCCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGCGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCTGCTGCCATTGCCGAGCTGCAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAA [...]
+D.teissieri           ATGGCGTTTACCTTGACCAACAAGAACGTGGTTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGGGACCTCAAGAACCTGGTCATCCTCGACCGCATTGAGAACCCGGCTGCCATCGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCATCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATCGCCGTCAACTACACCGGCCTGGTGAACACCACGACCGCCATCCTGGACTTCTGGGACAAGCGCAAGGGTGGACCCGGTGGCATCATCTGCAACATTGGATCCGTGACTGGATTCAACGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAA [...]
+D.orena               ATGGCATTCACCTTGACCAACAAGAACGTCATTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGTGATCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTATCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGACGACCGTCGATGTCCTGATCAACGGAGCTGGCATCCTGGACGATTACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGATTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGCATTATCTGCAACATTGGCTCCGTAACTGGATTCAATGCCATCTACCAGGTGCCCGTCTACTCTGGCACCAA [...]
+D.sechellia           ATGGCGTTTACTTTGACCAACAAGAACGTGATTTTCGTTGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGCTCAAGCGCGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCTGCTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTATGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCAAGCTGAAGACCGTCGATGTCCTGATCAACGGAGCTGGTATCCTGGACGATCACCAGATCGAGCGCACCATTGCCGTCAACTACACTGGCCTGGTCAACACCACGACGGCCATTCTGGACTTCTGGGACAAGCGCAAGGGTGGTCCCGGTGGTATCATCTGCAACATTGGATCCGTCACTGGTTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGGCACCAA [...]
+D.yakuba              ATGGCGTTTACCTTGACCAACAAGAACGTGGTTTTCGTGGCCGGTCTGGGAGGCATTGGTCTGGACACCAGCAAGGAGCTGGTCAAGCGGGACCTGAAGAACCTGGTGATCCTCGACCGCATTGAGAACCCGGCTGCCATCGCCGAGCTGAAGGCAATCAATCCAAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCCATTGCCGAGACCACCAAGCTGCTGAAGACCATCTTCGCCCAGCTGAAGACCATCGATGTCCTGATCAACGGAGCTGGCATCCTGGACGATCACCAGATCGAGCGCACCATCGCCGTCAACTACACCGGCCTGGTGAACACCACGACGGCCATCCTGGACTTCTGGGACAAGCGCAAGGGTGGACCCGGTGGTATCATCTGCAACATTGGATCCGTGACTGGATTCAACGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAA [...]
+D.tsacasi             ATGTCGACGACACTCACCAACAAGAACGTCATTTTCGTGGCCGGTCTGGGCGGCATTGGCCTGGACACCAGCAAGGAGCTGGTCAAGCGCGACCTCAAGAACCTTGTGATCCTGGACCGCATTGACAACCCGGCGGCCATTGCCGAGCTGAAGGCAATCAATCCGAAGGTGACCGTCACCTTCTACCCCTACGATGTGACCGTGCCGATTACTGAGACCACCAAGCTGCTGAAGACCATTTTCGCCAAGGTTAAGACCGTGGACATTCTGATCAACGGAGCTGGCATCCTGGACGACCATCAGATCGAGCGCACCATCGCCGTCAACTACACGGGGCTGGTCAACACGACGACGGCCATCCTGGACTTCTGGGACAAGCGCAAGGGCGGCCCGGGCGGCATTATCTGCAACATTGGATCGGTGACGGGCTTCAATGCCATCTACCAGGTGCCCGTTTACTCCGGCACCAA [...]
+D.crassifemur         ATG---TTC---ATCGCTGGCAAGAACATCATCTTTGTCGCTGGTCTCGGCGGCATTGGACTGGAGACGAGTCGCGAGATTGTCAAGAGCGGTCCCAAGAACCTAGTGATCCTTGATCGTGCGCCGAATCCGGCTGCCATTGCTGAGCTGCAGGCGCTTAATCCCAAGGTGACCGTATCCTTTTATCTCTACGATGTGACAGTACCGCAGTCCGAAACTGTCAAGCTGCTGAAGACAATCTTCGCGAAGCTGAAGACCATCGATTTGCTCATCAATGGCGCCGGCATTCTGGACGATCATCAGATCGAGCGTACCATTGCGGTGAATTTCACTGGTACGGTGAACACCACGACCGCCATCATGGAGTTCTGGGACAAGCGCAAGGGTGGACCAGGTGGCGTTGTTGCCAACATTTGCTCGGTGACTGGATTCAATTCCATTTACCAGGTGCCTGTCTACTCTGCCTCGAA [...]
+D.montana             ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGGATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACGGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGACCAGGCGGAGTCATTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+D.buzzatii_1          ATGGCC------ATCGCTAATAAGAACATCATCTTTGTCGCTGGACTCGGTGGCATTGGACTCGACACCAGTCGGGAGATTGTCAAGAGCGGCCCTAAGAACCTGGTGATCCTTGATCGCATCGAAAACCCAGCTGCCATTGCTGAGCTGAAGGCCCTCAATCCAAATGTGACCGTCACGTTCTATACCTATGATGTGACCGTTTCGGTAGCAGAGTCCACAAAACTCCTGAAGACAATCTTCGACCAGCTGAAGACAGTGGATCTGCTCATCAATGGAGCCGGCATCCTGGATGAAGATCAAGTCGAGCGAACCATTGCGGTGAACTTTGCGGGCACAGTGAACACCACCACTGCCATAATGTCATTCTGGGACAAGCGTAAGGGCGGTCCAGGTGGTGTCATTGCGAACATTTGCTCGGTGACTGGATTCAATGCCCTCTACCAGGCACCCGTCTATTCCGCCTCAAA [...]
+D.buzzatii_2          ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGGGAAATTGTCAAGAGCGGCCCAAAGAACCTGGTGATCCTTGATCGCATTGAAAACCCAGCTGCCATTGCTGAGCTGAAGGCCCTCAACCCAAAGGTGACCGTCACTTTCTATCCCTATGATGTGACCGTTCCGGTAGCAGAGACCACAAAACTCCTGAAGACAATCTTCGACAAGCTGAAGACAGTGGATCTGCTCATCAATGGAGCTGGCATCCTAGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTTACAGGCACAGTGAACACCACCACTGCCATCATGGCATTCTGGGACAAGCGTAAGGGCGGTCCAGGTGGTGTCATTGCGAACATTTGCTCGGTGACTGGCTTCAATTCCATCTACCAGGTGCCCGTTTATTCCGCCTCTAA [...]
+D.texana              ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTAACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGTGGTCCAGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+D.lummei              ATGGCG------ATCGCTAACAAGAACATTATTTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGACCGGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+D.lacicola            ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTAAAAACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGCACTATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGTAAGGGCGGACCAGGCGGAGTCGTTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+D.borealis            ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGCGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGTTGGCAGAAACCACGAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGCCCAGGCGGAGTCGTTGCAAACATCTGCTCCGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+D.flavomontana        ATGGCG------ATCGCAAACAAGAACATCATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGAATCGACAACCCGACTGCCATTGCCGAGCTGAAGGCAATCAATCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTGCTGAAGACGATCTTTGCCCAGCTGAAGACAGTGGATCTGCTCATCAATGGCGCTGGAATTTTGGACGATCACCAGATTGAGCGTACCATTGCGGTGAATTTCACGGGTACGGTCAATACCACGACTGCCATTATGGAGTTCTGGGATAAGCGCAAGGGCGGCCCAGGCGGAGTCATTGCAAACATCTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+D.americana           ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGCATTGGACTGGACACCAGTCGGGAGATAGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATTGAGAACCCGACAGCTATTGCCGAGCTGAAGGCACTCAACCCAAAGGTGACAGTTACATTCTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTGAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGTGGCCCAGGCGGAGTTATTGCAAACATTTGCTCGGTGACTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAAA [...]
+Sc.albovittata        ATGTGT------ATCGCTGGCAAGAATATCATCTTTGTCGCTGGTCTCGGTGGCATTGGACTGGACACCAATCGCGAGATTGTCAAGAGCGGTCCCAAGAACCTAGTGATCCTTGATCGCATTGAGAATCCGGCTGCCATTGCCGAGCTGCAGGCGATTAATCCCAATGTGACCGTATCCTTTTATCCCTACGATGTTACAGTAGCGTTGGCTGAAAGTGTCAAGCTGCTGAAGACAATCTTCGCTAAGCTGAAGACAGTTGATTTGCTCGTCAATGGAGCTGGCATTCTGGACGATCATCAGATTGAGCGGACCATTGCAGTGAATTTCACTGGTACTGTGAATACCACAACTGCTATCATGGAGTTCTGGGATAAGCGCAAGGGTGGACCAGGTGGCGTTATTGCCAACATTTGCTCAGTGACAGGATTCAATTCCATTTACCAGGTGCCTGTATACTCTGCCTCAAA [...]
+D.immigrans           ATGGCA------ATCGCTAACAAGAACATTATCTTTGTCGCTGGTCTGGGCGGCATTGGTCTGGACACGAGCAAGGGAATCGTCAAAGCTGGACCCAAGAATCTGGTGATCTTGGACCGCATTGAGAACCCCGCAGCCATTGCCGAGCTGAAGGCAATCAATCCCAAGGTGACCGTTACTTTCTATCCCTACGATGTCACTGTTCCGCTGGCGGAGACCAAGAAGCTGCTCACGACCATCTTCGCCAAGCTGAAGACCGTTGATCTGCTGATCAATGGTGCAGGCATCCTGAACGATCATCAGATCGAACTCACCATCGCAATAAATTTCACCGGTCTGGTTAACACCACCACCGCTATCATGGACTTCTGGGATAAGCGTAAGGGCGGCCCAGGTGGCGCCATTGCCAACATCTGCTCTGTGACTGGATTCAATGCCATTTACCAGGTGCCCGTCTACTCAGCCTCCAA [...]
+D.mettleri            ATGGCA------ATCGCTAACAAGAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGGTTGGACACCAGTCGAGAGATTGTCAAGAGTGGACCAAAGAACCTGGTAATTCTCGATCGAGTTGAGAACCCCACTGCCATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACCATCACGTTCTATCCCTATGATGTGACCGTTTCGGTAGCAGAATCCACAAAGTTGCTCAAGACAATCTTCGACAAACTGAAGACGGTGGACCTGCTTATCAATGGCGCTGGCATCCTGGACGATTACCAGATCGAGCGTACCATTGCGGTGAACTTTGCCGGCACAGTAAACACCACCACTGCCATCATGGCATTCTGGGACAAGCGCAAGGGAGGCCCAGGTGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAACTCTATCTACCAGGTGCCCGTCTATTCTGCCTCCAA [...]
+D.arizonae_2          ATGGCA------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTTGACACCAGTCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCTGCTATTGCCGAACTGAAGGCACTCAACCCCAAGGTGACCGTTACGTTCTATCCCTATGATGTCACCGTCTCGGTAGCAGAGACTACAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTCGATCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGTAAGGGCGGCCCAGGCGGTGTCATTGCCAATATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCTGTGTACTCCGCATCCAA [...]
+D.hydei_1             ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTGGACACCAGTCGCGAGATCGTCAAGAGTGGCCCAAAGAACCTCGTTATCCTTGATCGAATTGACAACCCAGCTGCTATAGCTGAGCTGAAGGCTATCAACCCAAAGGTGACCGTCACGTTCTACCCCTATGATGTAACTGTTTCGGTGGCAGAGTCCACAAAGCTGCTCAAGGTAATCTTCGACAAGCTGAAGACAGTGGATCTGCTTATCAATGGCGCTGGCATCCTGGACGACTACCAGATCGAACGCACCATTGCAGTGAACTTTGCCGGCACAGTGAACACCACCACAGCCATCATGGCATTCTGGGACAAGCGCAAGGGCGGCCCAGGAGGTGTCATTGCCAATATCTGCTCGGTGACTGGTTTCAACGCAATCTACCAGGTGCCCGTCTATTCCGCTTCCAA [...]
+D.hydei_2             ATGGCA------ATCGCTAACAAGAATATCATCTTTGTCGCTGGACTCGGTGGCATTGGATTGGACACCAGTCGCGAGATCGTCAAGAGTGGCCCAAAGAACCTGGTTATCCTTGATCGAATTGACAACCCAGCTGCTATTGCTGAGCTGAAGGCCATCAACCCAAAGGTGACCATCACGTTCTACCCCTATGATGTAACTGTTTCGGTGGCAGAGTCCACAAAGCTGCTCAAGGTAATCTTCGACAAGCTGAAGACAGTGGATCTGCTTATCAATGGCGCTGGCATCCTGGACGACTACCAGATCGAACGCACCATTGCAGTGAACTTTGCCGGTACAGTGAACACCACCACAGCCATCATGGCATTCTGGGACAAGCGCAAGGGCGGCCCAGGAGGTGTCATTGCCAATATCTGCTCGGTGACTGGTTTCAACGCAATCTACCAGGTGCCCGTCTATTCCGCTTCCAA [...]
+D.mojavensis_1        ATGGCC------ATCGCTAACAAGAATATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAAGGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCGGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCTCTATGATGTCACCGTCTCGGTAGCCGAGAGCACAAAGCTTCTGCAGAAAATCTTTGACCAGCTTAAGACAGTCGATCTGCTCATCAATGGAGCTGGCATCCTGGATGACCACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACAGTGAACACCATCACGGCCATCATGTCCTTCTGGGACAAGCGTAAGGGCGGCCCAGGCGGTGTCATTGCGAACGTCTGTTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCGGTGTATTCCGCATCCAA [...]
+D.mojavensis_2        ATGGCA------ATCGCTAACAAGAACATCATATTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGATCGCATTGAGAACCCAGCTGCAATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTCGATCTGCTCATCAATGGGACAGGCATCCTGGACGACCACCAAATCGAGCGTACCATTGCGGTGAACTTCACAGGCACATTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCCAATATCTGCTCGGTGACTGGCTTCAATGCCATCTTACCAGTGCCTGTGTACTCGGCATCCAA [...]
+D.mulleri_1           ATGGCC------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCAAAGAACCTGGTCATCCTTGACCGCATTGAGAACCCAGCTGCTATTGCCGAGCTGAAGGCACTCAACCCAAATGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCCCGGTAGCAGAGACCACGAAGCTTTTGCAGAAAATCTTTGACCAGCTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACAGGCACGGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAA [...]
+D.mulleri_2           ATGGTT------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCAAAGAACCTGGTCATCCTTGACCGCATTGAGAACCCAGCCGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTCTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACAAAGCTGCTGAAGACCATCTTCGACAAGTTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACTGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTATCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAA [...]
+D.navojoa             ATGGCC------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGCCGCGAGATTGTCAAGAGCGGACCAAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCAGCTGCCATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACCTTCTATCCCTATGATGTGACCGTCCCGGTTGCAGAGACCACAAAGCTTTTGAAGACAATCTTCGACAAGCTGAAGACAGTCGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATTGAGCGCACCATTGCAGTGAACTTCACAGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAA [...]
+D.virilis_1           ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACAGTCACATTTTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTAAACTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGCCCGGGCGGAGTTATTGCAAACATTTGCTCGGTGTCTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAGA [...]
+D.virilis_2           ATGGCG------ATCGCTAACAAGAACATTATCTTTGTCGCTGGACTGGGTGGTATTGGACTGGACACCAGTCGGGAGATTGTCAAGAGTGGACCAAAGAACCTGGTGATCCTTGACCGTATCGAGAACCCGACCGCTATTGCCGAGCTGAAGGCAATCAACCCAAAGGTGACAGTCACATTTTATCCCTATGATGTAACTGTGCCGGTGGCAGAAACCACAAAGCTACTGAAGACGATCTTTGCCAAGCTGAAGACTGTGGATCTGCTTATCAATGGCGCTGGCATTTTGGACGATCACCAGATTGAGCGTACTATTGCGGTAAATTTTACGGGCACGGTGAATACCACAACTGCCATTATGGAATTCTGGGATAAGCGCAAGGGCGGCCCGGGCGGAGTTATTGCAAACATTTGCTCGGTGTCTGGCTTTAATGCCATCTACCAGGTGCCTGTTTACTCCGCCTCAGA [...]
+D.silvestris          ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACTTGGTGGTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCATTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATACTCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAATGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.grimshawi           ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCTGTGAATTTTACAGGTTTGGTGAACACCACAACTGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGTTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.affinidisjuncta     ATGGTT------ATCGCTAACAGTAACGTCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGGTGCTTGACCGCGTTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCGTTACATTCTATCCGTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCGGTGAATTTTACAGGTACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATTTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.nigra               ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGCGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAATTTGGTGTTGCTCGATCGCATTGACAATCCCGCTGCCATTAATGAGTTGAGAGCCCTCAATCCCAAGGTGACCGTTACATTTTATTCCTATGATGTAACCGTTCCGTTGGCCGAAACCAAAAAGCTTTTGAAGACAATCTTCGACAAGCTGAAGACTGTTGATCTGCTCATCAATGGTGCTGGCATCCTGGATGATCATCAGATTGAGCGCACCATTGCGGTGAATTTCACTGGTACAGTGAACACCACCACTGCGATCATGGATTTCTGGGACAAGCGCAAGGGCGGCCCAGGTGGCATTGTTGCCAACATCTGCTCAGTGACTGGCTTCAACTCCATCTACCAAGTGCCCGTTTACTCAGCCTCAAA [...]
+D.mimica              ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGTCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAGTGCGCTCAATCCCAAGGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACTGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATCATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGTACAGTGAACACCACTACTGCGATCATGGATTTCTGGGACAAGCGTAACGGCGGCCCCGGTGGTGTTATTGCCAACATCTGCTCAGTGACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.adiastola           ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAGTGCACTCAATCCTAAGGTGACCGTTACATTCTATCCCTATGATGTTACCGTACCGTTGGATGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATTCTGGACGACAATCAGATTGAGCGCACCATTGCGGTGAATTTTACTGGTACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.picticornis         ATGGTT------ATCGCTAACAGTAACATCATCTTCGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGCTGAAAGCCCTTAACCCGAAGGTGACCATTACATTCTATCCCTATGATGTAACAGTGCCGGTGGATGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTCCTCATCAATGGCGCTGGTATCCTGGATGATCATCAGATTGAGCGCACCATTGCGGTGAACTTTGCAGGTACAGTGAACACCACAACAGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTTGTTGCCAACATCTGCTCCGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.planitibia          ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACCTGGTGGTGCTTGATCGCGTTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGGTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.heteroneura         ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACTTGGTGGTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAGGTGACCATTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATACTCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGGTGGTGTGGTTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.differens           ATGGTT------ATCGCTAACAGTAACATCATCTTTGTGGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGCGGCCCCAAGAACCTGGTGGTGCTTGATCGCGTTGACAACCCCGCTGCAATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGGTGGCTGAAACCAAAAAGCTATTGAAGACCATTTTCGACGAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACCATTGCGGTGAATTTTACAGGCACAGTGAACACCACAACTGCGATCATGGATTTCTGGGATAAGCGTAAGGGCGGCCCAGGTGGTGTGATTGCCAATATCTGCTCAGTAACTGGCTTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+D.wheeleri            ATGGTT------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGCGAGATTGTCAAGAGCGGCCCGAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCTGCGGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGACCGTCACGTTTTATCCCTATGATGTAACCGTCTCGGTAGCAGAGACCACGAAGCTTCTGAAGACAATCTTCGACAAGCTGAAGACAGTCGACATACTCATCAATGGAGCTGGTATCCTGGACGACTACCAGATCGAGCGTACCATTGCGGTGAACTTCACGGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTATCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTACTCCGCATCCAA [...]
+D.mayaguana           ATGGTA------ATCGCTAACAAGAACATCATCTTCGTCGCTGGACTCGGTGGCATTGGATTCGACACCAGTCGGGAAATCGTCAAGAGCGGCCCAAAGAACCTGGTAATCCTTGACCGCATTGAGAACCCAGCTGCTATTGCCGAGCTGAAGGCACTCAACCCCAAGGTGATCGTTACGTTCTATCCCTATGATGTAACCGTCCCGGTAGCAGAGACCACAAAGCTTCTGAAGATAATCTTCGACAAGCTAAAGACTGTGGACCTGCTCATCAATGGAGCTGGCATCCTGGACGACTACCAGATCGAGCGTACCATTGCTGTGAACTTCACTGGCACAGTGAACACCACCACGGCCATCATGTCCTTCTGGGACAAGCGCAAGGGCGGCCCAGGCGGTGTCATTGCGAACATCTGCTCGGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTGTATTCCGCATCGAA [...]
+D.hawaiiensis         ATGGTT------ATCGCTAACAGTAACATCATCTTTGTCGCTGGTCTGGGTGGCATTGGCCTGGACACCAGTCGCGAGATTGTCAAGAGTGGCCCCAAGAACCTGGTGTTGCTTGATCGCATTGACAACCCCGCTGCCATTGCCGAGTTGAAAGCCCTTAATCCCAAAGTGACCGTTACATTCTATCCCTATGATGTAACCGTGCCGTTGGCTGAAACCAAAAAGCTATTGAAGACAATCTTCGACAAGCTGAAGACAGTTGATCTGCTCATCAATGGCGCTGGTATCCTGGACGATAATCAGATTGAGCGCACAATTGCTGTGAATTTTACAGGTTTGGTGAACACCACAACTGCGATCTTGGATTTCTGGGACAAGCGTAAGGGCGGCCCAGTTGGTGTTGTTGCCAACATCTGCTCAGTAACTGGATTCAACTCCATCTATCAGGTGCCCGTTTACTCTGCCTCAAA [...]
+Z.tuberculatus        ATGGTCTTTNNNCTGCCCAACAAGAACGTGATCTTCGTCGCCGGCCTGGGCGGCATCGGTCTGGACACCAGTCGCGAGATTGTCAAGGCTGGTCCCAAGAACCTGGTGATCCTCGATCGTGTGGAGAACCCCGCCGCCATTGCTGAGCTGCAGGCCATCAATCCCAAGGTGACTGTCACCTTCTATCCCTACGATGTCACCGTGCCACTCAGTGAGTCTGTCAAGCTGCTGAAGACCATCTTCGACAAGTTGAAGACCATCGATCTGTTGATCAACGGTGCTGGCATCCTGGACGATCATCAGATCGAACGCACCATCGCTGTGAACTTCACTGGCCTGGTGAACACCACCACCGCCATTCTGCAGTTCTGGGACAAGCGTAAGGGTGGTCCCGGTGGCGTTATTGCCAACATCTGCTCCGTGACTGGCTTCAATGCCATCTACCAGGTGCCCGTCTACTCCGCCTCGAA [...]
+;
+END;
+BEGIN MRBAYES;
+    charset 1st_pos = 1 - 771 \ 3;
+    charset 2nd_pos = 2 - 771 \ 3;
+    charset 3rd_pos = 3 - 771 \ 3;
+    partition by_codon = 3 : 1st_pos , 2nd_pos , 3rd_pos;
+    set partition = by_codon;
+    prset ratepr = variable;
+    usertree = ( ( ( ( ( ( ( ( D.persimilis , ( D.pseudoobscura1 , D.pseudoobscura2 ) ) , D.miranda ) , D.ambigua ) , ( D.subobscura , D.madeirensis ) ) , ( ( ( ( D.melanogaster , ( ( D.simulans , D.sechellia ) , D.mauritiana ) ) , ( D.teissieri , D.yakuba ) ) , D.orena ) , D.tsacasi ) ) , D.willistoni ) , D.lebanonensis ) , ( ( ( D.crassifemur , Sc.albovittata ) , ( ( ( ( ( ( D.montana , D.lacicola ) , D.borealis ) , D.flavomontana ) , ( ( ( D.texana , D.americana ) , D.lummei ) , ( D.v [...]
+END;
diff --git a/test/NTSValidOut/anolis.nex b/test/NTSValidOut/anolis.nex
new file mode 100644
index 0000000..1a99465
--- /dev/null
+++ b/test/NTSValidOut/anolis.nex
@@ -0,0 +1,47 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 30;
+    TAXLABELS Anolis_ahli Anolis_aliniger Anolis_alutaceus Anolis_angusticeps Anolis_bahorucoensis Anolis_barahonae Anolis_brevirostris Anolis_coelestinus Anolis_cristatellus Anolis_cuvieri Anolis_distichus Anolis_equestris Anolis_garmani Anolis_grahami Anolis_insolitus Anolis_krugi Anolis_lineatopus Anolis_loysiana Anolis_luteogularis Anolis_marcanoi Anolis_occultus Anolis_olssoni Anolis_ophiolepis Anolis_paternus Anolis_sagrei Anolis_strahmi Anolis_stratulus Anolis_valencienni Anolis_v [...]
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=1456;
+    FORMAT Datatype=DNA  Gap=-;
+Matrix
+Anolis_ahli              ATGAGCCCAATAATATACACAATTATACTATCAAGCCTAGCAACAGGCACTATCGTTACCATAACGAGCTACCACTGACTCCTAGCCTGAATCGGACTAGAAATAAACACTTTATCAATTATTCCAATTATTTCTACCATACACCACCCACGATCAACAGAGGCCGCCACAAAATACTTTTTAACACAAGCAGCGGCTTCTGCCATAATCTTGTTTTCAAGCATAATTAACGCCTGACAAACCGGATCATGGGATATTACTCAATTATCATCTACACCATCACACATTCTATTAACCATGGCATTAGCAATAAAACTGGGCCTAGTCCCAGTACATTTTTGACTACCAGAAGTTATTCAGGGTTCAACAATAACCACGGCACTCATTATTACCACATGACAAAAACTTGCCCCAATTTCCCTAATTTATTTATCTATTAATAACCTCTCAACAGTGGTCCTAATAAC [...]
+Anolis_aliniger          ATGAGCCCTACAGTTTATTCAATTATTTTGTCAAGCCTACCAACAGGCACAGTTATTACTATAACCAGCTACCATTGATTAATAGCCTGAGTCGGGCTAGAAATTAACACACTCGCAATTATTCCTGTTGTTTCAATACAACATCACCCACGGTCCACAGAAGCCGCCACAAAATATTTTCTAACACAAGCAGCAGCCTCCGCCTTAATTCTATTTGCTAGCACAACTAACGCCTGATCAACGGGCACATGAGATATTACCCAAATATCCTCTACCCCCTCTCATATCCTTTTAACTATCGCGCTTGCTATAAAACTAGGCCTAGCACCCACCCACTTCTGATTACCAGAAGTAGTTCAAGGTTCAACTATAACAACAGCGTTTATTATTATAACATGGCAAAAACTAGCCCCAATATCATTAATTTATTTAACCATAAATAATCTTTCCCCAACAATTCTTCTTCT [...]
+Anolis_alutaceus         ATGAACCCAACAATTATTATAATTACCCTAACCAGCCTGGCAACTGGTACAGTTATTACCATACATAGCTTCCATTGATTAATGGCCTGA?TCGGATTAGA?ATCAATACACTATCAATTATTCCAATAATTTCAACATTACACCACCCACGATCAACTGAAGCTGCTACAAAATATTTCCTCACCCAAGCAGCTGCTTCA?CTTTAATCCTTTTTTCAAGCACAATTAATGCCTGACAAACAGGATCATGAGACATTACCCAACTATCATCAACCCCCTCACACATTTTATTAACTATGGCTTTGGCCATAAAACTAGGACTCGCCCCACTTCACTTTTGATTACCAGAAGTAATTCAAGGGTCTTCCATAAACACAGCCTTAATTATTGT?ACTTGACAAAAACTAGCCCCAATATCCCTAATCTTTTTAACCATAAATAATTTATCAACAACTATTTTAATGAT [...]
+Anolis_angusticeps       ATGAGCCCCCCCATTTTTACAATTATCATCTCAAGTCTAGCAACAGGTACAATTATTACCATAACCAGCTACCATTGACTCATAGCCTGAGTTGGTCTAGAAATAAATACACTAGCAATTATTCCTATTATTTCAACAACACATCACCCACGAGCCACAGAAGCTTCCACAAAATATTTTCTTACACAAGCTGCAGCCTCTGCTCTAATTTTATTTTCTAGTATAATTAACGCATGACACACAGGATCTTGAGACATTACTCAAATATTATCTACCCAATCAAATACTATATTGACTATAGCCCTAGCTATAAAACTAGGGCTGGCCCCACTTCACTTTTGACTACCAGAAGTAATCCAAGGATCAACAATACTAACCGCCTTTATTATTACTACATGACAAAAACTAGCCCCAATATCTCTAATTTTTTTAACTATAAATAATATATCCACAACAATCCTCCTACT [...]
+Anolis_bahorucoensis     ATGAGCCCCATAATTTACTCAATTGTATTCTCAAGCCTAGC?ACAGGTACTATTATTACTATAACCAGCTACCACTGATTTATGGCCTGAATCGGACTAGAAATTAATACACTAGCAGTAATCCCCATTATTTCAACACTACACCACCCACGATCTACAGAAGCTGCTACAAAATACTTCTTAACACAAGCAGCAGCCTCCGCCACAATCCTATTTTCAAGTATAATTAATGCCTGACAAACAGGCACATGAGATATTACCCAATTATCCACAACCCCCGCCCACATCCTACTGACTATAGCACTTGCCATAAAACTAGGCCTAGTCCCAGCCCATTTCTGACTACCAGAAGTCCTCCAAGGTTCAACCATTACAACTGCCCTCATTATTACTACATGACAAAAACTCGCTCCAATATCACTAATTTTCTTAACCATTAACAACCTGTCCTCAACAGCCCTTCTATT [...]
+Anolis_barahonae         ATGAGCCCGCTAATTTATATGATTATTTTATCAAGCTTAGCAACAGGCACAATTATTACAATAACGAGTTTTCATTGAATTATAGCTTGAATTGGGTTAGAAATCAACACCTTAGCAATTATCCCAATTATTTCTATATTACACCACCCACGTTCTACTGAAGCAGCCACAAAATATTTTCTTACACAAGCAGCAGCATCCGCTATAATCCTATTTTCAAGTATAATTAATGCCTGACAAACAGGAACATGAGATATCACTCAAATAACTAATATCCAATCCAACATTCTATTAACAATAGCACTT?CCATAAAATTAGGTCTAGCACCACTACATTTCTGACTTCCAGAAGTATTACAAGGCTCAACCTTAAATACCGCCCTTATTATAATTACATGACAAAAGCTAGCCCCAATATCATTAATTTTTATAACCATTAATAACTTATCGACAACAATACTATTATT [...]
+Anolis_brevirostris      ATGAGCCCACTAATCCACACAATTATACTCTCAAGTCTAGCAACAGGCACTATTATTACTATATCTAGCCACCACTGACTAATAGCCTGAATTGGATTAGAAATTAACACACTAGCAATTATCCCCATCATTTCAACATCCCACCACCCACGATCAACAGAAGCTGCCACAAAATATTTCCTTACACAAGCAGCAGCCTCTGCCACCGTACTATTTTCTAGTATAATTAATGCCTGACAAACCGGAACATGAGACATCACTCAAATATCTTATGCACCATCCAACATACTTTTAACTATAGCACTCTCCATAAAGCTCGGACTAGCCCCGCTACACTTCTGACTTCCAGAGGTTCTTCAAGGCTCAACCCTACCCACCGCCCTCATTATTACCACATGGCAAAAACTAGCCCCTATAGCACTAATCTGCCTAACAATTAATAATCTTAACCCAGCAATCCTACTAAT [...]
+Anolis_coelestinus       ATGAGCCCACTAATTTTTTCAATCGTCCTGTCAAGCCTAGCAACAGGCACTATTATTACCATAACCAGCTATCACTGATTAATAGCTTGAATTGGTCTAGAAATAAACACACTTGCTATTATTCCAATTATCTCAATACAACATCACCCTCGATCTACAGAAGCCGCTACAAAATATTTCCTTACACAAGCAGCAGCCTCCGCTATGATTTTATTCGCCAGCACAACAAATGCTTGATACACAGGCACATGAGACATCACTCAAATTTCCGCCACCCCATCCCACATCCTCCTAACTGCCGCATTAGCCATAAAACTAGGCCTAGCCCCTATACACTTCTGATTACCAGAAGTCCTTCAAGGGTCCACCTTAAAAACAAGCTTTATTATTGTCACATGACAAAAACTAGCCCCTATATCATTAATTTATTTAACTATAAATAATCTTTCCTCAACAATTCTTCTCTC [...]
+Anolis_cristatellus      ATGAGC???ACAATCTACACAATTATTTTGT?????CTAGCAACAGGCACTATCATCACTATAACTAGCTTCCACTGACTAATGGCCTGAATCGGACTAGAGCTTAATACGCTAGCAATTATCCCGATTATTTCAACATTACACCACCCACGATCAACAGAAGCCGCAACAAAATACTTCTTAACACAAGCAGCAGCCTCTGCAATAATTATGTTTTCTAGCATAATTAATGCCTGAAACATAGGAACATGGGACATTACTCAAATATCTTATACCCCATCAAATGTTCTTCTTTTACTAGCACTGGCCCTAAAACTAGGACTAGCCCCAGCACACTTCTGACTCCCAGAGGTATTACAGGGCTCAACCTTATTTATTGCCCTCATTATTACTACGTGGCAAAAACTGGCCCCAATGTCACTTATCTACATATGTACAAATAATCTTCCATCAGTAATTTTATTAAT [...]
+Anolis_cuvieri           ATGAGCCCAACAATTCTCTCAATCATTTTATCAAGCCTAGCAGCAGGAACAATTATTACAATAACAAGCTTTCATTGATTAATAGCCTGAATTGGACTAGAAATTAATACACTAGCAATTATTCCAATTATCTCAATAATACATCACCCACGATCTACAGAAGCAGCCACAAAATATTTTCTCACACAAGCAGCAGCATCAGCTATAATCCTGTTCTCAAGCATAATTAATGCTTGACAAACAGGGACATGAGATATTACCCAAATATATACTCCTCAATCTAACATTTTATTAACTATAGCCCTTGCCATAAAAATAGGATTAGCCCCAATACACTTCTGACTACCAGAAGTACTTCAAGGTTCAACCTTAAACGCTGCTCTTATTATTACCACATGACAAAAAATCGCCCCAATGTCATTAATTTATTTAACCATTAATAATTTATCAACAACAACCTTATTAAC [...]
+Anolis_distichus         ATGAGCCCGCCAATCTACGCAATTATACTATCAAGCTTAGCAACAGGCACCATTATCACTATAACCAGTTACCATTGACTAATGGCCTGAATTGGACTAGAAATTAATACACTAGCAATTCTTCCAATTATTGCAACATCACACAACCCACGATCCACAGAAGCTGCCACAAAATACTTTTTAACACAATCAGCAGCTTCCGCCACTATCTTATTTTCTAGCATACTTAACGCCTGACAAACCGGAACATGAGACATTACTCAAATATCTTATGCGCCATCTAACCTCCTTCTCTCCATAGCACTAGCCATAAAACTAGGACTAGCCCCCCTACACTTTTGACTCCCAGAAGTACTTCAAGGCTCAACTTTATTTTCTGCCCTCATTATTGTTACATGACAAAAATTAGCCCCAATATCACTGATTTATTTAACTATTAGTAACCTTAACCCAACTATTCTACTAAT [...]
+Anolis_equestris         ATGAGCCCAACAATTTATTCAATTATCCTATCAAGCCTTGCAA?????ACAATTATTACTATAACCAGCCACCATTGACTAATAGCCTGA?TCGGATTAGAAATTAACACATTAGCAATTATCCCAATTATTTCAACATTACACCACCCACGATCCACAGAAGCCGCCACAAAATATTTCCTAACACAAGCAGCTGCTTCTGCTATAATTTTATTTTCTAGCATAACAAATGCTTGATACACAGGTACATGAGACATTACCCAAATATCAGCCAACCCCTCCCATATTATATTAACTATGGCACTTGCCATAAAACTAGGCCTAGCACCTCTACACTTCTGACTACCAGAAGTACTCCAAGGCTCAACCATAAAAACCGCATTCATCATTACAACATGACAAAAACTTGCCCCAATATCATTAATCTACCTCATTATTAATAACTTATCCCCCACACTTCTCCTCCT [...]
+Anolis_garmani           ATGAGCCCAACCATCCTTATAATTATTATCTCAAGCCTGGCAACAGGTACCATTATTACCATAACAAGCCACCACTGACTCATAGCCTGAATCGGACTAGAAATAAATACCTTAGCTATTATTCCAATCATTACTACTATACACAACCCACGATCAACAGAAGCCGCCACAAAATACTTCTTAACACAAGCAGCAGCCTCTGCCATAATCTTATTCTCAAGCATAATTAATGCCTGACAAATAGGATCATGAAATATTATTAACTTAACATACGAACCCGCGCACATCCTATTAATTATGGCCCTAGCAATAAAACTTGGCCTCGCACCCATACACTTTTGACTGCCAGAAGTTCTTCAAGGCTCAACCTTAACCACTGCACTAATTATTACCACTTGACAAAAACTCGCCCCAATATCTTTAATTTATATAACCCTAAACAATCTATCGACCACAATTTTAATTTT [...]
+Anolis_grahami           ATGAGCCCATCAATCCTTATAATTATTATTTCAAGCCTGGCAACAGGCACTATTATTACTATAACAAGCCACCACTGACTTATAGCCTGAGTCGGACTAGAAATAAATACTTTGGCAATTATCCCAATTATTTCTACTACACACAGCCCGCGATCCACAGAAGCCGCTACAAAATATTTTTTAACACAAGCAGCTGCCTCTACCATAATCTTATTTTCAAGCATAACCAACGCCTGACAAACAGGCACATGAGACATTATTAACTTAACATATGAGCCCGCGCACATCCTGCTAACCCTGGCCCTAGCAATAAAACTAGGCCTTGCACCTATACACTTCTGA?TACCAGAAGTATTACAAGGCTCAACCTTAACCACTGCACTAATTATTACCACTTGACAAAAACTAGCCCCAATATCCTTAATTTATATGACCCTAAACAACCTGTCAACCACAACTTTAATCTT [...]
+Anolis_insolitus         ATGAACCCAACTATTCTTACATTAATTTTATCAAGCTTAGCAACAGGTACAATCCTTACAATAATCAGCTTTCACTGACTACTCGCATGAATTGGTCTAGAGATTAATACCCTAGCAATTATTCCTATTATCTCAGCACCTCACCACCCCCGACCCACAGAAGCCTCCACAAAATATTTCCTTACACAAGCAGCTGCTTCTGCTACAATCTTATTTTCAAGCATAATTAATGCTTGACTAACAGGCACATGAAACATTACCCAAATATCCTCTACTCCCGCTAATATTCTTCTAACCCTAGCACTAGCAATAAAACTAGGACTTGCCCCCACACACTTCTGACTACCAGAAGTGCTTCAAGGCTCAACTATAAACACAGCCCTCATTATTCATACATGACAAAAACTTGCCCCAATGTCACTGATTTACTTAACAGTAAATAACTTATCCCCTACAATTCTATTATC [...]
+Anolis_krugi             ATGAGCCCTGCAATTTACACAATTATATTATCAAGCTTGGCAACAGGCACTATCATCACTATAACAAGCTTCCACTGACTAATAGCCTGAGTTGGACTAGAACTTAATACATTAGCAATTATCCCAATTATTTCAACATTACACCACCCCCGGGCCACAGAAGCCTCAACAAAGTATTTCCTCACTCAAGCAGCAGCCTCTGCCATAATTTTATTTTCTAGCATAATTAATGCCTGACACACGGGAACATGGGACATTACTCAAATATCTTACACCCCCTCCAACATCATTTTAACAATAGCACTAGCCATAAAGCTAGGACTTGCCCCAATGCACTTTTGACTTCCAGAAGTCCTACAAAACTCAACCCTTATTACTGCTTTTATTATTTCTACATGACAAAAACTTGCCCCAATATCACTAGTCTACTTGACTATTAATAACCTTCCACCAATAATTCTGCTTAC [...]
+Anolis_lineatopus        ATGAGCCCTGCTATCTTTTCAATTGTCATATCCAGCCTAGCAACAGGCACTATTATTACCATAACAAGCCACCACTGACTATTAGCCTGAATAGGGTTAGAAATAAATACCCTAGCAATTATTCCAATTATTTCTATTACCCACAACCCCCGAGCCACAGAAGCCGCCACAAAGTACTTCTTAACACAAGCAGCAGCCTCAGCCATAGTTTTATTTGCAAGCATAACTAATGCTTGACAAACAGGAACATGAGATATTACTAGCCTATCATATATGCCCTCACATATTTTATTAACTATAGCATTAGCTATAAAACTAGGGCTTGCCCCAATGCACTTCTGACTACCAGAAGTGCTACAAGGAACAGCCCTACCAACTTCACTTATTATTACTACTTGACAAAAACTTGCCCCAATGTCCCTAATTTATATAACTATTAATAGTTTATCAACCATAATTCTAAT?TC [...]
+Anolis_loysiana          ATGAACCCAGTCGTTATT???ATTCTTCTATCAAGCCTAGCAACTGGTACTATTATTACTATAACTAGCTATCACTGATTAATAGCCTGAGTTGGACTAGAAATAAACACATTAGCAATTATTCCAATCATTTCAACAACTCACCACCCACGAGCCACAGAAGCAGCCACAAAATACTTCTTAACCCAAGCTGCAGCCTCCGCCCTAATCTTATTTTCAAGTACAATTAATGCTTGATACTCAGGCTCATGAAATATTACCCAAATACTAACCTTCCCATCACACATTCTCTTAGCCATAGCACTGGCCATAAAATTAGGCCTAGCCCCACTTCACTTCTGACTACCAGAAGTTATTCAAGGATCAACCATAATTACTGCATTT?TTATTACCACATGACAAAAACTAGCCCCTATGTCTCTTATTTTCATAACCTCAAACAATATGCCCACAACAATCTTTCTGCT [...]
+Anolis_luteogularis      ATGAGTCCAACAATTTATTCAATTATTCTATCAAGCCTTGCAACAGGTACAATTATTACTATAACCAGCTACCATTGACTAATAGCCTGAGTCGGATTAGAAATTAACACATTAGCAATTATCCCAATTATTTCAACATTACACCATCCACGATCCACAGAAGCAGCCACAAAATACTTCCTAACACAAGCAGCTGCTTCTGCTATAATTTTATTTTCTAGCATAACAAATGCTTGATACACAGGTACATGAGACATTACCCAAATATCAGCTAACCCCTCCCATATTATATTAACCATAGCGCTTGCCATAAAACTAGGCCTAGCACCTCTACACTTCTGACTACCAGAAGTACTCCAAGGCCTAACCATAAAAACCGCATTCATCATTACAACATGACAAAAACTTGCCCCAATATCATTAATTTACCTCATTATTAATAACCTATCACCTATACTTCTCCTCCT [...]
+Anolis_marcanoi          ATGAGCCCAACAATTTTTTCAATTATGCTATCGAGTCTAGCAACAGGCACCATTATTACTATAACAAGCTTTCACTGACTAATGGCCTGAGTCGGCTTAGAAATTAATACGCTAGCTGCTATTCCAATTATTTCAATACAACACCACCCTCGATCAACAGAAGCAGCCACAAAATACTTTTTAACACAAGCAACTGCATCCTCCTTAATTTTATTTTCAAGTATGATTAATGCTTGGCATACAGGAACATGAGACATTACTCAAATTTCAACTACCCAATCATGCACCCTTCTTACAATAGCAATCTCAATAAAGCTAGGCTTAGCCCCACTACACTTCTGACTACCAGAGGTTCTCCAAGGTTCAACAATATTTACTGCTTTAATTATTATAACATGACAGAAACTAGCCCCCATATCCCTACTTTTCCTCACTATAAACAACCTATCCACATCAATACTCTTAAC [...]
+Anolis_occultus          ATGAGCCCCAATAATCTACTTAATAGTTTAATTAGCTTATTTATA???ACAACACTAGTAACCACTAGCCACCACTGATTATTAGCGTGAGTTGGCTTGGAAATTAACACACTTGCAGCTATTCCACTTATCTCAACAAAACATCACCCCCGAGCTACAGAATCAGCCACAAAATACTTTTTAATTCAAGCAGCAGCCTCAGCTACAATCTTATTTTCAAGTACCATTAATGCTTGACACACAGGCTCATGAGACATTACCCAAATAACCACAAACCCATCCAATATTTTACTAACTATAGCCCTTGCCATAAAACTAGGCCTAGCCCCAACACACTTCTGACTCCCAGAAGTACTTCAAGGGTCAACTATAGACACTGCCCTAATTATTACAACATGACAAAAAATTGCCCCAATAACCCTAATTTACCTCACCATAAACAACCTATACCCAAGCATTCTAATAAC [...]
+Anolis_olssoni           ATGAACCCCACCATCTCCATAAATTATCTATCAAGCCTAGCAACAGGAACAATTATTACTATGACCAGCTTTCATTGATTAATAGCATGAATTGGATTAGAAGTCAACACACTAGCAATTATTCCAATCATCTCAGCCCCTCACCACCCACGATCAACAGAAGCTGCAACAAAATACTTTCTCACACAAGCAGCTGCCTCCGCTATAATTCTATTTGCCAGTATAATTAACGCCTGACAAACAGGCACATGAGACATTACTCAACTGTCAACCACCCCTGCCCACACCCTCCTAACTATAGCACTAGCCATAAAACTAGGACTTGCCCCACTTCACTTCTGATTACCAGAAGTTATTCAAGGTGCCACCCTTCCCACTGCTTTCATCATTGTAACATGGCAAAAACTTGCTCCTATATCACTTATTTTTTTAACCATAAACAACCTAAACCCAACAATTTTACTTCT [...]
+Anolis_ophiolepis        ATGAGCCCAACAATCTTTATAATTATTTTATCAAGTCTTGCAACTGGTACAATTATTACTATAACTAGTTATCACTGACTATTAGCCTGAATCGGCCTAGAAATTAATACCTTATCAATTATCCCACTTATTTCAACAACCCACCATCCACGAGCCACAGAAGCCGCTACCAAGTATTTTCTTACACAAGCAGCAGCTTCGGCCATAATTTTGTTTTCTAGTATAACTAATGCATGAGAGACAGGCACATGAGATATTACCCAGCTATCATCAACACCATCACACATCTTTCTTACAATAGCATTAGCAATAAAACTAGGTCTAGTCCCAGTACACTTTTGATTACCAGAAGTCCTACAAGGGTCAACCCTAACAACTGCACTTATTATTACTACATGACAAAAACTTGCACCAATATCTTTAGTCTACTTAACCATTAATTCCCTTTCAACAACAGTTTTATTATT [...]
+Anolis_paternus          ATGAGCCCATTTATTTTTACAATTATTTTTTCAAGCTTAGCAACAGGCACAATTATTACTATAACCAGCTACCACTGACTTATAGCCTGAGTTGGATTAGAAATAAACACACTAGCAATTATTCCCATTATCTCAACAACACATCACCCACGAGCCACAGAAGCTTCCACAAAATATTTTCTTACACAAGCTGCAGCCTCTGCCTTAATTTTATTTTCTAGTATAACCAATGCATGACATACGGGATCTTGAGACATTACTCAAATATTATTTACTCCATCAAACACCATGCTAACCATAGCCCTAGCCATAAAACTAGGGTTAGCTCCACTTCACTTCTGGCTACCAGAAGTAATTCAAGGATCAACAACACTAACCGCCTTTATTATTACTACATGACAAAAACTAGCCCCAATATCTCTAATTTTTTTAACTATAAATAGTATGTCCACAACAATTCTTCTACT [...]
+Anolis_sagrei            ATGAGCCCAACAATCTTTATAATTATCATACTAAGTCTTGCAACTGGTACAATTATTACTACTACTAGCCACCACTGACTATTAGCCTGAATCGGCCTAGAAATTAATACCCTCTCAATTATTCCAATTATTTCAATAACCCACCACCCACGATCCACAGAAGCCGCTACCAAGTACTTTCTGACACAAGCAGCAGCCTCCGCCCTAATTTTATTTTCCAGTATAACTAATGCATGAGAAACAGGTACATGAGACATTACACAACTCTCATCAACACCATCACACATCTTATTAACAGTAGCACTAGCAATAAAACTAGGCCTCGTACCAATACACTTTTGACTGCCAGAAGTACTACAAGGGTCAAGCCTAATAACTGCACTTATTATTACTACATGACAAAAAATCGCACCTATAACTTTAATTTATCTAACAATTAACTCCCTCTCAACAACAATTCTGTTATT [...]
+Anolis_strahmi           ATGAGC???????????????????????????????????????????????????ACTATAACAAGCTACCACTGACTCATAGCCTGAATTGGACTAGAAATTAACACCTTAGCCATTATTCCAATTATTTCTATACAACACAACCCACGATCAACGGAAGCCGCAACAAAATACTTCCTAACTCAAGCAGCTGCATCCTCCCTAATTTTATTCGCAAGCCTATTTAACGCCTGACAAGTAGGCACATGAGATATTACACAACTATCAACTACACAAGCACACATTCTTTTGACTATGGCCCTATCAATAAAACTAGGCCTAGCCCCACTACACTTTTGATTACCAGAAGTAATTCAAGGATCTACTATATTTACTGCCTTAATTATTACAACATGACAAAAACTAGCCCCAATATCTCTTATTTTCCTCACCGCAAACAACTTATCAACGACAATTCTTTTAAC [...]
+Anolis_stratulus         ATGAGCCCTATAATTTACACAATCATTTTGTCAAGCCTAGCAACAGGGACAATTATTACCATAACCAGCTACCACTGATTAATAGCTTGAATAGGCCTAGAACTTAATACTCTAGCAATTATTCCATTATCTCATACAACACACAACCCACGATCTACAGAAGCCGCAACAAAATACTTCTTAACACAAGCAGCAGCATCTGCTATAATCTTGTTTTCCAGCATAACCAACGCCTGCTTTACGGGCATATGAGACATTACTCAAATATCTTATTTACCATCTAATATTCTTCTAACCATGGCACTAGCCATAAAACTCGGCCTAGCACCAGTGCACTTCTGATTTCCAGAAGTCTTACAAGGCTCAACCCTACTTACCGCTTTTATTATTTCAACATGACAAAAACTGGCCCCAATATCACTAATTTTTTTGACAATAAGCAATCTTCCACCTATAATTTTATTAAC [...]
+Anolis_valencienni       ????????????????????????????????????????????????????????????ATAACAAGTTATCATTGACTTATGGCCTGAATTGGACTAGAAATAAACACATTAGCAATTATTCCAATTA?ATTTACTATACACAACCCACGAGCCACAGAAGCTGCCACAAAGTACTTCCTAACACAAGCATCAGCATCAGCCATAATTTTATTTTCAAGCACAATTAACGCCTGACAAACAGGGACCTGAGACATTACTAACCTCTCATCCGAACCAGCACACATTTTATTAACCATTGCACTAGCAATAAAACTAGGCCTAGCCCCAATACACTTTTGACTACCAGAAGTACTACAAGGGTCAACCATAACCACAGCACTAGTTATCTCTACTTGACAAAAACTGGCCCCAATAGCCCTAATTTATCTGAACATTAATAATCTATCAACAGCTGTCCTAATCTT [...]
+Anolis_vanidicus         ATGAGCCCAACAATTTATACAACTATTCTAACCAGTCTTGCCACCGGAACAATTATTACAATAACCAGCCACCACTGATTAATAGCCTGA?TCGGATTAGAAAT?AATACATTAGCAATAATCCCAACTATCTCAACAATGCACCACCCTCGATCAACTGAAGCTGCCACAAAATACTTCTTAACTCAGGCAGCTGCCTCAGCCTTAATTCTCTTTTCTAGTATAACTAACGCCTGACAAACAGGCTCCTGAGATATTACCCATCTATCATCAACCCCAGCACATATTTTATTAACCATGGCCCTAGCAATAAAATTAGGCCTGGCCCCATTTCACTTTTGATTACCAGAAGTCCTACAAGGATCTGCTATAAATACTGCACTAATCATTACTACTTGACAAAAGCTAGCTCCAATATCTCTAATTTTCTTGACCGTAAATAACCTATCTACAACAATTCTTTTAAC [...]
+Diplolaemus_darwinii     ATGAGCCCAACTACAATAATAATTATTACATCTAGCCTAGCCACGGA?ACAATCATCACCGCATCAAGCTACCACTGACTACTGGCCTGAGTAGGCCTAGAACTAAATACACTAGCAATTCTTCCAATAATTTCAAAATATCACCACCCACGAGCAACAGAAGCTGCAACAAAATATTTCCTAACACAAGCAGCAGCCTCCGCCATAATCATATTTTCAAGCACACTAAACGCCTGACAAACAGGCACATGAAACATCACACAACCAAACAACACAACATCAAGCATCTTACTAACAGTCGCACTAGCTATAAAACTAGGACTTGTGCCAATACACTTCTGACTACCAGAAGTATTACAAGGCTCCTCCATAAAAACAGCCCTCATTATTAGTACATGACAAAACGTAGCCCCAATAGCCCTTATTTTCCTGACATCCAACACACTATCAACCACAATTCTATTATT [...]
+;
+END;
+BEGIN MRBAYES;
+    lset nst = 6 rates = invgamma;
+END;
diff --git a/test/NTSValidOut/associates.nex b/test/NTSValidOut/associates.nex
new file mode 100644
index 0000000..76be3b3
--- /dev/null
+++ b/test/NTSValidOut/associates.nex
@@ -0,0 +1,19 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Taxa;
+    DIMENSIONS NTax = 3;
+    TAXLABELS taxon_1 'taxon '' & 2' taxon_3;
+END;
+BEGIN TAXA;
+    TITLE Taxa2;
+    DIMENSIONS NTax = 3;
+    TAXLABELS t1 t2 t3;
+END;
+BEGIN TAXAASSOCIATION;
+    TITLE rename;
+    TAXA Taxa , Taxa2;
+    ASSOCIATES
+        taxon_1 / t1 ,
+        'taxon '' & 2' / t1 ,
+        taxon_3 / t3 ;
+END;
diff --git a/test/NTSValidOut/avian_ovomucoids.nex b/test/NTSValidOut/avian_ovomucoids.nex
new file mode 100644
index 0000000..edd7d3f
--- /dev/null
+++ b/test/NTSValidOut/avian_ovomucoids.nex
@@ -0,0 +1,106 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 89;
+    TAXLABELS Struthio_camelus Rhea_americana Pterocnemia_pennata Casuarius_casuarius Dromaius_novaehollandiae Nothoprocta_cinerascens Eudromia_elegans Pygoscelis_adeliae_f Pygoscelis_adeliae_y Spheniscus_humboldti Phalacrocorax_sulcirostris Anhinga_novaehollandeae Nycticorax_nycticorax Chauna_chavaria Anseranas_semipalmata Dendrocygna_arcuata Dendrocygna_autumnalis Dendrocygna_eytoni_d Dendrocygna_eytoni_e Dendrocygna_viduata Coscoroba_coscoroba Cygnus_atratus Goose Anser_indicus Branta [...]
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=88;
+    FORMAT Datatype=Protein  Gap=-  MatchChar=.;
+Matrix
+Struthio_camelus                 VKYPNTNEEGKEVVLPKILSPIGSDGVYSNELANIEYTNVSK??????FAT--VDDYKPVPLDYMLDSKTSNKNNVVESSGTLRHFGK
+Rhea_americana                   VKYPNTNEEGKEVLLPEILNPVGTDGVYSNELANIEYTNV?KD?????FAT--VDDHKPVSLEYMLDSKTSNKDNVVESNGTLSHFGK
+Pterocnemia_pennata              VKYPNTNEEGKEVLLPEILNPVGADGVYSNELANIEYTNVSKDHD?EVFAT--VDDHKPVSLEYMLDSKTSNKDNVVESNGTLSHFGK
+Casuarius_casuarius              VKYPNTNEDGKEVLLPKILNPIGSDGVYSDDLANIEYANVSKDHDKEVFAT--VDEYKPVSPEYMLDSKTNNKDSVVESNGTLGHFGK
+Dromaius_novaehollandiae         VKYPNTNEDGKEVLLPKILNPIGSDGVYSNDLANIEYANV??D?????FAT--VDDYKPVSLEYMLDSKTNNKDNVVESNGTLGHFGK
+Nothoprocta_cinerascens          VKYPNANDEGKEVPLPKTPSPIASNAVFGSELANVEYTNISKDHDK?????T-VDGYKPATLEYFLDNQTANKANVVEKNVTLRHLGK
+Eudromia_elegans                 VRYPNTNDEGKEVPLPKTPSPVGANGVYSSELANVEYTNI?K?????????S-IDGYKPATLEFFLDNQTSNKANAVEKNVTLNHIGE
+Pygoscelis_adeliae_f             VTFPNTNEEGKEVLVTKILSPIGTDGVYSNELANIEYTNVSKDHDKEVIAT--VDDYKPVSLEYMLDSKTSNKNNVVDSNGTLSHFGK
+Pygoscelis_adeliae_y             VTYPNTNEEGKEVLVTKILSPIGTDGVYSNELANIEYTNVSKDHDKEVIAT--VDDYKPVSLEYMLDSKTSNKNNVVDSNGTLSHFGK
+Spheniscus_humboldti             VTYSNTNEEGKEVLITKILSPIGTDGVYSNELANIEYTNVSKD?DKEVIAT--IDDYKPVSLEYMLDSKTSNKNNVVDSNGILSHFGK
+Phalacrocorax_sulcirostris       VSYSKTNEEGKEALVTKILSPIGTDGVYSNELANIEYTKISKDHDKEVIAT--VDDYKPVSLEYMLDSKTSNKNNVADSNGTLSHFGK
+Anhinga_novaehollandeae          VLYSNTNEEGKEVLVTKILSPIGTDGVYSNELANIEYTNVTKDHDKEVIAS--VDDYKPVSLEYMLDSKTSNKNNVVDSNGTLSHFGK
+Nycticorax_nycticorax            VTYSNANEEGREVLVTKILSPIGADGVYSNELANMEYTNISKDHDGEVIVT--VDDYKPVSPENMVDSKTSNKDNVADSNGTLSHFGK
+Chauna_chavaria                  VRYPNTNEEGKEVLLTKTLSPIGTDGVYSNELANIEYTNVSKDRDKEAVAT--VDDYKPATLEYMLDNQTSNKSNVVDSNGTLSHFGK
+Anseranas_semipalmata            VRYPNSNEEGKEVLLTKDLSPIGSDGVYSNELANIEYANVSKDHDKEAVAT--VDEYKPATLEYMLDNQTSNKNNVVDSNGTLSHFGK
+Dendrocygna_arcuata              VRFPNTNEEGKEVLLTKELSPVGSDGVYSNELANIEYTNISKD?DKEAVAT--VDDYKPATLEYMLDNKTGNKNNVVDSNGTLSHFGK
+Dendrocygna_autumnalis           VRFPNTNEEGKEVLLTKDLSPIGSDGVYSNELANIEYTNISKDHDKEAVAT--VDDYKPATLEYMLDNKTGNKNNVVDSNGTLSHFGK
+Dendrocygna_eytoni_d             VRFPNTNEEGKEVLLTKDVIPVGSDGVYSNELANLEYTNISKDHDKEAVAT--VDDYRPDTLEYMLDNKTGNKNNVVDSNGTLSHFGK
+Dendrocygna_eytoni_e             VRFPNTNEEGKEVLLTKDVIPVGSDGVYSNELANLEYTNISKDHDKEAVAT--VDEYRPDTLEYMLDNKTGNKNNVVDSNGTLSHFGK
+Dendrocygna_viduata              VRFSNTNEEGKEVLLTKELSPVGSDGVYSNELANIEYTNISKD?D?EAVAT--VDDYKPATLEYMLDNKTGNRNNVVDSNGTLSHFGK
+Coscoroba_coscoroba              VKFPNTNEEGKEVLLTKDLIPIGTDGVYSNELANIEYTNISKDHDKEAVAT--VDGYKPATMEYMLDNKTGNKNNVVDSNGTLSHFGK
+Cygnus_atratus                   VRFPNTNEEGKEVLLTKDLSPIGTDGVYSNELANIEYTNISKDHDKEAVAT--VDDYKPATMEYMLDNKTGNKNNVVDSNGTLSHFGK
+Goose                            VRFPNTNEEGKEVLLTKDLSPIGTDGVYSNELANIEYTNISKDHDKEAVAT--VDDYKPATVEYMLDNKTDNKNNVVDSNGTLSHFGK
+Anser_indicus                    VRFPNTNEEGKEVLLTKDLAPIGTDGVYSNELANIEYTNISKDHDKEAVAT--VDDYKPATVEYMLDNKTDNKNNVVDSNGTLSHFGK
+Branta_canadensis                VRFPNTNEEGREVLLTKDLSPIGTDGVYSNELANIEYTNISKDHD???VAT--VDDYKPATVEYMLDNKTGNKNNVVDSNGTLSHFGK
+Cereopsis_novaehollandiae        VKFPNTNEEGKEVLLPKDVIPTGTDGVYSNELANIEYTNISKD?D??AVAT--VDDYKPARMEYMLDNKTGNKNNVVDSNGTLSHFGK
+Chloephaga_picta                 VRFPNTNEEGKEVLLTKELSPIGTDGVYSNELANIEYTNISKD??KEAVAT--VDGYKPATMEYMLDNKTGNKNNVVDSNGTLSHFGE
+Duck                             VRFPNTNEEGKEVLLTKELSPVGTDGVYSNELANIEYTNISKDHDKEAVAT--VDGYKPATMEYMLDNKTGNKNNVVDSNGTLSHFGE
+Anas_platyrhynchos               VRFPNTNEEGKDVLLTKELSPVGTDGVYSNELANIEYTNISKDHDKEAVAT--VDGYKPATMEYMLDNKTGNKNNVVDSNGTLSHFGE
+Megapodius_freycinet             VRYPNTNEEGKEVLVTQDV?PIGTDGVY?NELAGIEY??I????????LVT--VDDYKPSTLEDKLDNQTSNKSNVVDSNGTLSHFGK
+Leipoa_ocellata                  IRHPNTNEEGKEVLVTEDSSPIGTDGVYSNELANIEYTNISKE?DK??VVT--VDGYTHATLELKLDNQTSNKGNVAQSNGTLSHFGK
+Ortalis_vetula                   VKYPNTNEEGKDVLAPEDPNLIGSDGVYT-ELANIEY???????????FAPN-VDDHKPALQEQKIDNKTDNKSNVVDSNGTLSHFGK
+Penelope_jacquacu                VKYPNTNEEGKDVLAPEDPSPIGSDGVYT-ELANIEYTNISKERDKEAFAPN-VDDHKPALQEQKLDNKTDNKSNVVDSNGTLSHFGK
+Penelope_superciliaris           VKYPNTNEEGKDVLVAEDPSPIGSDGVYSNELANIEYTNISKE?DKEAFAPN-VDDHKPALQEQKLDNKTDNKSNVVDSNGTLSHFGK
+Bonasa_umbellus                  VRFPNTNEEGKVVLVPEDPRPIGTDAVYSNEMANIEYTNISKEHD???LAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGNLSHFGT
+Tympanuchus_cupido               VRFPNTNEEGKDVLVTEDLHPIGTDGVYSNELANIEYTNISKEHD???LAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLSHFGK
+Oreortyx_pictus                  VRFPNTNEEGKDVLATKELHPIGTDGVYSNELSNIEYTNISKEHDTEAFAAS-VDEYKPATLEYRLDSKTANKNNVVESNGTLSHFGK
+Callipepla_squamata_n            VRFPNTNEEGKDVLATKELHPIGTDGVYSNELYNIEYTNISKEHD??AFAAS-VDEYKPDTLEYRLDNKTANKNNVVESNGTLSHFGK
+Callipepla_squamata_s            VRFPNTNEEGKDVLATKELHPIGTDGVYSNELYNIEYTNISKEHD??AFAAS-VDEYKPDTLEYRLDNKTASKNNVVESNGTLSHFGK
+Lophortyx_californicus           VRFPNTNEEGKDVLVTKELQPIGTDGVYSNELYNIEYTNISKEHD?EAFAAS-VDEYKPATLEYRLDNKTANKNNVVESNGTLSHFGK
+Colinus_virginianus              VRFPNTNEEGKDVLATEELHPIGTDGVYMSEMFNIEYTNTSKEHDTEAFAAS-VDEYKPAMSEYRLDNKTVNKNNVVESNGTLSHFGK
+Cyrtonyx_montezumae_l            VRFPNTNEEGKDVLVTEEVSPIGTDGVYSNELSNIAY?NIS?E?D???FAAS-VDEYKPATLEYVIDNKTGNKNNVVESNGTLSHFGK
+Cyrtonyx_montezumae_s            VRFPNTNEEGKDVLVTEEVSPIGTDGVYSNELSNIAY?NIS?E?D???FAAS-VDEYKPATSEYVIDNKTGNKNNVVESNGTLSHFGK
+Alectoris_chukar                 ARFPNANEEGKDVVVTEDLRPIGTDGVYT-ELANIEYTNISKEHDGETLAA--VDEYKPATLEYRLDSKTGNKNNVVESNGTLSHFGK
+Alectoris_rufa                   ARFPNANEEGKDVVVTEDLHPIGTDGVYT-ELANIEYTNISKEHD???LAA--VDEYKPATLEYRLDSKTGNKNNVVESNGTLSHFGK
+Francolinus_afer                 VRFPNANEEGRDVVVSENLRPIGTHGVYSNELASMEYTNISKEHDREAPAAS-VDEYKPATMEYRVDNITGNKNNVVKSNGTLSHFGK
+Francolinus_erckelii             VRFPNANEEGKDVAVSENLRPIGTDGVN-NELANMEYTNI??EHD?EAPAAS-VDEYKPATMEYRVDNITGNKNNVVKSNGTLSHKGK
+Francolinus_coqui_v              VRFPNANEEGRDVVVSENLRPIGTDGVYSNELASMNYTNISKE?D?EA???S-VDEYKPGTMEYRVDNITGNKNNVVKSNGTLSHFGK
+Francolinus_coqui_a              VRFPNANEEGRDVAVSENLRPIGTDGVYSNELASMNYTNISKE?D?EA???S-VDEYKPGTMEYRVDNITGNKNNVVKSNGTLSHFGK
+Francolinus_francolinus_a        ARFPNTNEEGKVVLDSKDLIPIGTDGLHDSELSNIEHTKIKKEHDRE????S-VDGYKPETAEETLDNKTRNKNNVVESNGTLRHFGK
+Francolinus_francolinus_v        VRFPNTNEEGKVVLDSKDLIPIGTDGLHDSELSNIEHTKIKKEHDRE????S-VDGYKPETAEETLDNKTRNKNNVVESNGTLRHFGK
+Francolinus_pondicerianus        ARFSNANEEGKDVLVIDDPRPMGTDGVYDSELFNMEYTNISKEHD???LPAS-VDEYKPDTTEERLDNKTGNKNNVVESNGTLSHFGK
+Perdix_perdix                    VRFPNTNEEGKDVLVTEDLQPIGTDGVYSNELANIEYTNISKEHT???LAAS-VDEYKPATMEYRLDNKTGNKDNVVESNGTLNHFGK
+Coturnix_delegorguei             VRFPNTNEEGKDEVVPDELRFIGTDGVYNHEMFNKEYTNISKEQDGET???S-VDEYKPAPKDYRVDNKTGNKNNVVESNGTLNRFGK
+Coturnix_coturnix_japonica_1     VRFPNTNEEGKDEVVPDELRLIGTDGVYNHEMFNKEYTNISKEQDGETLAAS-VDEYKPAPKDYRVDNKTSNKNNVVESNGTLNHFGK
+Coturnix_coturnix_japonica_2     VRFPNTNEEGKDEVVPDELRLIGTDGVYNHEMFNKEYTNISKEQDGETLAAS-VDEYKPAPKDYRVDNKTGNKNNVVESNGTLNHFGK
+Arborophilia_torqueola           VRFPNSNEEGKVVVVKEDPRPIGTDGVYSNELAHIET??I?K?????????S-VDDYMPATMEYRVDNKTGNKNNVVESNGTLSHFGK
+Bambusicola_thoracica            ARFPNANEEGKVVLDTQELRPIGTDGVYSNEMSNIEYTNISIK?DKE?LAAS-VDEYKPETAEERIDNKTGNKNNVVESNGTLRNFGK
+Tragopan_satyra                  VRFPNTNEEGKDVLVTEDLHPIGTDGVYSNELANIEYTNISKGHDREALAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLSHFGK
+Tragopan_temmincki               VRFPNTNEEGKDVLVTEDLRPIGTDGVYSNELANIEYTNISKGHD???LAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLSHFGK
+Lophophorus_impejanus            VRFPNANEEGKDVLVTEDLRPIGTDGVYSNELANIEYTNISKEHDREALAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLSHFGK
+Crossoptilon_auritum             VRFPNTNEEGKDVLVAEDLRPIGTDGVYSNELANIEYTNISKERDGEALAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLSHFGK
+Lophura_edwardsi                 VRFPNTNEEGKDVLVAEDLRPIGTDGVYSNEMANIEYTNISKERDGEALAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLSHFGK
+Lophura_ignita                   VRFPNTNEEGKDVLVGEDIRPIGTDGVYSNEMANIEYTNNSKERDGEALAAS-VDEYKPATMEYRLDNKSDNKNNVVESNGTLSHFGK
+Gallus_gallus                    ARFPNADKEGKDVLVNKDLRPIGTDGVYTNDLASIEFTNISKEHDKETLAAS-VDEYKPDTAEDRLDNKTGNKNNVVESNGTLSHFGK
+Grey_jungle_fowl                 ARFPNADKEGKDVLVNKDLRPIGTDGVYTNDLASIEFTNISKEHDKETLAAS-VDEYKPDTVEDRLDNKTGNKNNVVESNGTLSHFGK
+Phasianus_colchicus              VRFPNTNEEGKEVLVAEDLRPVGTDGVYSSELANIEYTNISKEHEGEALAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLNRFGQ
+Syrmaticus_ellioti               VRFPNKNEEGKDVLVAEDLHPIGTDGVYSNELANIEYTNISKER?G??LAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLSHFGK
+Syrmaticus_reevesii              VRFPNKNEEGKEVLVAEDLHPIGTDGVYSSELANIEYTNISKERNGEALAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLSRFGE
+Chrysolophus_amherstiae          VRFLNTNEESKD-LVAEDLHPIGTDGVYSNELANIEYTNISKEHDG?ALAAS-VDEYKPATMEYRLDNKTGNKNNVVESNGTLNHFGK
+Polyplectron_bicalcaratum        VRFPNTNKEGKDVLAPEEVRPIGTDGVYSDESANRDYTNISKEHDR?????S-VDEYQPTTTEHRVNNETGNKNNVVKSNGTVSHFGK
+Argusianus_argus_argus           VRFPNTNEEGKDVLVSEDRHPIGTDGVYSHELTNIEYTNISKEHD?EALAA--VDEHKPATLEDRLDNKISNKDNVLESNGTLSHFGK
+Pavo_cristatus                   VRFPNANEEGKDVLVSEDLHPIGTDGVYSHELANIEYTNISKEHDREALAAS-VDEYKPATLEHRLDNKTGNKNNVVESNGTLSHFGK
+Afropavo_congensis               VRFPNTNEEGKDVSASKDLRPIGTDGVYSHELANIEYTNISKEHDGEALAAS-VDEYKPATMEQRLDNKTGNKNNVVESNGTLSHFGK
+Numida_meleagris                 VRFPNANEEGKDVLVTEDLRPIGTDGVYSNDLANIEYTNIS?????EALAA--VDEYKPATMEYRLDNKTDNKNNVVESNGTLSHFGK
+Acryllium_vulturinum             VRFPNANEEGKDVLVIEDLRPIGTDGVYSNDLANIEYTNISKEHD???LAA--VDEYKPATMEYRLDNKTDNKNNVVESNGTLSHFGK
+Meleagris_gallopavo              VRFPNTNEEGKDVLVTEDLRPIGTDGVHS-ELANIEYTNISKEHDREALAAS-VDEYKPATLEYRLDNKTGNKNNVVESNGTLSHFGK
+Grus_carunculatus                VTYPNTNEEGKEVLVTKILSPIGTDGVYSNELANIEYTNVSKDHDKEATAT--VDDYKPATLEYMFDSKTSNKNNVVDSNGTLSHFGK
+Anthropoides_virgo               VTYPNTNEEGKEVLVTKILSPIGTDGVYSNELANIEYTNVSKDHDKEVTAT--VDDYKPATLEYMFDSKTSNKNNVVDSNGTLSHFGK
+Grus_vipio                       ITYPNTNEEGKEVLVTKILSPIGTDGVYSNELANIEYTNVSKDHDKEATAT--VDDYKPATLEYMFDSKTSNKNNVVDSNGTLSHFGK
+Fulica_atra                      VTYPNTNEEGKEVLVTKILSPVGTNGVYSNESANIEYTNVSKDYDKEVTAT--VDGYQPASLEYVFDNKTSNKDNVADSNGTLSHFGK
+Vanellus_spinosus                VTYPNTNEEGKEVLVTKILSPIGTDGVYSNELANLEYTNVSKDYDKEVIAT--VDDYKPASLDYMLDSKTSNKNNVVDSNGTLSHFEK
+Larus_rudibundus                 VTYPNTNEEGKEVLATKALSPVGSDGVYSNELANIEYTNVSKDYDKEDIAT--VDDYKPASLDYMLDSKTSNKNNVVDSNGTLSHFEK
+Turnix_sylvatica                 VRFPNTNEEGKDTVADKDLPPIGSDGVYS-EMANIEYTNISKEHD??T???S-VDEYKPGMMERLLDNKTNDKNNVVESNGTLNHFGE
+Gallirallus_australis            VTYPNTNEEGKVVLVTKNISPVGTNGVYTNESAIIEYSNVSKDYD???TAT??VDGYQSAPQDYVFDNKTSNKNNVADSNGTLSHFGK
+Geococcyx_californianus          VAYPNANEEGKEALVTTARLHIGTDGVYGNELANLEHTNISKDYNKEVIAS--VNDYKPVSLLYMLDNKTGNKNNVADSNGTLSHFGK
+Dacelo_novaeguineae              VKYPNTNDEGKEVLVTEILSPIGTDRVYSNELANIEYTNVSKEHDKEAIAT-QVDEHKPATLDYRIDSKTSNKDNVMDSNGTLSHFGK
+Carpococcyx_renauldi             VRYPNSNEEGKEGLATTIRSPIGTDGVYGNELANLEYTNISKDYD???IAT--VDDYKPVTLEDMLDNITHNKYNVAHSNGTFSHFGK
+Podargus_strigoides              VTYPNTNEESKEVLVDEVLSPIGTDGVYSNELANLE-TNISKDRDK??IAT--VDDYQPVMGDYMLDSKTSNKNNVVDSNGTLNHFGK
+;
+END;
+BEGIN MRBAYES;
+    prset aamodelpr = mixed;
+END;
diff --git a/test/NTSValidOut/basic-bush-dos.nex b/test/NTSValidOut/basic-bush-dos.nex
new file mode 100644
index 0000000..b15ef06
--- /dev/null
+++ b/test/NTSValidOut/basic-bush-dos.nex
@@ -0,0 +1,37 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 8;
+    TAXLABELS A B C D E F G H;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=6;
+    FORMAT Datatype=Protein  Gap=-;
+    CHARLABELS one two three four five six;
+Matrix
+A     WITH-B
+B     WITH-A
+C     WITH-D
+D     WITH-C
+E     WITH-F
+F     WITH-E
+G     WITH-H
+H     WITH-G
+;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 A,
+        2 B,
+        3 C,
+        4 D,
+        5 E,
+        6 F,
+        7 G,
+        8 H;
+    TREE basic_bush = [&R](((1:1,2:1):1,(3:1,4:1):1):1,((5:1,6:1):1,(7:1,8:1):1):1);
+END;
diff --git a/test/NTSValidOut/basic-bush-mac.nex b/test/NTSValidOut/basic-bush-mac.nex
new file mode 100644
index 0000000..c394524
--- /dev/null
+++ b/test/NTSValidOut/basic-bush-mac.nex
@@ -0,0 +1,38 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 8;
+    TAXLABELS A B C D E F G H;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=6;
+    FORMAT Datatype=Protein  Gap=-;
+    CHARLABELS one two three four five six;
+Matrix
+A     WITH-B
+B     WITH-A
+C     WITH-D
+D     WITH-C
+E     WITH-F
+F     WITH-E
+G     WITH-H
+H     WITH-G
+;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 A,
+        2 B,
+        3 C,
+        4 D,
+        5 E,
+        6 F,
+        7 G,
+        8 H;
+    TREE basic_bush = [&R](((1:1,2:1):1,(3:1,4:1):1):1,((5:1,6:1):1,(7:1,8:1):1):1);
+    TREE basic_bushu = [&U](((1:1,2:1):1,(3:1,4:1):1):1,((5:1,6:1):1,(7:1,8:1):1):1);
+END;
diff --git a/test/NTSValidOut/basic-bush-mixed-line-endings.nex b/test/NTSValidOut/basic-bush-mixed-line-endings.nex
new file mode 100644
index 0000000..b15ef06
--- /dev/null
+++ b/test/NTSValidOut/basic-bush-mixed-line-endings.nex
@@ -0,0 +1,37 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 8;
+    TAXLABELS A B C D E F G H;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=6;
+    FORMAT Datatype=Protein  Gap=-;
+    CHARLABELS one two three four five six;
+Matrix
+A     WITH-B
+B     WITH-A
+C     WITH-D
+D     WITH-C
+E     WITH-F
+F     WITH-E
+G     WITH-H
+H     WITH-G
+;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 A,
+        2 B,
+        3 C,
+        4 D,
+        5 E,
+        6 F,
+        7 G,
+        8 H;
+    TREE basic_bush = [&R](((1:1,2:1):1,(3:1,4:1):1):1,((5:1,6:1):1,(7:1,8:1):1):1);
+END;
diff --git a/test/NTSValidOut/basic-bush-unix.nex b/test/NTSValidOut/basic-bush-unix.nex
new file mode 100644
index 0000000..b15ef06
--- /dev/null
+++ b/test/NTSValidOut/basic-bush-unix.nex
@@ -0,0 +1,37 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 8;
+    TAXLABELS A B C D E F G H;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=6;
+    FORMAT Datatype=Protein  Gap=-;
+    CHARLABELS one two three four five six;
+Matrix
+A     WITH-B
+B     WITH-A
+C     WITH-D
+D     WITH-C
+E     WITH-F
+F     WITH-E
+G     WITH-H
+H     WITH-G
+;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 A,
+        2 B,
+        3 C,
+        4 D,
+        5 E,
+        6 F,
+        7 G,
+        8 H;
+    TREE basic_bush = [&R](((1:1,2:1):1,(3:1,4:1):1):1,((5:1,6:1):1,(7:1,8:1):1):1);
+END;
diff --git a/test/NTSValidOut/basic-rake.nex b/test/NTSValidOut/basic-rake.nex
new file mode 100644
index 0000000..7070193
--- /dev/null
+++ b/test/NTSValidOut/basic-rake.nex
@@ -0,0 +1,133 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 8;
+    TAXLABELS A B C D E F G H;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=9;
+    FORMAT Datatype=Protein  Gap=-;
+    CHARLABELS one two three four five six seven eight nine;
+Matrix
+A     THIS-IS-A
+B     THIS-IS-B
+C     THIS-IS-C
+D     THIS-IS-D
+E     THIS-IS-E
+F     THIS-IS-F
+G     THIS-IS-G
+H     THIS-IS-H
+;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 A,
+        2 B,
+        3 C,
+        4 D,
+        5 E,
+        6 F,
+        7 G,
+        8 H;
+    TREE basic_rake = [&R](1:1.0,2:1.0,3:1.0,4:1.0,5:1.0,6:1.0,7:1.0,8:1.0);
+END;
+BEGIN CODONS;
+    LINK CHARACTERS = Untitled_CHARACTERS_Block_1;
+    CodeSet * UNTITLED = universal : 1-9;
+END;
+BEGIN SETS;
+    LINK CHARACTERS = Untitled_CHARACTERS_Block_1;
+    CHARSET UNTITLED = 1-4 7-9;
+    CHARSET UNTITLEDo = 1 3 4 7-9;
+END;
+BEGIN ASSUMPTIONS;
+    LINK CHARACTERS = Untitled_CHARACTERS_Block_1;
+    TypeSet * UNTITLED = unord : 1-9;
+END;
+BEGIN MESQUITECHARMODELS;
+    ProbModelSet * UNTITLED = 'Mk1 (est.)' : 1 - 9;
+END;
+BEGIN MESQUITE;
+    MESQUITESCRIPTVERSION 2;
+    TITLE AUTO;
+    tell ProjectCoordinator;
+    getEmployee #mesquite.minimal.ManageTaxa.ManageTaxa;
+    tell It;
+    setID 0 2002854640106134798;
+    endTell;
+    getEmployee #mesquite.charMatrices.ManageCharacters.ManageCharacters;
+    tell It;
+    setID 0 5914780497712519392;
+    checksum 0 1033486703 null;
+    endTell;
+    getEmployee #mesquite.charMatrices.BasicDataWindowCoord.BasicDataWindowCoord;
+    tell It;
+    showDataWindow #5914780497712519392 #mesquite.charMatrices.BasicDataWindowMaker.BasicDataWindowMaker;
+    tell It;
+    getWindow;
+    tell It;
+    setExplanationSize 30;
+    setAnnotationSize 20;
+    setFontIncAnnot 0;
+    setFontIncExp 0;
+    setSize 700 564;
+    setLocation 370 38;
+    setFont SanSerif;
+    setFontSize 10;
+    getToolPalette;
+    tell It;
+    endTell;
+    setTool mesquite.charMatrices.BasicDataWindowMaker.BasicDataWindow.arrow;
+    colorCells #mesquite.charMatrices.ColorByState.ColorByState;
+    setBackground White;
+    toggleShowNames on;
+    toggleShowTaxonNames on;
+    toggleTight off;
+    toggleShowChanges off;
+    toggleSeparateLines off;
+    toggleShowStates on;
+    toggleAutoWCharNames off;
+    toggleShowDefaultCharNames off;
+    toggleConstrainCW on;
+    setColumnWidth 16;
+    toggleBirdsEye off;
+    toggleColorsPanel off;
+    birdsEyeWidth 2;
+    toggleLinkedScrolling on;
+    toggleScrollLinkedTables off;
+    endTell;
+    showWindow;
+    getEmployee #mesquite.categ.StateNamesStrip.StateNamesStrip;
+    tell It;
+    showStrip off;
+    endTell;
+    getEmployee #mesquite.charMatrices.AnnotPanel.AnnotPanel;
+    tell It;
+    togglePanel off;
+    endTell;
+    getEmployee #mesquite.charMatrices.CharReferenceStrip.CharReferenceStrip;
+    tell It;
+    showStrip off;
+    endTell;
+    getEmployee #mesquite.charMatrices.ColorCells.ColorCells;
+    tell It;
+    setColor Red;
+    removeColor off;
+    endTell;
+    getEmployee #mesquite.charMatrices.QuickKeySelector.QuickKeySelector;
+    tell It;
+    autotabOff;
+    endTell;
+    getEmployee #mesquite.align.AlignToDropped.AlignToDropped;
+    tell It;
+    gapCosts 8 3 2 2;
+    subCosts 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 [...]
+    endTell;
+    endTell;
+    endTell;
+    endTell;
+END;
diff --git a/test/NTSValidOut/bglobin.nex b/test/NTSValidOut/bglobin.nex
new file mode 100644
index 0000000..60fa057
--- /dev/null
+++ b/test/NTSValidOut/bglobin.nex
@@ -0,0 +1,40 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 17;
+    TAXLABELS human tarsier bushbaby hare rabbit cow sheep pig elephseal rat mouse hamster marsupial duck chicken xenlaev xentrop;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=432;
+    FORMAT Datatype=DNA;
+Matrix
+human         CTGACTCCTGAGGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCTGGGCAGGCTGCTGGTGGTCTACCCTTGGACCCAGAGGTTCTTTGAGTCCTTTGGGGATCTGTCCACTCCTGATGCTGTTATGGGCAACCCTAAGGTGAAGGCTCATGGCAAGAAAGTGCTCGGTGCCTTTAGTGATGGCCTGGCTCACCTGGACAACCTCAAGGGCACCTTTGCCACACTGAGTGAGCTGCACTGTGACAAGCTGCACGTGGATCCTGAGAACTTCAGGCTCCTGGGCAACGTGCTGGTCTGTGTGCTGGCCCATCACTTTGGCAAAGAATTCACCCCACCAGTGCAGGCTGCCTATCAGAAAGTGGTGGCTGGTGTGGCTAATGCCCTGGCCCACAAGTATCAC
+tarsier       CTGACTGCTGAAGAGAAGGCCGCCGTCACTGCCCTGTGGGGCAAGGTAGACGTGGAAGATGTTGGTGGTGAGGCCCTGGGCAGGCTGCTGGTCGTCTACCCATGGACCCAGAGGTTCTTTGACTCCTTTGGGGACCTGTCCACTCCTGCCGCTGTTATGAGCAATGCTAAGGTCAAGGCCCATGGCAAAAAGGTGCTGAACGCCTTTAGTGACGGCATGGCTCATCTGGACAACCTCAAGGGCACCTTTGCTAAGCTGAGTGAGCTGCACTGTGACAAATTGCACGTGGATCCTGAGAATTTCAGGCTCTTGGGCAATGTGCTGGTGTGTGTGCTGGCCCACCACTTTGGCAAAGAATTCACCCCGCAGGTTCAGGCTGCCTATCAGAAGGTGGTGGCTGGTGTGGCTACTGCCTTGGCTCACAAGTACCAC
+bushbaby      CTGACTCCTGATGAGAAGAATGCCGTTTGTGCCCTGTGGGGCAAGGTGAATGTGGAAGAAGTTGGTGGTGAGGCCCTGGGCAGGCTGCTGGTTGTCTACCCATGGACCCAGAGGTTCTTTGACTCCTTTGGGGACCTGTCCTCTCCTTCTGCTGTTATGGGCAACCCTAAAGTGAAGGCCCACGGCAAGAAGGTGCTGAGTGCCTTTAGCGAGGGCCTGAATCACCTGGACAACCTCAAGGGCACCTTTGCTAAGCTGAGTGAGCTGCATTGTGACAAGCTGCACGTGGACCCTGAGAACTTCAGGCTCCTGGGCAACGTGCTGGTGGTTGTCCTGGCTCACCACTTTGGCAAGGATTTCACCCCACAGGTGCAGGCTGCCTATCAGAAGGTGGTGGCTGGTGTGGCTACTGCCCTGGCTCACAAATACCAC
+hare          CTGTCCGGTGAGGAGAAGTCTGCGGTCACTGCCCTGTGGGGCAAGGTGAATGTGGAAGAAGTTGGTGGTGAGACCCTGGGCAGGCTGCTGGTTGTCTACCCATGGACCCAGAGGTTCTTCGAGTCCTTTGGGGACCTGTCCACTGCTTCTGCTGTTATGGGCAACCCTAAGGTGAAGGCTCATGGCAAGAAGGTGCTGGCTGCCTTCAGTGAGGGTCTGAGTCACCTGGACAACCTCAAAGGCACCTTCGCTAAGCTGAGTGAACTGCATTGTGACAAGCTGCACGTGGATCCTGAGAACTTCAGGCTCCTGGGCAACGTGCTGGTTATTGTGCTGTCTCATCACTTTGGCAAAGAATTCACTCCTCAGGTGCAGGCTGCCTATCAGAAGGTGGTGGCTGGTGTGGCCAATGCCCTGGCTCACAAATACCAC
+rabbit        CTGTCCAGTGAGGAGAAGTCTGCGGTCACTGCCCTGTGGGGCAAGGTGAATGTGGAAGAAGTTGGTGGTGAGGCCCTGGGCAGGCTGCTGGTTGTCTACCCATGGACCCAGAGGTTCTTCGAGTCCTTTGGGGACCTGTCCTCTGCAAATGCTGTTATGAACAATCCTAAGGTGAAGGCTCATGGCAAGAAGGTGCTGGCTGCCTTCAGTGAGGGTCTGAGTCACCTGGACAACCTCAAAGGCACCTTTGCTAAGCTGAGTGAACTGCACTGTGACAAGCTGCACGTGGATCCTGAGAACTTCAGGCTCCTGGGCAACGTGCTGGTTATTGTGCTGTCTCATCATTTTGGCAAAGAATTCACTCCTCAGGTGCAGGCTGCCTATCAGAAGGTGGTGGCTGGTGTGGCCAATGCCCTGGCTCACAAATACCAC
+cow           CTGACTGCTGAGGAGAAGGCTGCCGTCACCGCCTTTTGGGGCAAGGTGAAAGTGGATGAAGTTGGTGGTGAGGCCCTGGGCAGGCTGCTGGTTGTCTACCCCTGGACTCAGAGGTTCTTTGAGTCCTTTGGGGACTTGTCCACTGCTGATGCTGTTATGAACAACCCTAAGGTGAAGGCCCATGGCAAGAAGGTGCTAGATTCCTTTAGTAATGGCATGAAGCATCTCGATGACCTCAAGGGCACCTTTGCTGCGCTGAGTGAGCTGCACTGTGATAAGCTGCATGTGGATCCTGAGAACTTCAAGCTCCTGGGCAACGTGCTAGTGGTTGTGCTGGCTCGCAATTTTGGCAAGGAATTCACCCCGGTGCTGCAGGCTGACTTTCAGAAGGTGGTGGCTGGTGTGGCCAATGCCCTGGCCCACAGATATCAT
+sheep         CTGACTGCTGAGGAGAAGGCTGCCGTCACCGGCTTCTGGGGCAAGGTGAAAGTGGATGAAGTTGGTGCTGAGGCCCTGGGCAGGCTGCTGGTTGTCTACCCCTGGACTCAGAGGTTCTTTGAGCACTTTGGGGACTTGTCCAATGCTGATGCTGTTATGAACAACCCTAAGGTGAAGGCCCATGGCAAGAAGGTGCTAGACTCCTTTAGTAACGGCATGAAGCATCTCGATGACCTCAAGGGCACCTTTGCTCAGCTGAGTGAGCTGCACTGTGATAAGCTGCACGTGGATCCTGAGAACTTCAGGCTCCTGGGCAACGTGCTGGTGGTTGTGCTGGCTCGCCACCATGGCAATGAATTCACCCCGGTGCTGCAGGCTGACTTTCAGAAGGTGGTGGCTGGTGTTGCCAATGCCCTGGCCCACAAATATCAC
+pig           CTGTCTGCTGAGGAGAAGGAGGCCGTCCTCGGCCTGTGGGGCAAAGTGAATGTGGACGAAGTTGGTGGTGAGGCCCTGGGCAGGCTGCTGGTTGTCTACCCCTGGACTCAGAGGTTCTTCGAGTCCTTTGGGGACCTGTCCAATGCCGATGCCGTCATGGGCAATCCCAAGGTGAAGGCCCACGGCAAGAAGGTGCTCCAGTCCTTCAGTGACGGCCTGAAACATCTCGACAACCTCAAGGGCACCTTTGCTAAGCTGAGCGAGCTGCACTGTGACCAGCTGCACGTGGATCCTGAGAACTTCAGGCTCCTGGGCAACGTGATAGTGGTTGTTCTGGCTCGCCGCCTTGGCCATGACTTCAACCCGAATGTGCAGGCTGCTTTTCAGAAGGTGGTGGCTGGTGTTGCTAATGCCCTGGCCCACAAGTACCAC
+elephseal     TTGACGGCGGAGGAGAAGTCTGCCGTCACCTCCCTGTGGGGCAAAGTGAAGGTGGATGAAGTTGGTGGTGAAGCCCTGGGCAGGCTGCTGGTTGTCTACCCCTGGACTCAGAGGTTCTTTGACTCCTTTGGGGACCTGTCCTCTCCTAATGCTATTATGAGCAACCCCAAGGTCAAGGCCCATGGCAAGAAGGTGCTGAATTCCTTTAGTGATGGCCTGAAGAATCTGGACAACCTCAAGGGCACCTTTGCTAAGCTCAGTGAGCTGCACTGTGACCAGCTGCATGTGGATCCCGAGAACTTCAAGCTCCTGGGCAATGTGCTGGTGTGTGTGCTGGCCCGCCACTTTGGCAAGGAATTCACCCCACAGATGCAGGGTGCCTTTCAGAAGGTGGTAGCTGGTGTGGCCAATGCCCTCGCCCACAAATATCAC
+rat           CTAACTGATGCTGAGAAGGCTGCTGTTAATGCCCTGTGGGGAAAGGTGAACCCTGATGATGTTGGTGGCGAGGCCCTGGGCAGGCTGCTGGTTGTCTACCCTTGGACCCAGAGGTACTTTGATAGCTTTGGGGACCTGTCCTCTGCCTCTGCTATCATGGGTAACCCTAAGGTGAAGGCCCATGGCAAGAAGGTGATAAACGCCTTCAATGATGGCCTGAAACACTTGGACAACCTCAAGGGCACCTTTGCTCATCTGAGTGAACTCCACTGTGACAAGCTGCATGTGGATCCTGAGAACTTCAGGCTCCTGGGCAATATGATTGTGATTGTGTTGGGCCACCACCTGGGCAAGGAATTCACCCCCTGTGCACAGGCTGCCTTCCAGAAGGTGGTGGCTGGAGTGGCCAGTGCCCTGGCTCACAAGTACCAC
+mouse         CTGACTGATGCTGAGAAGTCTGCTGTCTCTTGCCTGTGGGCAAAGGTGAACCCCGATGAAGTTGGTGGTGAGGCCCTGGGCAGGCTGCTGGTTGTCTACCCTTGGACCCAGCGGTACTTTGATAGCTTTGGAGACCTATCCTCTGCCTCTGCTATCATGGGTAATCCCAAGGTGAAGGCCCATGGCAAAAAGGTGATAACTGCCTTTAACGAGGGCCTGAAAAACCTGGACAACCTCAAGGGCACCTTTGCCAGCCTCAGTGAGCTCCACTGTGACAAGCTGCATGTGGATCCTGAGAACTTCAGGCTCCTAGGCAATGCGATCGTGATTGTGCTGGGCCACCACCTGGGCAAGGATTTCACCCCTGCTGCACAGGCTGCCTTCCAGAAGGTGGTGGCTGGAGTGGCCACTGCCCTGGCTCACAAGTACCAC
+hamster       CTGACTGATGCTGAGAAGGCCCTTGTCACTGGCCTGTGGGGAAAGGTGAACGCCGATGCAGTTGGCGCTGAGGCCCTGGGCAGGTTGCTGGTTGTCTACCCTTGGACCCAGAGGTTCTTTGAACACTTTGGAGACCTGTCTCTGCCAGTTGCTGTCATGAATAACCCCCAGGTGAAGGCCCATGGCAAGAAGGTGATCCACTCCTTCGCTGATGGCCTGAAACACCTGGACAACCTGAAGGGCGCCTTTTCCAGCCTGAGTGAGCTCCACTGTGACAAGCTGCACGTGGATCCTGAGAACTTCAAGCTCCTGGGCAATATGATCATCATTGTGCTGATCCACGACCTGGGCAAGGACTTCACTCCCAGTGCACAGTCTGCCTTTCATAAGGTGGTGGCTGGTGTGGCCAATGCCCTGGCTCACAAGTACCAC
+marsupial     TTGACTTCTGAGGAGAAGAACTGCATCACTACCATCTGGTCTAAGGTGCAGGTTGACCAGACTGGTGGTGAGGCCCTTGGCAGGATGCTCGTTGTCTACCCCTGGACCACCAGGTTTTTTGGGAGCTTTGGTGATCTGTCCTCTCCTGGCGCTGTCATGTCAAATTCTAAGGTTCAAGCCCATGGTGCTAAGGTGTTGACCTCCTTCGGTGAAGCAGTCAAGCATTTGGACAACCTGAAGGGTACTTATGCCAAGTTGAGTGAGCTCCACTGTGACAAGCTGCATGTGGACCCTGAGAACTTCAAGATGCTGGGGAATATCATTGTGATCTGCCTGGCTGAGCACTTTGGCAAGGATTTTACTCCTGAATGTCAGGTTGCTTGGCAGAAGCTCGTGGCTGGAGTTGCCCATGCCCTGGCCCACAAGTACCAC
+duck          TGGACAGCCGAGGAGAAGCAGCTCATCACCGGCCTCTGGGGCAAGGTCAATGTGGCCGACTGTGGAGCTGAGGCCCTGGCCAGGCTGCTGATCGTCTACCCCTGGACCCAGAGGTTCTTCGCCTCCTTCGGGAACCTGTCCAGCCCCACTGCCATCCTTGGCAACCCCATGGTCCGTGCCCATGGCAAGAAAGTGCTCACCTCCTTCGGAGATGCTGTGAAGAACCTGGACAACATCAAGAACACCTTCGCCCAGCTGTCCGAGCTGCACTGCGACAAGCTGCACGTGGACCCTGAGAACTTCAGGCTCCTGGGTGACATCCTCATCATCGTCCTGGCCGCCCACTTCACCAAGGATTTCACTCCTGACTGCCAGGCCGCCTGGCAGAAGCTGGTCCGCGTGGTGGCCCACGCTCTGGCCCGCAAGTACCAC
+chicken       TGGACTGCTGAGGAGAAGCAGCTCATCACCGGCCTCTGGGGCAAGGTCAATGTGGCCGAATGTGGGGCCGAAGCCCTGGCCAGGCTGCTGATCGTCTACCCCTGGACCCAGAGGTTCTTTGCGTCCTTTGGGAACCTCTCCAGCCCCACTGCCATCCTTGGCAACCCCATGGTCCGCGCCCACGGCAAGAAAGTGCTCACCTCCTTTGGGGATGCTGTGAAGAACCTGGACAACATCAAGAACACCTTCTCCCAACTGTCCGAACTGCATTGTGACAAGCTGCATGTGGACCCCGAGAACTTCAGGCTCCTGGGTGACATCCTCATCATTGTCCTGGCCGCCCACTTCAGCAAGGACTTCACTCCTGAATGCCAGGCTGCCTGGCAGAAGCTGGTCCGCGTGGTGGCCCATGCCCTGGCTCGCAAGTACCAC
+xenlaev       TGGACAGCTGAAGAGAAGGCCGCCATCACTTCTGTATGGCAGAAGGTCAATGTAGAACATGATGGCCATGATGCCCTGGGCAGGCTGCTGATTGTGTACCCCTGGACCCAGAGATACTTCAGTAACTTTGGAAACCTCTCCAATTCAGCTGCTGTTGCTGGAAATGCCAAGGTTCAAGCCCATGGCAAGAAGGTTCTTTCAGCTGTTGGCAATGCCATTAGCCATATTGACAGTGTGAAGTCCTCTCTCCAACAACTCAGTAAGATCCATGCCACTGAACTGTTTGTGGACCCTGAGAACTTTAAGCGTTTTGGTGGAGTTCTGGTCATTGTCTTGGGTGCCAAACTGGGAACTGCCTTCACTCCTAAAGTTCAGGCTGCTTGGGAGAAATTCATTGCAGTTTTGGTTGATGGTCTTAGCCAGGGCTATAAC
+xentrop       TGGACAGCTGAAGAAAAAGCAACCATTGCTTCTGTGTGGGGGAAAGTCGACATTGAACAGGATGGCCATGATGCATTATCCAGGCTGCTGGTTGTTTATCCCTGGACTCAGAGGTACTTCAGCAGTTTTGGAAACCTCTCCAATGTCTCCGCTGTCTCTGGAAATGTCAAGGTTAAAGCCCATGGAAATAAAGTCCTGTCAGCTGTTGGCAGTGCAATCCAGCATCTGGATGATGTGAAGAGCCACCTTAAAGGTCTTAGCAAGAGCCATGCTGAGGATCTTCATGTGGATCCCGAAAACTTCAAGCGCCTTGCGGATGTTCTGGTGATCGTTCTGGCTGCCAAACTTGGATCTGCCTTCACTCCCCAAGTCCAAGCTGTCTGGGAGAAGCTCAATGCAACTCTGGTGGCTGCTCTTAGCCATGGCTACTTC
+;
+END;
+BEGIN MRBAYES;
+    charset non_coding = 1 - 90 358 - 432;
+    charset coding = 91 - 357;
+    partition region = 2 : non_coding , coding;
+    set partition = region;
+    lset applyto = ( 2 ) nucmodel = codon;
+    prset ratepr = variable;
+    mcmcp ngen = 100 nchains = 1 printfreq = 10 samplefreq = 10;
+END;
diff --git a/test/NTSValidOut/characters.nex b/test/NTSValidOut/characters.nex
new file mode 100644
index 0000000..5cc5001
--- /dev/null
+++ b/test/NTSValidOut/characters.nex
@@ -0,0 +1,98 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 6;
+    TAXLABELS P._fimbriata P._robusta P._americana P._myriophylla P._polygama P._macrophylla;
+    blockid bogus;
+END;
+BEGIN CHARACTERS;
+    TITLE dna_forty_five;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=45;
+    FORMAT Datatype=DNA  Gap=- Equate=" Q=(AC)";
+Matrix
+P._fimbriata       RCCTCGGCTTAACGAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._robusta         QCCTCGGCTTAACCAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._americana       QCGTCGCTTTCA---ACGTCGCTTTCACCAACGTCGCTTTCACCA
+P._myriophylla     ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._polygama        ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._macrophylla     ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTCGCTTTCACCA
+;
+END;
+BEGIN CHARACTERS;
+    TITLE rna_forty_five;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=45;
+    FORMAT Datatype=RNA  Gap=-;
+Matrix
+P._fimbriata       YR?UCGGCUUAACGAACCUCGGCUUAACGAACCUCGGCUUAACGA
+P._robusta         NC?UCGGCUUAACCAACCUCGGCUUAACGAACCUCGGCUUAACGA
+P._americana       ACGUCGCUUUCA---ACGUCGCUUUCACCAACGUCGCUUUCACCA
+P._myriophylla     ACGUCGCUUUCA---ACGUCGCUUUCACCAACGUC?CUUUCACCA
+P._polygama        ACGUCGCUCUCACCAACGUCGCUUUCACCAACGUC?CUUUCACCA
+P._macrophylla     ACGUCGCUCUCACCAACGUCGCUUUCACCAACGUCGCUUUCACCA
+;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=3;
+    FORMAT Datatype=Standard Symbols="01" Tokens;
+    CharStateLabels 
+      1 leaf_margins /  entire fimbriate,
+      2 flower_color /  white_to_cream crimson,
+      3 breeding_system /  hermaphroditic gynomonoecious gynodioecious dioecious;
+Matrix
+P._fimbriata        fimbriate crimson gynomonoecious
+P._robusta          fimbriate crimson gynomonoecious
+P._americana        entire white_to_cream hermaphroditic
+P._myriophylla      entire white_to_cream hermaphroditic
+P._polygama         entire white_to_cream dioecious
+P._macrophylla      entire crimson gynodioecious
+;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_2;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=3;
+    FORMAT Datatype=Standard Symbols="0123";
+    CharStateLabels 
+      1 leaf_margins /  entire fimbriate,
+      2 flower_color /  white_to_cream crimson,
+      3 breeding_system /  hermaphroditic gynomonoecious gynodioecious dioecious;
+Matrix
+P._fimbriata       111
+P._robusta         111
+P._americana       000
+P._myriophylla     000
+P._polygama        003
+P._macrophylla     012
+;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_3;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NTax=4 NChar=15;
+    FORMAT Datatype=DNA;
+Matrix
+P._fimbriata       ACCTCGGCTTAACGA
+P._robusta         ACCTCGGCTTAACCA
+P._americana       ACGTCGCTCTCACCA
+P._myriophylla     ACGTCGCTTTCACCA
+;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_4;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=15;
+    FORMAT Datatype=DNA;
+    CHARLABELS site_1 site_2 site_3 site_4 site_5 site_6 site_7 site_8 site_9 site_10 site_11 site_12 site_13 site_14 site_15;
+Matrix
+P._fimbriata       ACCTCGGCTTAACGA
+P._robusta         ACCTCGGCTTAACCA
+P._americana       ACGTCGCTCTCACCA
+P._myriophylla     ACGTCGCTTTCACCA
+P._polygama        ACCTCGCTTTCACGA
+P._macrophylla     ACCTCGCTTTCACGA
+;
+END;
diff --git a/test/NTSValidOut/charsets.nex b/test/NTSValidOut/charsets.nex
new file mode 100644
index 0000000..a9bc6f2
--- /dev/null
+++ b/test/NTSValidOut/charsets.nex
@@ -0,0 +1,40 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 6;
+    TAXLABELS P._fimbriata P._robusta P._americana P._myriophylla P._polygama P._macrophylla;
+    blockid bogus;
+END;
+BEGIN CHARACTERS;
+    TITLE dna_forty_five;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=45;
+    FORMAT Datatype=DNA  Gap=-;
+    CHARLABELS labone labtwo labthree labfour labfive labsix labseven;
+Matrix
+P._fimbriata       RCCTCGGCTTAACGAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._robusta         (AC)CCTCGGCTTAACCAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._americana       RCGTCGCTTTCA---ACGTCGCTTTCACCAACGTCGCTTTCACCA
+P._myriophylla     ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._polygama        ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._macrophylla     ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTCGCTTTCACCA
+;
+END;
+BEGIN SETS;
+    LINK CHARACTERS = dna_forty_five;
+    CHARSET csfive = 1-5 10-18 \ 2 40-45;
+    CHARSET csfour = 1-43 \ 3;
+    CHARSET csone = 1-3;
+    CHARSET cssix = 1-7 10-43 \ 3;
+    CHARSET csthree = 1-5;
+    CHARSET cstwo = 1-3;
+END;
+BEGIN ASSUMPTIONS;
+    LINK CHARACTERS = dna_forty_five;
+    EXSET csfive = 1-5 10-18 \ 2 40-45;
+    EXSET * csfour = 1-43 \ 3;
+    EXSET csone = 1-3;
+    EXSET cssix = 1-7 10-43 \ 3;
+    EXSET csthree = 1-5;
+    EXSET cstwo = 1-3;
+END;
diff --git a/test/NTSValidOut/cynmix.nex b/test/NTSValidOut/cynmix.nex
new file mode 100644
index 0000000..32243b3
--- /dev/null
+++ b/test/NTSValidOut/cynmix.nex
@@ -0,0 +1,76 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 32;
+    TAXLABELS Synergus Periclistus Ceroptres Synophromorpha Xestophanes Diastrophus Gonaspis Liposthenes_gle Liposthenes_ker Antistrophus Rhodus Hedickiana Neaylax Isocolus Aulacidea Panteliella Barbotinia Aylax Iraella Timaspis Phanacis_1 Phanacis_2 Eschatocerus Diplolepis Pediaspis Plagiotrochus Andricus Neuroterus Biorhiza Parnips Paramblynotus Ibalia;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=3246;
+    FORMAT Datatype=MIXED(Standard: 1-166, DNA: 167-3246)  Gap=-;
+Matrix
+Synergus            1-1-100000000202110201011010110100000000010121001120101010101000000001100020000000111000102010000211010010001001110110000011100000100111000000011112100001001101100005TATACTATACTTTATATTTGGTATTTGAACTGGAATAATTGGATCAGCATTAAGATTAATTATTCGTATAGAATTAAGATCAACATTACAATTAATTAATAATGATCAAATTTATAATTCAATTGTAACTGCTCATGCATTTATCATAATTTTTTTTATAGTAATACCAATTACAATTGGAGGATTTAGAAATTACCTAATTCCATTAATATTAAGAACTCCTGATATAGCTTTCCCACGACTTAATAATATAAGATTTTGATTATTAATCCCATCTTTAATTTTATTAACATCAAGTATATTTAT [...]
+Periclistus         1-1-100000000202110201011110110100000000010100101000101010011000000001100021001000111000112010000211010010000001110111000011100000100111010000111112100001001111100002ATTAATATATTTTATTTTAGGGATTTGATCAGGTATAATTGGGTCAAGATTAAGAATAATTATTCGATTAGAACTTGGTAATCCTTTACAATTAATTGGAAATGATCAAATTTATAATTCAATTGTAACTGTTCATGCATTTATTATAATTTTTTTTATAGTTATACCTATTATAGTTGGAGGATTTGGTAATTATTTAATTCCTATTATATTAATTACTCCTGATATGGCTTTTCCTCGATTAAATAATATAAGTTATTGACTTTTAATTCCCTCTTTATTATTAATATTATCTACAATATTTAT [...]
+Ceroptres           1-1-1000100002021002010111101001000000000111000???10101010010000000000100021001000111000100000000200010010101001010111000011100000100111100000101112101001100111????05TATATTATATTTTATATTTGGGGTATATTCTGGAATAATTGGATCATCCTTAAGAATAATTATTCGAATAGAATTAGGAACTCCTACTCAGTTAATTAATAATGACCAAATTTATAATTCAATTGTAACTGCTCATGCTTTTATTATAATTTTTTTTATAGTTATACCTATTATAGTAGGTGGATTTGGAAATTATATGATTCCTTTAATATTAATTTCTCCTGATATAGCATATCCTCGTTTAAATAATATAAGGTTTTGATTATTAATTCCTTCTTTAATTTTATTGATCATGGGAATATTTAT [...]
+Synophromorpha      1-1-00001000021-100101001111110100000000010100101000100010010000000000100001200000111000110000000200010010001001000111000011100001120011110000111112100001001101100002AATACTATATTTTATTTTTGGAATTTGATCTGGTATAATTGGATCTAGATTAAGAATAATTATTCGAATAGAACTTGGTAATCCATCTCAATTAATTGGAAATGATCAAATTTATAATTCAATTGTTACAATTCATGCTTTTATTATAATTTTTTTTATAGTTATACCTATTATAGTTGGTGGATTTGGAAATTATTTAATTCCTTTAATATTATCAGTTCCTGATATAGCTTTTCCACGAATAAATAATATAAGGTATTGACTTTTAATTCCTTCATTATTATTAATAGTATCAAGAATATTTAT [...]
+Xestophanes         1-1-00001000011-10-110001011010100000000010110101000100010010101000000100001201000121000110000000100111010001000000111000011100000110011100000010012100000100120001002AATATTATATTTTATTTTTGGAATTTGATCTGGTATAATTGGATCTAGATTAAGAATAATTATTCGAATAGAACTTGGAATTCCTACACAATTAATTGGTAATGACCAAATTTATAATTCAATTGTAACAATTCATGCATTTATTATAATTTTTTTTATAGTAATACCTATTATAGTAGGAGGATTTGGAAATTATTTAATTCCTTTAATATTATCTGTACCTGATATAGCTTTTCCTCGAATAAATAATATAAGATATTGACTTTTAGTCCCTTCTTTATTATTAATAATATCTAGAATATTTAT [...]
+Diastrophus         011-10101000021-10-210001011010100000100000011101000100010012000000000001101201100101000110000000100100000000000000011000011100001120011100100000012000000100120001002AATATTATATATAGTTTTTGGTATTTGATCTGGAATAATTGGATCAAGATTAAGAATAATTATTCGTACAGAACTTGGAACTCCTACACAATTAATTGGTAATGATCAAATTTATAACTCAATTGTTACAATTCATGCATTTATTATAATTTTTTTTATAGTAATACCAATTATAGTAGGAGGATTTGGAAATTATTTAATTCCTTTAATATTATCAGTACCTGATATAGCTTTTCCTCGAATAAATAATATAAGATTTTGACTTTTAGTCCCTTCTTTATTATTAATAATTTCTAGTATATGTGT [...]
+Gonaspis            1-1-10001000011-10-210001011010100000100000021101000100010012000000000000101201000100000110000000200110000000000000111000011100101120011100101000010-00000100120001002TATATTATATATAATTTTTGGTGTTTGATCTGGCATAATTGGGTCTAGATTAAGAATAATTATTCGGACAGAACTTGGTACACCATTACAATTAATTGGTAATGATCAAATTTATAATTCAATTGTTACAACTCATGCATTTATTATAATTTTTTTTATAGTTATACCTATTATAGTTGGGGGATTTGGAAATTATTTAATTCCTCTTATATTAAGGGTTCCTGATATAGCTTTCCCTCGTATAAATAATATAAGATTTTGGCTTTTAATTCCTTCTTTAATATTAATATTATCTAGAATATATGT [...]
+Liposthenes_gle     01000030000101022020000010110111000001001000101100001000100120000000010000112011001010001120100001001110000000000000100000100010011210111-0201100012000000000120000003AATTTTATATTTTATTTTTGGTATATGATCAGGTATATTAGGTTCAGCTTTAAGAATGATTATTCGTATAGAGTTAGGGACTCCCTCTCAATTAATTGGAAATGATCAAATTTATAATACAATTGTTACAGCTCATGCTTTTGTAATAATTTTTTTTATGGTTATACCAATTATAGTAGGAGGATTTGGAAATTATTTAATTCCATTAATATTATCAGTACCTGATATAGCTTTCCCTCGTTTAAATAATTTAAGATATTGAATATTAGTCCCTGCATTATTATTATTATCATCAAGAATGTTTAT [...]
+Liposthenes_ker     0000102000000101????????????????????????????110???0?10001001000000??00000011101100101000112010000????1000000000??????1?1?0100000011210111-01011000???0?000?001?1????03AATATTATACTTTATATTTGGAATCTGATCTGGAATAATTGGATCAGGATTAAGAATAATTATCCGTATAGAACTAGGATCCCCCGGCCAACTAATTGGAAATGATCAAATCTATAACTCTATCGTTACAGCTCATGCATTTATTATAATTTTTTTTATAGTAATACCTATTATAGTTGGAGGTTTTGGAAACTATTTAATTCCATTAATAATAACGGCCCCTGATATAGCTTTCCCTCGATTAAATAATATAAGATACTGAATATTAATCCCAGCCTTATTATTATTAATTTCAAGAATATTTAT [...]
+Antistrophus        1-010120000?01001010000110110001000001020000101???001011111100210000000002210011101210101110200001001100021000000000110000100000011210011-1201000112000000000120????00TATATTATACTTTTTATTTGGAATTTGATCTGGATTAATTGGATCAGCTTTAAGTATACTTATTCGAATAGAACTAGGAACCCCTTCTCAATTAATTGGTAATGATCAAATTTATAATTCAGTAGTTACTTCTCATGCTTTTGTAATAATTTTTTTTATAGTAATACCAATTATAGTAGGGGGATTTGGTAATTATTTAATTCCTTTAATATTATCAGCTCCTGATATAGCTTTCCCACGTTTAAATAATATAAGATTTTGATTATTAATTCCTTCTATATTATTAATATTATCAAGAATTTTTAT [...]
+Rhodus              1-01000000000000????????????0??????????0????1010000?10101111000000??00000121001110121010112010000????1000200001??????1?000100010011211011-12010000?200?001?001?0????03ATTACTTTATTTTTTATTCGGTATATGATCAGGAATAGTTGGAGCAAGATTAAGAGTTATTATCCGTATAGAACTAGGAACCCCCTCTCAACTACTTGAAAATGACCAAGTTTATAATTCAATTGTAACTGCTCATGCATTTATCATAATCTCCTTTATAGTCATACCAATTATAGTAGGAGGATTTGGTAATTATTTAACTCCTCTAATATTATCCTCACCAGACATAGCTTTCCCTCGATTAAATAATATAAGATTCTGATTATTAATCCCAGCATTATTATTATTATTATCTAGAATACTTAT [...]
+Hedickiana          1-01010000000000?????0??10101??????1???0????0010000110101111000000??00000121001100121010111010000???11000100000??????1?000100000011200111012010001??00?001?00??0????03TATATTATATTTTTTATTTGGTGCATGATCTGGGACTATTGGATCTGCATTAAGTATACTTATTCGTAGAGAATTAGGGACTCCAAATCAATTTATTGGAAATGATCAAATTTATAATTCAATTGTCACATCTCATGCATTTGTAATAATTTTTTTTATAGTTATACCTATTATAGTTGGTGGATTTGGCAATTATTTAATTCCTTTAATAATTTCAGCTCCTGATATAGCTTTCCCTCGATTAAATAATTTAAGATATTGGTTACTTGCCCCAGCTTTATTATTATTATTATCAAATTTATTTAT [...]
+Neaylax             1-01010000000000100000011010000100010000000000{01}???0110001111000000000000002100110010201011{12}010000100111001000000000011000010000001120011100101000110-00001000110????03TATATTATACTTTTTATTTGGGATTTGGTCAGGAATTATTGGATCTGCATTAAGAATAATTATTCGAATAGAATTAGGGTCACCCTCCCCATTAATTGGTAATGACCAAATTTATAATTCAATTGTTACTGCTCATGCATTTGTAATAATTTTTTTTATAGTCATGCCTATTATAGTAGGGGGGTTTGGAAATTATTTAATTCCTTTAATATTAACAGCCCCAGATATAGCTTTCCCACGATTAAATAATATAAGATATTGATTACTACCCCCAGCATTATTTTTATTACTTTCTAGTAT [...]
+Isocolus            0100001000000100100100011110000100000000000010110001101010110000000000000020000010002000112010000100010001001000000010000010001001020011011100000111000001001100000100AATATTATATTTTTTATTTGGTATTTGATCAGGGATAATTGGGTCTGCTTTGAGAGTAATTATTCGAATAGAGTTAGGGACTCCTGGGCAATTAATTGGAAATGATCAAATTTATAATTCAATTGTTACAGCTCATGCTTTTGTAATAATTTTTTTTATAGTAATACCAATTATAGTTGGAGGATTTGGGAATTATTTAGTTCCTTTAATGTTAACTGCCCCAGATATAGCATTCCCTCGATTAAATAATATAAGATATTGGCTTTTAATCCCTTCTTTATTATTAATAATAACAAGAATATTTAT [...]
+Aulacidea           00000000000001001002000110100001000000000000101???01101010110000000000000021000000000000112010000100010001001000000011000010000001010011110100100111000001001100????00AATATTATATTTTTTATTTGGAATTTGATCTGGAATAATTGGATCAGCATTAAGAATAATTATTCGTTTAGAATTAGGGACCTCTGGACAATTAATTGGAGATGATCAAGTTTATAACTCTATTGTTACAGCTCATGCATTCGTAATAATTTTTTTTATAGTTATACCAATTATAGTAGGTGGATTTGGTAATTATTTAATTCCTTTAATATTGACAGCACCTGATATGGCATTTCCACGATTAAATAATATAAGATACTGATTATTACTTCCAGCTTTATTATTAATAATAACTAGGATATTTAT [...]
+Panteliella         0000003000100200??1?000????0??010?00????????200???1?101010111020?0??000001210010101200001{12}2110010???11?01100?????00????0?010?000021210111-020000?1?????000100120????03ATTATTATATTTTATATTTGGTATTTGAGCAGGAATAATTGGGCCAGCTTTAAGAATAATTATTCGTATAGAGTTAGGGTTGCCTTCCCAATTAATTGGAAATGATCAAATTTATAATTCTATTGTTACGGCTCACGCTTTTATTATAATTTTTTTTATAGTTATACCAATTATAGTTGGTGGGTTTGTAAATTATTTAGTTCCATTAATGTTATCAGCCCCTGATATAGCTTTCCCTCGTTTAAATAACATAAGATATTGATTATTAATCCCTTCATTATTACTATTGTTATCTAGAATTTT [...]
+Barbotinia          1-010100000?0100002000000011000100010200000020010021101010111001000000000021001000100000111000000100110000101000000011000010000001110111110100001012010000100011001101AATATTATATTTTATATTTGGAATCTGATCAGGAATAATTGGGTCAGCTTTAAGAATATTAATTCGAATGGAATTAGGTACTCCAGGTCAATTAATTGGTAATGATCAAATTTACAATTCAATTGTTACTATTCATGCATTTATTATAATTTTTTTTATAGTTATACCTCTTATATTAGGAGGGTTTGGTAATTATTTAATTCCATTAATATTATCAGCTCCTGATATAGCTTTCCCTCGATTAAATAATATAAGATATTGATTATTAATCCCACCATTATTATTATTATTATCAAGAATATTAGT [...]
+Aylax               0100002000100101101000010010100110010200000020010021101010110000000003000021001010100000110010000100110000000000001011010010010001120111110200100010-10000000110001101TATATTATATTTTATATTTGGAATTTGATCTGGAATAATTGGATCTGCTTTAAGTATATTAATTCGAATAGAATTAGGAACACCTAATCAATTAATTGGAAATGATCAAGTTTATAATTCAATTGTTACTACTCATGCATTTATTATAATTTTTTTTATAGTTATACCTATTATAGTTAGAGGATTTGGTAATTATTTAGTACCTTTAATATTAACAGCTCCTGATATAGCTTTCCCTCGATTAAATAATATAAGATATTGATTATTAATCCCCTCTATATTATTATTATTATCAAGATTATTTAT [...]
+Iraella             0100003000100100101100010010100110010200000020{01}???21101010110001100000000021000010110010121020000100111000000000001011000000020001120111110100100010-00000000020????01AATAATATATTTTATTTTTGGTATTTGATCAGGAATAATTGGATCAGCCTTAAGAATATTAATTCGAATAGAATTAGGTACTCCAGGTCAATTAATTGGAAATGATCAAATTTATAATTCAATTGTTACAGCTCATGCTTTTATTATAATTTTTTTTATAGTTATACCAATTATAGTTGGAGGATTTGGAAATTATTTAATTCCTTTAATACTAACAGCACCTGACATAGCTTTTCCACGATTAAATAATATAAGATATTGATTATTAATTCCTTCTTTATTATTATTATTATTAAGAATATT [...]
+Timaspis            0000002000100201001100010010100101000000000021100120102010201001100003000021011000111000121001100000111100000100001011000010010000010101100210000010-01000000120000100AATATTATATTTTATTTTTGGTATTTGATCTGGAATAATTGGATCAGCTTTAAGAATAATTATTCGTATAGAATTAGGGACTCCTTCACAATTAATTGGTAATGATCAAATTTATAATTCAGTAGTTACAGCTCATGCTTTTATTATAATTTTTTTTATAGTTATACCAATTATAGTAGGAGGATTTGGTAATTATTTAATTCCTTCAATATTAAGAATTCCCGATATAGCTTTCCCTCGAATAAATAATATAAGTTATTGGTTATTAATCCCTTCTTTATTTTTATTATTATCAGGGATATTTAT [...]
+Phanacis_1          00011000001001011011000110101001010000000010201???0110201021000010000300012101100012100012102100000011011000000000101100001001000011011111021000001000001000000200??00TATATTATATTTTGTATTTGGGATTTGATCAGGAATAATTGGGTCTGCTTTAAGTATAATTATTCGGATAGAATTAGGTACACCTTCCCAATTAATTGGGAATGATCAGATTTATAATGCTATTGTTACAGCTCATGCATTTATTATAATTTTTTTTATAGTTATACCAATTATAGTTGGAGGATTTGGGAATTATTTAGTCCCTTTAATATTAAGAGTTCCTGATATAGCTTTCCCTCGAATAAATAATATAAGATATTGATTATTAATCCCAGCTTTATTATTATTATTATCTAGAATAGTAGT [...]
+Phanacis_2          00000020001002000002010110101001110000000000111???01102010210001100003000021010000122000121021100000110010000010001011000010010000010111100110000010-00000100020????00GGTATTATATTTTATTTTTGGGATTTGATCTGGTATAATTGGAACAGGATTAAGATTAATTATTCGTATAGAATTAGGGTCTCCTTCACAATTAATTGGGAATGATCAGATTTATAACTCAGTTGTTACTGCTCATGCATTTATTATAATTTTTTTTATGGTTATACCTATTATAGTAGGGGGGTTTGGGAATTATTTAATTCCATTAATATTAAGAATTCCTGATATAGCATTTCCTCGAATAAATAATATAAGATATTGATTATTAATCCCTTCATTAATGTTATTATTATCTAGGATAATTGT [...]
+Eschatocerus        000010310-1012002002000100101-110?101-0---20112101311--1112100011011120-0021-1001--321-012102110-00010--0011-1-1001001-0-000010001131--01-1200001-10-010-00?0120010106AATCATATATTTTATTTTAGGAATTTGATCAGGAATTTTAGGGGCATCATTAAGTATACTTATTCGAATAGAATTAGGTACCCCTAATCAATTTATTGGAAATGATCAAATTTATAATTCTATTGTAACAGCTCATGCATTTATCATAATTTTCTTTATAGTTATACCTATTATAATTGGAGGATTTGGTAATTATTTAATTCCTTTAATACTTGGGGTTCCAGATATATGCTTTCCACGATTAAATAATTTAAGATTTTGGTTACTTCTACCTTCTTTAGGTTTATTATTAAGAAGAATGCTTTT [...]
+Diplolepis          000000300010120220020000001011111100120000202110013011-11021100110111201002101001001200011000100000010010001-110001011001000000111010111100210000010-01000000010????02TGTATTATATTTTATATTTGGTATTTGGTGTGGGATGGTTGGGGCAGCTTTAAGAATAATTATTCGTATTGAGTTAGGAATAACAGGGCAGTTAATTGGTAATGATCAAATTTATAATTCTATTGTTACTTCTCATGCTTTTATTATAATTTTTTTTATAGTTATGCCTTTAATATTAGGGGGATTTGGTAATTATTTAATTCCATTAATATTATCTTCTCCAGATATATCTTTTCCTCGATTAAATAATATAAGATTTTGATTATTAGTTCCTTCTTTTATTTTGTTAATTATAAGTATATTTAT [...]
+Pediaspis           000000201011021-20100000001111111100121000{012}021010111100?101101011110010110011011011001-1110001001100101100000010000011001100010001120011100210000010-01010100020001117AATATTATATTTTATTTTTGGAACATGATCTGGAATAATAGGAAGTTCATTAAGAATAATTATTCGAATAGAATTAGGAATACCTGGACAATTAATTAGAAATGATCAAATTTATAATATAATTGTAACTTCTCATGCTTTTATTATAATTTTTTTTATAGTAATACCTATTATATTAGGAGGATTTGGTAATTATTTAATTCCTTTAATATTAATAAGACCAGATATATCTTTTCCTCGATTAAATAATTTAAGATTTTGATTATTAATTCCTTCTTTAATTTTATTAACATCAAGAATAT [...]
+Plagiotrochus       000000000110120120010000001201101100121000102000013011-01021001110100001101120001111100012{01}0010011001011001001110110?1011000010002120011100210000000-010-0110120011015TATATTATATTTTATATCTGGAATCTGATCAGGATTAATTGGATCAAGATTAAGAATAATTATTCGAATAGAATTAGGAACCCCTTCACAATTAATTGGAAATGATCAACTCTATAACTCAATCGTAACTGCACATGCATTTATTATAATTTTTTTTATAGTTATACCAATTATAGTTGGAGGATTTGGTAATTATTTAATTCCTCTAATATTAATTGCTCCGGATATAGCATTCCCTCGTTTAAATAATATAAGATATTGATTATTAACTCCTGCTCTATTACTATTAATATCAAGAATATT [...]
+Andricus            0{01}00002001{01}01202200100001012011{01}1000111000{01}0{12}100003111-1101110101010000110{12}1{01}000011020001100000{01}010010{01}0001010110100110110010100{01}2120111110210{01}01110-01111110010011015AATATTATATTTTATATTTGGTATTTGATCAGGAATAATTGGATCAGGATTGAGAATAATTATTCGAATAGAGTTAGGGATACCTTTACAATTAATTGGAAATGACCAAATTTATAATTCTATTGTTACTGCTCATGCTTTTGTAATAATTTTTTTTATAGTTATACCAATTATAGTTGGGGGGTTTGGAAATTATTTAGTTCCATTAATATTAACTGCTCCTGATATAGCTTTTCCTCGATTAAATAATATAAGATATTGACTTTTAATTCC [...]
+Neuroterus          00001031021112022020001000121110111012121020310???3011-0102110101011010110012100010320001200011000001011001001-1011001111001020002120011000200000000-01110110000????15AATATTATATTTTATATTTGGAATTTGAGCAGGAATAATTGGATCAGGATTAAGAATAATTATTCGAATAGAATTAGGGATACCTTTACAATTAATTGGAAATGATCAAATTTATAACTCTATTGTTACAGCCCATGCTTTTGTAATAATTTTTTTTATAGTAATACCTATTATAGTAGGAGGGTTTGGTAATTATTTAGTTCCTTTAATATTAGCTGCTCCAGATATAGCTTTTCCTCGATTAAATAACATAAGATATTGATTATTAATCCCTTCATTATTATTATTATTAGCCGGAATATTAGT [...]
+Biorhiza            010000310211120220200010001201101110121110202100103111-110111011101101011001200001101000110000010100101100100011010001111001020012120011100210000000-01111100020010015TATAATATATTTTATATTTGGAATTTGATCAGGAATAATTGGATCTAGTTTAAGAATAATTATTCGAATAGAATTAGGGACTCCATTACAATTAATTATAAATGATCAAATTTATAATTCAATTGTTACAGCTCATGCTTTTGTAATAATTTTTTTTATAGTTATACCTATTATAGTTGGAGGATTTGGAAACTATTTAGTGCCTTTAATGTTAGTAATTCCTGATATATCTTTCCCTCGATTAAATAATATAAGATATTGACTTTTAATTCCTTCATTATTTTTATTATTATCTGGTATATTAGT [...]
+Parnips             1-00000000000100???????????????1????????????11110001111000101000?-??00000021001000021000112000000?0??00100000000?????0?00010?001000001010002110001???-?00??001?1????01AATATTATATTTTATTTTTGGAATTTGATCAGGAATTATTGGGTCAGCATTAAGAATAATTATTCGAATAGAATTAGGGACTCCTGAACAATTAATTGGGAATGACCAAATTTATAATTCTATTGTGACAGCTCATGCTTTTATTATAATTTTTTTTATAGTTATACCTATTATAGTAGGAGGGTTTGGAAATTATTTAGTTCCATTAATATTATCTGCCCCTGATATGGCTTTTCCTCGATTAAATAATATAAGATATTGATTATTAATCCCTTCTTTAATTTTATTAATAATAGGTATATTTGT [...]
+Paramblynotus       0100000002000000100000000000110100000100000010{01}10000001000-0000000000000000000000--00000000001000200100-1-001000000-010000100000000111100-01000000020000000001000???0-TATCTTATATTTTATTTTTGGAATATGAGCAGGAATAATTGGAGCATCAATAAGAATAATTATTCGTATAGAATTAGGTACACCAAATCAATTAATTAATAATGATCAAATTTATAATTCTATTGTAACTGCTCATGCATTTATTATAATTTTTTTTATAGTTATACCAATTATAGTTGGAGGGTTTGGAAATTATTTAATTCCAATTATATTAATTTTACCTGATATATCATATCCACGTTTAAATAATATAAGATATTGATTATTACCCCCTTCTTTATTTTTATTAATTTCAAGAATAAT [...]
+Ibalia              000000000000002-000000000000??00000000000000100{01}0100001-00100000-0000000000010000-000000000011010000-0000000000-0---000000000200---01010000100000000-000000??00000000-GCTGCTATATTTTATTTTTGGGATTTGATCCGGAATAATTGGATCTAGACTAAGAATAATTATTCGAATAGAATTAGGAGCCCCTTCCCAATTAATTGGGAATGATCAAATTTATAATTCTATTGTAACAATTCATGCTTTTATTATAATTTTTTTTATAGTAATACCTATTATAGTAGGGGGATTTGGAAATTATTTAATTCCTTTAATATTAGCAATACCAGATATGGCTTTCCCTCGTTTAAATAATATAAGATTTTGGTTATTAATTCCTGCCCTAATATTTTTAATATCTGGAATATT [...]
+;
+END;
+BEGIN MRBAYES;
+    outgroup Ibalia;
+    charset morphology = 1 - 166;
+    charset molecules = 167 - 3246;
+    charset COI = 167 - 1244;
+    charset COI_1st = 167 - 1244 \ 3;
+    charset COI_2nd = 168 - 1244 \ 3;
+    charset COI_3rd = 169 - 1244 \ 3;
+    charset EF1a = 1245 - 1611;
+    charset EF1a_2nd = 1245 - 1611 \ 3;
+    charset EF1a_3rd = 1246 - 1611 \ 3;
+    charset EF1a_1st = 1247 - 1611 \ 3;
+    charset LWRh = 1612 - 2092;
+    charset LWRh_2nd = 1612 - 2092 \ 3;
+    charset LWRh_3rd = 1613 - 2092 \ 3;
+    charset LWRh_1st = 1614 - 2092 \ 3;
+    charset 28S = 2093 - 3246;
+    charset 28S_Stem = 2160 - 2267 2361 - 2401 2489 - 2528 2539 - 2565 2577 - 2647 2671 - 2760 2768 - 2827 2848 - 3194 3220 - 3246;
+    charset 28S_Loop = 2093 - 2159 2268 - 2360 2402 - 2488 2529 - 2538 2566 - 2576 2648 - 2670 2761 - 2767 2828 - 2847 3195 - 3219;
+    partition Names = 5 : morphology , COI , EF1a , LWRh , 28S;
+    partition Nopart = 2 : morphology , molecules;
+    partition Morph_mito_nucl_ribo = 4 : morphology , COI , EF1a LWRh , 28S;
+    partition Extreme = 12 : morphology , COI_1st , COI_2nd , COI_3rd , EF1a_2nd , EF1a_3rd , EF1a_1st , LWRh_2nd , LWRh_3rd , LWRh_1st , 28S_Stem , 28S_Loop;
+END;
+BEGIN MRBAYES;
+    set partition = Names;
+    lset applyto = ( 2 , 3 , 4 , 5 ) nst = 6 rates = invgamma;
+    unlink shape = ( all ) pinvar = ( all ) statefreq = ( all ) revmat = ( all );
+    prset ratepr = variable;
+END;
diff --git a/test/NTSValidOut/distances.nex b/test/NTSValidOut/distances.nex
new file mode 100644
index 0000000..5a34959
--- /dev/null
+++ b/test/NTSValidOut/distances.nex
@@ -0,0 +1 @@
+#NEXUS
BEGIN TAXA;
    TITLE Untitled_TAXA_Block_1;
    DIMENSIONS NTax = 10;
    TAXLABELS SA_NCA SD_NCA TX_NCA AZ_NCA M1_NCA M2_NCA M3_NCA SD_CA BA_CA M_CA;
END;
BEGIN DISTANCES;
    TITLE Untitled_DISTANCES_Block_1;
    LINK TAXA = Untitled_TAXA_Block_1;
    FORMAT Missing = ? Triangle = Lower Diagonal;
MATRIX
SA_NCA      0.0
SD_NCA      2.684 0.0
TX_NCA      8.052 12.068 0.0
AZ_NCA      3.191 1.222 8.716 0.0
M1_NCA      17.317 18.715 7.13 12.276 0.0
M2_NCA      7.238 12.653 3.791 8.115 4.41 0.0
M3_NCA      40.533 46.737 14.716 35.963 14.54 19.157 0.0
SD_CA       150.618 149.292 139.763 141.003 138.679 139.287 151.536 0.0
BA_CA       139.062 139.891 131.434 132.273 132.68 129.508 145.829 1.541 0.0
M_CA        180.366 181.504 165.039 170.901 161.617 162.495 169.179 2.848 4.829 0.0;
END;
\ No newline at end of file
diff --git a/test/NTSValidOut/dzmissing_bug.nex b/test/NTSValidOut/dzmissing_bug.nex
new file mode 100644
index 0000000..812e48d
--- /dev/null
+++ b/test/NTSValidOut/dzmissing_bug.nex
@@ -0,0 +1,97 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 19;
+    TAXLABELS _I._princeps _D._bidentata T._digitatus T._uintanus E._psychrophila T._tolli W._directa G._rubens G._rufipes O._gibosus S._montigenus S._quoylei S._panopeus S._montanus S._crossoclavis S._cynthiae S._orites S._nesides S._aenigmaticus;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=49;
+    FORMAT Datatype=Standard  Gap=- Symbols="01";
+Matrix
+_I._princeps        0010000011001010010100?01000101100--?--1000011000
+_D._bidentata       001000100??01010001000?00??0000000--?--0100011010
+T._digitatus        100?001010?01110000001100??000011110?001001111000
+T._uintanus         1010001010?01110000101100??0001110--?--1000???000
+E._psychrophila     0011100011101000011010?1100010011110?001010011001
+T._tolli            001000000??01001001011100??01001010-?-01000010111
+W._directa          1010000010?00-00000001110??010110111000100010?011
+G._rubens           101001000??10--1010001111100101110--?--1110010011
+G._rufipes          10101001-??10-11110001101100101101110001000010111
+O._gibosus          10100011-??10-11010001110??01001110-?-00001110111
+S._montigenus       110?1111-??10-11111101110??0100011110001000011000
+S._quoylei          11101111-??10-11111101110??0100011110001000011000
+S._panopeus         11100111-??10-11110101010??0100011111001000011000
+S._montanus         11100111-??10-111100010110?0100011111001000011000
+S._crossoclavis     11110111-??10-111101010110?0110011111001100011000
+S._cynthiae         11111111-??10-111100010110?0110011111011100011000
+S._orites           11111111-??10-111100011110?0110011111111100011000
+S._nesides          11111111-??10-111100011110?1110011111111100011000
+S._aenigmaticus     ?????????????????????11111111100111111111???11?00
+;
+END;
+BEGIN ASSUMPTIONS;
+    LINK CHARACTERS = Untitled_DATA_Block_1;
+    OPTIONS DefType = unord PolyTCount = MinSteps;
+END;
+BEGIN MACCLADE;
+    Version 4.0 87;
+    LastModified - 972251376;
+    FileSettings editor 0 0 1 1;
+    Singles 100;
+    Editor 00011001111111100100010010 0 24 Geneva 9 100 1 all;
+    EditorPosition 46 53 819 1371;
+    TreeWindowPosition 46 6 835 1390;
+    ListWindow Characters closed Geneva 9 50 10 273 352 000;
+    ListWindow Taxa closed Geneva 9 50 10 273 490 100000000;
+    ListWindow Trees closed Geneva 9 50 10 276 490;
+    ListWindow TypeSets closed Geneva 9 50 10 276 490;
+    ListWindow WtSets closed Geneva 9 50 10 276 490;
+    ListWindow ExSets closed Geneva 9 50 10 276 490;
+    ListWindow CharSets closed Geneva 9 50 10 276 490;
+    ListWindow TaxSets closed Geneva 9 50 10 276 490;
+    ListWindow CharPartitions closed Geneva 9 50 10 276 490;
+    ListWindow CharPartNames closed Geneva 9 50 10 276 490;
+    ListWindow WtSets closed Geneva 9 50 10 276 490;
+    ChartWindowPosition 52 30 818 1380;
+    StateNamesSymbols closed Geneva 9 10 50 30 148 220;
+    WindowOrder Data;
+    OtherSymbols & / 00 ? -;
+    Correlation 0 0 1000 0 0 10011010;
+    Salmo 00000001;
+    EditorFile 2;
+    ExportHTML _ MOSS 100 110000;
+    PrettyPrint 10;
+    EditorToolsPosition 707 93 115 165;
+    TreeWindowProgram 10;
+    TreeWindow 0000;
+    Continuous 0 3 1;
+    Calculations 0000001;
+    SummaryMode 0 0 0;
+    Charts Geneva 9 ( normal ) 0010;
+    NexusOptions 0 0 50 001011001;
+    TipLabel 1;
+    TreeFont Geneva 9 ( normal );
+    TreeShape 1.0 1.0 0100;
+    TraceLabels 0101;
+    ChartColors 0 0 65535 9 0 1;
+    ChartBiggestSpot 1;
+    ChartPercent 10;
+    ChartBarWidth 10 1;
+    ChartVerticalAxis 10101;
+    ChartMinMax 0;
+    TraceAllChangesDisplay 1 1;
+    BarsOnBranchesDisplay 0 0 60000 10000 10000 10000 10000 60000 65000 65000 65000 6 1 0000101;
+    ContinuousBranchLabels 0;
+    AllStatesBranchLabels 1;
+    IndexNotation 2 1;
+    PrintTree 10.00 2 2 2 2 2 2 2 2 2 2 2 Geneva 9 ( normal ) Geneva 10 ( normal ) Geneva 9 ( normal ) Geneva 9 ( normal ) Geneva 9 ( bold ) Geneva 9 ( normal ) Geneva 9 ( normal ) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 '-8193' '-39' 4 '-40' 0 1 2 1 8 0 0 0 2 1000111000000000000100000111000;
+    MatchChar 00 .;
+    EntryInterpretation 01;
+    ColorOptions 00;
+    TreeTools 0 5 4 0 10 4 0 00100111111101110;
+    EditorTools 0 0 0 1000 0 0 6 3 1 100010101110011;
+    PairAlign 2 2 3 2 1 1 2 1 3 1010;
+    BothTools 1;
+END;
diff --git a/test/NTSValidOut/kim.nex b/test/NTSValidOut/kim.nex
new file mode 100644
index 0000000..0f8046e
--- /dev/null
+++ b/test/NTSValidOut/kim.nex
@@ -0,0 +1,76 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 27;
+    TAXLABELS Orsodacne Chrysomela Altica Agelastica Monolepta Phyllobrotica Allochroma Chrysolina Aphthona Chaetocnema Systena Monocesta Disonycha Blepharida Galeruca Orthaltica Paropsis Timarcha Zygograma Syneta Dibolia Sangariola Aulacophora Diabrotica Diorhabda Schematiza Oides;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=1742;
+    FORMAT Datatype=MIXED(RNA: 1-516, RNA: 517-1398, Protein: 1399-1692, Standard: 1693-1742)  Gap=-;
+Matrix
+Orsodacne         GGGUAAACCUNAGAAACCCNAAAGGUCGAAUGGGGAAAUUCAUUCRCGUUUCNAA--CRUSGGS-NC-----CG--GGUYRACGNCGAGACGGGCN-CGCCG-UUCGCR-CCAC-------GCUCGCUCCGUCGUCC-GGCGCGCCCGGCGUCGAACGCGUGCACUUUUCCCCUAGUAGGACGUCGUGAUCCGUUGGACGUCGGUCUACGGCCCGCCGGUUAGCCCGUCCGGGGUAAACGCUUCGCGGCGUCCCGGGCGGACCGGCGGUGU---CCCGGCCGGCUCGUCCGACGGUAAGAAUUAGGCGCGGGGCCGCUA--CCACU-CGGUUAGCGUCCGGCCCGCCGCAAGCACGUCCGGCGUUCGGCACGGCGAU-CGRACCCGGUGCCGGUCCCGUCCCCCGGCGACUGUUGGCGGCGGAGCU-------CUCGGACAGACCUCCGUU------------------AAACG [...]
+Chrysomela        GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGUC--UGCCGGC-GGUGAG-CG--GGUGCGUGACGAACGGUG---------UUCG---CGCC-------GUUCGCGCUGCUCGUUUUCUGGCACCGGUGACGAACGCGUGCACUUUUCCCCUAGUAGGACGUCGCGAUCCGUUGGGUGUCGGUCUAAGGCUCGAGGUGGAGCCCGCGUGGUCGCUUCGGCGU-------GUCGCGCGGACCCUCGAAAU---CCUGGCCGACUUGCUCGACGGUAUAAGGAAGGCGCGAGGCCGCUA-----CU-CAGUUAGCGUUCGGCUCGCGGCAAGCGCGUUCGGCGU--UUACGGCGA-U-CGGACCUGGUGCCGAUUCUGUCCCCGGACGACUGUUGGCCGCGAUGCU-------CUCGAACAGACCUCGAAUCUC--------------GAAACG [...]
+Altica            ----------------CCCGAAAGGUCGAAAGAGGAAAUUCAUUCGCGUCUCGAC--UGUCGGA-GUUGAA-AG--UUUGUGUGACGGAUUACG---------UUUA---CGUC-------GUCCGCGCCUCUCGUU-CUUCGAACCGAUGUGGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGACUUGGGGUGGAGCCCACAUGGCUUUU--------------GUCGCGUGGACCCUCGAUGU---UCCGACAGACUCGCUCGACGGUAUGCUAAAGGCGCGGGGCCGCUA-----CU-CAGUUAGCGUUCGGCCCGUAGCAAGCACGUUCUGUGU--UUGACGGUGAU-CGGACCUGGUGCCGAUUCUGUCCCAGAACGACUGUUGGUUGCGGUGUU-------CUCGAACAGACCUCGUU------------------GAAACG [...]
+Agelastica        GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGAGGAAAUUCAUUCGCGUUUCGAU--CGUCGAA-GUCGAA-CG--UUCGUAUGACGAACGACGU--------UUCG--GCGUC-------GUUUGCUUCCUACGUU-UUUCUAAUCGAUGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGACUCGGGGCGGAGCCCGUGCGGUUAUUAUUAUUUUA-----AUCGUGCGGACCCUCGAUGU---UCCGACAGACUCGCUCGACGGUACGCUAAUGGCGUGGGGCCGCUA------UCUUUUUAGCGUUCGGCCCGUAGCAAGCGCGUUUUGUGU--UUGACGGUCAU-CGGAUCUAACGCCGAUCUCGUCCCGAAACGACUGUUGGUUACGGCGUU-------CUCGAACAGACCUCAUCGUUCGAUUUUUCGAAAUCGAAACG [...]
+Monolepta         GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGAGGAAAUUCAUUCGCGUUUCGGC---GUCGAA-GUUAAG-CG--UUUGUAUGACGAAAGAUGU--------UUCG--GCGUU-------UUUUGCUUCUUACGUU-UUUCGAGUCGAUGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAGGGUUCGAGGUGGAGCCCACGUAAUUUC--------------GAUUGCGUGGACCCUUGAUGU---CCCGACAGACUCGCUCGACGGUAUGCUAAUGGCGUAAGGCCGCUA-----CUUAAGUUAGCGUUCGGCCCGUAGCAAGCGCGUUCUGUG---UUGACGGCCAU-CGGACCUGGUGCCGAUUCUGUCCCGGAACGACUGUUGGUUGCGGUGUU-------CUCGAACAGACCUUAUAUUU---------------GAAACG [...]
+Phyllobrotica     ---------UGANAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGGC--UGUCGAA-GUUGAA-UG--UAUGUAUGACGGAUGGCGU--------UUCG--ACGUC-------GUCUGCAUCUUGCGUU-CUUCAAGUCGAUGUCGAACGCGUGCACUUUUCCUCUAGUAGAACGUCGCGAUCCGUUGGGUGUCUGUCUAAGGUGUGAGGUGUAGCCCACGCGAUUUUU-------------GAUCGUGUGGACCCUCGAUAU---CCCGACAGACUCGCUCGACGGUAUACUAAUGGCGCGAGGCCGCUA-----CUUAAGUUAGCGUUCGGCCCGUAGCAAGCACGUUCUGCGU--UWGAUGGWCAU-CGGACCUGGUGCCGAUCCUGUCCCGGAACGACUGUUGGUUACGGNGUU-------CUCGAACAGACCUCNAUUAU---------------GAAACG [...]
+Allochroma        GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGGC--UGUCGGA-GUUGGA-UG--UUCGUGUGACGGAUGACG---------UUCA---CGUC-------GUUUGCACCUUACGUC-UUUCGAAUCGACGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGACUCGGGGUGGAGUCCACGUGGCUUUU-------------GGUCGCGUGAACCCUCGAUGU---GCCGACAGACUCGCUCGACGGUAUGCUAAUGGCGCGGGGCCGCUA-----CU-CAGUUAGCGUUCGGCCCGUGGCAAGCACGUUCUGUGU--UUGACGGCGAU-CGGACCUGGUGCCGAUUCUGUCCCGGAACGACUGUUGGCUACGGUGUU-------CUCGAACAGACCUCGUU------------------GAAACG [...]
+Chrysolina        GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAU--CGUUGGC-GAUUGA-CG--GACUAGUGACGGAUGGCG---------UUCG---CGUC-------GUCUGCGCAGUCUGUU-UAUCGAACUGACGUCGAACGCGUGCACUUUUCCCCUAGUAGGACGUUGCGAUCCGUUGGGUGUCGGUCUAAGGCCCGAGGUGGAGCCCACGUGAACGUUUCGGCG--------UUUGCGUGGACCCUCGGUGU---CCCGGUCGACUCGCUCGACGGUAUAAUGAUGGCGCGGGGCCGCUA-----CU-UAGUUAGCGUUCGGCUCGUGGCAAGCGCGUUCGGUGU--UUGACGGCGAU-CGGACCUAGUGCCGAUCCUGUCCCCGGGCGACUGUUGGCUGCGAUGUC-------CUCGAACAGACCUCGUU------------------GAAACG [...]
+Aphthona          GGGUAACCCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGGC--CGUCAGA-GGU-GA-UG--UUGU-GUGACGGAUGGCG---------UUCG---CGUC-------GUCUGCGCCUUGCGUC-CAUCUAACUGGCGUCGAACGCGUGCACUUUUCCCCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGACUCGGGGUGGAGCCCAGAUGACCACG--------------GUCGUUUGGACCCUCGAUGU---UCCGACAGACUCGCUCGACGGUAUGCUAAAGGCGCGGGGCCGCUA------UUCAGUUAGCGUUCGGCCCGUAUCAAGCACGUUCUGCGU--UUGAUGGCGAU-CGGAUCUGAUGCCGAUUCUGUCCCGGAACGACUGUUGGGUGCGGUGUU-------CUCGAACAGACCUCGUU------------------GAAACG [...]
+Chaetocnema       ----------------CCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAC--CGUCGGA-GUUGGA-CG--UUCGAGUGACGGACGACG---------UUCG-CGCGUC-------GUCUGCGCCGUUCGUU-CAUCGAACUGACGUCGAACGCGUGCACUUUUCCCCUAGUAGGACGUCGCGAUCCGUUGGGUGUUUGUCUAAGACUUGAGGUGGAGCCCGCGAGACUUA--------------GGUCGCGCGGACCCUUGAUGU---UCCGACCAACCCGCUCGACGGUAUACGAAUGGCGCCGGGCCGCUAC---ACU-UAGUUAGCGUUCGGGCCGUAGCAAGCACGUUCCGCGU--UUGACGGCGAU-CGGACCUGGUGCCGAUUCUGUCCCGGAACGACUGUUGGUUACGGUGUU-------CUCGAACAGACC-CGUU------------------GAAACG [...]
+Systena           ---CCGACCUGAGAAACCCGAAAGGUCGAAAGAGGAAAUUCAUUCGCGUUUCGAUUUUGUCGGA-GUUGAG-CG--UUUCGGCGACGAAUGACG---------UUUUAUAUGUC-------GUUUGAGUCAUUCGUU-CUUCGAACCGAUAUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGACCCGAGGUGGAGUCCACGAAGCGUUUUUC-----------GCUUCGUGAACCCUUGGUGUAUAUCCGACAGACUCGCUCGACGGUAUGCAAAUGGCGCGAGGCCGCUA-A--A---CAAUUAGCGUUCGGCUCGUAGCAAGCACGUUCCGUGU--UUGAUGGUGAU-CGGACCUAGUGCCGAUUCUGUCCCGGAAUGACUGUUGGUUGCGAUGUU-------CUCGAACAGACCUCGUU------------------GAAACG [...]
+Monocesta         ----------GAGAAACCCGAAAGGUCGAAAGAGGAAAUUCAUUCGCGUUUCGAU--CGUCGAAAGUUGAA-UGUAUUUGUAUGACGGAUGACGUGUGUGCGCUUCGGCUCUCUCAUGUUUAUCCGCAUAUUAUAUU-CUUCGAAUCGAUAUCGAACGCGUGCACUUUUCCUCUAGUAGAACGUCGUGAUCCGUUGGGUGUUUGUCUAAGACUCGAGGUGGAGCCCACAUGAUUUUUUGUC---------GAUUAUGUGGACCCUCUAUGUUCUUCCGACAGACUCGCUCGACGGUAUAAAUAUGGCGCGGGGCCGCUACACAUUA-CAGUUAGCGUUCGGCCCGUAGCAAGCACGUUUCGUGU--UUGACGGCGAU-CGGACCUAGUGCCGAUUCUGUCCCGGAACGACUGUUGGUUACGGUGUUUUUUUAUCUCGAACAGACCUCGUUU-----------------GAAACG [...]
+Disonycha         -------------AAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAU--GAUCGAA-GGCUGG-CG--UGUUUAUGACGGAUCGUAUA-------????U---UUUUAUAUU-GUUCGCAUAUCACGUU-CGUUUAAUCGAUUUCGAACGCGUGCACUUUUCCUCCAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGAAUUGAGGUGGAGACCAUGUGGCUUUUU------------AGUUGCUUGGACCCUUGAAUU---UCCGACAGACUCGCUCGACGGUAUAACGAUGGCGCAAGGCCGCUAC--AUU--CAGUUAGCGUUCGGCCCGUAGCAAGCGCGUUCUGUGU--UUGACGGCAAUUCGGACCUAGCGCCGAUUCCGUUCCAGAACGACUGUUGGUUGCGGUGCU-------CUCGAACAGACCUUGUU------------------GAAACG [...]
+Blepharida        ----------------CCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCAGC--CGUUGGA-GUUGAA-CG--UUCGCGUGACGGACGACG---------UUCG---CGUC-------GUUUGCGCCUUUCGUU-CUACUAACCGACGUUGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGACUCGGGGUGGAGCCCGCGUGGCAUUUU-------------GUCGCGCGGACCCUCGAAGU---UCCGACAGACUCGCUCGACGGUAUGCUAAUGGCGCGGGGCCGCUA------UUCAGUUAGCGUUCGGCCCGUAACAAGCACGUUCUGCGU--UUGACGGCGAU-CGGACCUGGUGCCGAUUCUGUCCCGGAACGACUGUUGGUUGCGGUGUU-------CUCGAACAGACCUCGUU------------------GAAACG [...]
+Galeruca          GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGAGGAAAUUCAUUCGCGUUUCGAU--CGUUGAA-GUUGAA-UG--UUUGUAUGACGGAUGAUGU------GCUUCG--GCGC--AUGU--GUUUGCAUCUUAUGUU-CUUCGAAUCGAUGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGUGAUCCGUUGGGUGUCUGUCUAAGACUCGGGGUGGAGACCACGUGAUUUUUC------------GAUUAUGUGGACCCUCGAUGU---UCCGACAGACUCGCUCGACGGUAUAAAUAUGGCGCGGGGCCGCUA-----CAUUAGUUAGCGUUCGGCCCGUAGCAAGCACGUUUCGCGU--UUGACGGCGAU-CGGACCUAGUGCCGAUUCUGUCCCGGAACGACUGUUGGUUACGGUGUU-------CUCGAACAGACCUCGUUUU----------------GAAACG [...]
+Orthaltica        GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGGC--CGUCGGA-GUUGUG-CG--UUCGUGUGACGGAUGGCG---------CUU---GCGUC-------GUCCGCGCCUUACGUG-CUUCGAACCGGCGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGGCUUGGGGUGGAGCCCACGUGGACGUUUCACGACGUA----UCCGCGUGGACCCUCGACGU---CCCGGCAGACUCGCUCGACGGUACAUAGAUGGCGUGGGGCCGCUA-----CU-CAGUUAGCGUUCGGCCCGUAGCAAGCGCGUUCUGUGU--UUGAUGGCGAU-CGGACCUGGUGCCGAUUCUGUCCCAGAACGACUGUUGGCUGCGGUGUU-------CUCGAACAGACCUCUUU------------------GAAACG [...]
+Paropsis          GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAC--UGUCGGC-GAUAAG-UG--AUCUAGUGACGGAUGGCG---------UUCG-CGCGUC-------GUCUGCGCAGUUUAUU-UAUCGAACCGGCGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUUGCGAUCCGUUGGGUGUCGGUCUAAGGCUCGAGGUGGAGCCCACGUGGACGUUUCGGCG--------UUCGCGUGGACCCUCGGUGU---CCCGGCCGACUCGCUCGACGGUAUAAUGAUGGCGCGGGGCCGCUA-----CU-CAGUUAGCGUUCGGCUCGUGGCAAGCACGUUCGGUGU--UUGACGGCGAU-CGGACCUAGUGCCGAUCCUGUCCCCGUACGACUGUUGGCUGCGAUGUU-------CUCGAACAGACCUCGUU------------------GAAACG [...]
+Timarcha          -----AACCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAU--UGUCGGC-GAUAAA-CG--AGCGAGUGACGGACGACGU----ACG-UUCG-CGCGUAC--GUU-UUCUGCUUCUUUCGUU-UAGGUAA-CGACGCCGAACGCCUGCACUUUUCCCCUAGUAGGACGUCGCGAUCCGUUGGGUGUCGGUCUAAGGCUCGCGGUGGAGCCCGCGCGGUUUAUA-------------GCCGCGCGGACCCGCGAUAU---CCCGACCGACCUGCUCGACGGUAUAAAGAUGGCGCGAGGCCGCUACUUCGUA-GAAUUAGCGUUCGGCCCGUAGCAAGCGCGUUCGUCGU--UAGACGGCGAU-CGGACCUAGCGCCGGUCCUGUCCGCGAACGACUGUUGGCUGCGGUGAU-------CUCGAACAGACCUCGUC------------------GAAACG [...]
+Zygograma         GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGGU--CGUCGGC-UAUCGA-CG--GGCUAGUGACGG-UCGGCG--------UUCG---CGUC-------GUCUGCGCAGUCUGUC-GAUUGAACCGAUAUCGAACGCGUGCACUUUUCCCCUAGUAGGACGUUGCGAUCCGUUGGGUGUCGGUCUAAGGCUCGAGGUGGAGCCCACGCGAACGUUUCGGCGUC------UUCGCGUGGACCCUCGAUGU---CCCGGCCGACUCGCUCGACGGUAUAAUGAUGGCGCGGGGCCGCUA-----CA-UAGUUAGCGUUCGGCUCGUGGCAAGCGCGAACGGCGU--UUGACGGCGAU-CGGACCUAGCGCCGAUCCUGUCCCCGUUCGACUGUUGGCUGCGAUGUU-------CUCGAACAGACCUCGUC------------------GAAACG [...]
+Syneta            -----GAACUUACAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAC--CGUCGAU-GACGAG-CG--GUCGAGUGACGGAUGGCG---------UUCG---CGUC-------GUCCGCGCCUUCUGUU-CGUAGAAUCGGCGUCGAACGCGUGCACUUUUCCCCUAGUAGGACGUCGCGAUCCGUUGGGUGUCGGUCUAAGGCCCUCGGUGGAGCCCAGUAGACGUUUCGAC----------GUUGCGUGGACCCGAGGCGU---CCCGGCCGGCCCGCUCGACGGUAUCAUUAAGGCGCGAGGCCGCUA-----CUACAGUUAGCGUUCGGCCCGCGGCAAGCACGUUCGGCGU--UUGACGGAGAU-CGGACCUAGUGCCGGUGCCGUCCCCGAGCGACUGUUGGCCGUGGUGUU-------CUCGAACAGACCUCGUCG-----------------AAAACG [...]
+Dibolia           GGGUAAACCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGGC-UCGUCGGA-GGAGAA-CG--UCGGCGUGACGGAUGACG---------UUCG-CGCGUC-------GUUCGCACCCUUCGUU-CUUUUUACCGGCGUCGAACGUGUGCACUUUUCCUCUAGUACCACGUCGCGAUUCGUUGGGUGUCUGUCUAAGACUCGAGGUGGAGCCCGCGCGAUUU------------AAACGUCGC-CGGACCCUCGAUGC---UCCGACAGACUCGCUCGACGGUAUGCUAAUGGCGCGAGGCCGCUA-------UCAAUUAGCGUUCGACCCGUAGCAAGCGCGUUCCGCGU--UUGACGGCGAU-CGGAUCUGAUGCCGAUUCUGUCCCGGAACGACUGUUGGUUACGGUGUUUU---AUCUCGAACAGACCUCGUC------------------GAAACG [...]
+Sangariola        ----------------CCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAC--UGUCGGA-GUUGGA-CG--UUCGAGUGACGGACGACG---------UUUG---CGCG-------GUUUGCGCCUUACGUU-UAUCGAACCGACGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUUUGUCUAAGACUCGAGGUGGAGUCCACGUGGCUUUU-------------GGUCGCGUGAACCCUUGAUGU---GCCGACAGACUCGCUCGACGGUAUGCUAAUGGCGCGGGGCCGCUA-----CUCUAGUUAGCGUUCGGCCCGUAGCAAGCACGUUCUGUGU--UUGACGGCGAU-CGGACCUGGUGCCGAUUCUGUCCCGGAACGACUGUUGGCUGCGGUGUU-------CUCGAACAGACCUCGUU------------------GAAACG [...]
+Aulacophora       -----------AGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCCCUUUUCGGC--UGUCGAC-GUUAAA-CG--UUUAUACGACGGAUGGCGU--------UUCG--GCGUC-------GUCUGCGUUUUAUGUU-UUUCGAAUCGAUGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGGUUCGAAGUGGAGACCACGCGAUUUUUUU-----------GAUCGUAUGGACCUUCGUUAU---CCCGACAGACUCGCUCGACGGUAUACUAAUGGCGCGAGGCCGCUA-----UUUUAAUUAGCGUUCGGCCCGUAGCAAGCACGUUCUGCGU--UUGACGGCCAU-CGGACCUGGUGCCGAUUCUGUCCCGGAACGACUGUUGGUUGCGGUGUU-------CUCGAACAGACCUCGUUU-----------------GAAACG [...]
+Diabrotica        GGGUAAACCUGAGAAACCCGAAAG-UCGAAAGAGGAAAUUCAUUCGCGUUUCGAC--UGUCGAA-GUUGGA-UG--UUUGUAUGACGGAUAGCGU--------UUCG--GCGUC-------GUCCGCUUCUUAUAUU-CUUCGUGUCGAUGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUCUGUCUAAGACUCGAGGUGGAGCCCGCGUAAUUUUU-------------AAUUAUGCGGACCCUUGGUGU---UCCGACAGACUCACUCGACGGUAUACUAAUGGCGCGGGGCCGCUA-----CUUUAGUUAGCGUUCGGCCCGUAGCAAGCACGUUCUGUGU--UUGACGGCGAU-CGGACCUGGUGCCGAUUCUGUCCCAGAACGACUGUUGGUUACGGUGUU-------CUCGAACAGACCUCGUAU-----------------GAAACG [...]
+Diorhabda         -----------AGAAACCCGAAAGGUCGAAAGAGGAAAUUCAUUCGCGUUUCGAU--AAUUGAA-GUUGAACCG--UUUGUAUGACGGAUAUUGU--UUGUGUUUCGGCAUAUUAC-AAUAAAUCGCGUUUUACGUU-UUUCUAAUCGAUAUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGUGAUCCGUUGGGUGUCUGUCUAAGACUCGAGGUGGAGACCACUUGAUUUUAUUC---------GAAUUAGGUGGACCCUCGAUGU---UCCGACAGACCCGCUCGACGGUAGAAAUAUGGCGCGGGGCCGCUA-----GAUUAAUUAGCGUUCGGCCCGUAGCAAGAGCGUUUCGUGU--UUGACGGUAAU-CGGACAUAAUGCCGAUUCUGUCCCGGAACGACUGUUGGUUACGGUGUU-------CUCGAACAGACCUCGUUUU----------------GAAACG [...]
+Schematiza        -----????UGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAU--CGUCUAC-GUUAAA-UG--UUUGUAUGACGGAUGAGAUA-CGUCG-UUCGCGGCGCCU----GAGUCCGCAUCUUAUGUU-UAUCUAAUAGAUGUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGUGAUCCGUUGGGUGUCUGUCUAAGGCUCGGGGUGGAGCCCACGUGAUUUUUU------------AAUUAUGUGGACCCUCGAUGU---UCCGACAGACUCGCUCGACGGUAUACAUAUGGCGCGGGGCCGCUA-----CA-CAGUUAGCGUUCGGCCCGUAGCAAGCACGUUUCGCGU--UUGACGGCGAU-CGGACCUAGUGCCGAUUCUGUCCCGGAACGACUGUUGGUUACGGUGUU-------CUCGAACAGACCUCGACUU----------------GAAACG [...]
+Oides             GGGUAACCCUGAGAAACCCGAAAGGUCGAAAGGGGAAAUUCAUUCGCGUUUCGAU--UGUUGAU-AUCGAG-CA--UUAGUAUGACGGUAAACGU--------UUCGAUGU---------UUAUUGCAUCUUUUGGU-CUUUUAAUCGAUAUCGAACGCGUGCACUUUUCCUCUAGUAGGACGUCGCGAUCCGUUGGGUGUUUGUCUAAGGUUUGAGGUGGAGCCCGCGUGAUUUCUU------------AAUUGCGCGGACCCUCAUUAU---CCCGACAGACUCGCUCGACGGUAUAUUGAUGGCGCGGGGCCGCUA-----CUUUAGUUAGCGUUCGGCCCGUAGCAAGCACGUUCUGUGU--UUGACAGUCAU-CGGACCUGGUGCCGAUUCUGUCCCGGAACGACUGUUGGUUACGGUGUU-------CUCGAACAGACCUCGUUUU----------------GAAACG [...]
+;
+END;
+BEGIN MRBAYES;
+    pairs 22 : 497 , 21 : 498 , 20 : 499 , 19 : 500 , 18 : 501 , 17 : 502 , 16 : 503 , 33 : 172 , 34 : 171 , 35 : 170 , 36 : 169 , 37 : 168 , 38 : 167 , 45 : 160 , 46 : 159 , 47 : 158 , 48 : 157 , 49 : 156 , 50 : 155 , 51 : 154 , 53 : 153 , 54 : 152 , 55 : 151 , 59 : 150 , 60 : 149 , 61 : 148 , 62 : 147 , 63 : 146 , 86 : 126 , 87 : 125 , 88 : 124 , 89 : 123 , 187 : 484 , 186 : 485 , 185 : 486 , 184 : 487 , 183 : 488 , 182 : 489 , 191 : 295 , 192 : 294 , 193 : 293 , 194 : 292 , 195 : 291  [...]
+    charset ambiguously_aligned = 92 - 103 108 - 122 234 - 251 320 - 327 449 - 468;
+    charset stems = 22 497 21 498 20 499 19 500 18 501 17 502 16 503 33 172 34 171 35 170 36 169 37 168 38 167 45 160 46 159 47 158 48 157 49 156 50 155 51 154 53 153 54 152 55 151 59 150 60 149 61 148 62 147 63 146 86 126 87 125 88 124 89 123 187 484 186 485 185 486 184 487 183 488 182 489 191 295 192 294 193 293 194 292 195 291 196 290 197 289 198 288 199 287 200 286 201 283 202 282 203 281 204 280 205 279 206 278 213 268 214 267 215 266 216 265 217 264 226 259 227 258 228 257 229 256  [...]
+    charset loops = 1 - 15 23 - 32 39 - 44 52 56 - 58 64 - 85 90 - 122 127 - 145 161 - 166 173 - 181 188 - 190 207 - 212 218 - 225 234 - 251 260 - 263 269 - 277 284 285 296 - 303 309 - 315 320 - 331 342 350 362 - 368 374 375 378 382 - 389 395 401 409 410 415 423 - 434 441 - 472 478 - 483 490 - 496 504 - 516;
+    charset rna = 1 - 516;
+    charset dna = 517 - 1398;
+    charset protein = 1399 - 1692;
+    charset morphology = 1693 - 1742;
+    charset D2 = 1 - 516;
+    charset EF1a = 517 - 936;
+    charset EF1a1st = 517 - 936 \ 3;
+    charset EF1a2nd = 518 - 936 \ 3;
+    charset EF1a3rd = 519 - 936 \ 3;
+    charset CO1 = 937 - 1398;
+    charset CO11st = 937 - 1398 \ 3;
+    charset CO12nd = 938 - 1398 \ 3;
+    charset CO13rd = 939 - 1398 \ 3;
+    charset CO1aa = 1399 - 1552;
+    charset EF1aa = 1553 - 1692;
+    charset Morpho = 1693 - 1742;
+    partition by_gene_and_pos = 10 : rna , EF1a1st , EF1a2nd , EF1a3rd , CO11st , CO12nd , CO13rd , CO1aa , EF1aa , Morpho;
+    partition by_gene = 6 : rna , EF1a , CO1 , CO1aa , EF1aa , Morpho;
+    partition by_gene_and_struct = 7 : stems , loops , EF1a , CO1 , CO1aa , EF1aa , Morpho;
+    exclude ambiguously_aligned;
+    set partition = by_gene_and_struct;
+    lset applyto = ( 4 ) code = metmt;
+    lset applyto = ( 1 ) nucmodel = doublet;
+    lset applyto = ( 2 ) nucmodel = 4by4;
+    lset applyto = ( 3 , 4 ) nucmodel = codon;
+    lset nst = 6;
+    prset ratepr = variable;
+    prset aamodelpr = mixed;
+    mcmcp ngen = 10000 nchains = 1 printfreq = 10;
+END;
diff --git a/test/NTSValidOut/linktest.nex b/test/NTSValidOut/linktest.nex
new file mode 100644
index 0000000..a2a5290
--- /dev/null
+++ b/test/NTSValidOut/linktest.nex
@@ -0,0 +1,92 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE firstt;
+    DIMENSIONS NTax = 6;
+    TAXLABELS P._fimbriata P._robusta P._americana P._myriophylla P._polygama P._macrophylla;
+    blockid bogus;
+END;
+BEGIN TAXA;
+    TITLE second;
+    DIMENSIONS NTax = 6;
+    TAXLABELS P._fimbriata X._robusta P._americana N._myriophylla P._polygama P._macrophylla;
+    blockid bogus2;
+END;
+BEGIN CHARACTERS;
+    TITLE firstchars;
+    LINK TAXA = firstt;
+    DIMENSIONS NChar=45;
+    FORMAT Datatype=DNA  Gap=-;
+Matrix
+P._fimbriata       RCCTCGGCTTAACGAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._robusta         (AC)CCTCGGCTTAACCAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._americana       RCGTCGCTTTCA---ACGTCGCTTTCACCAACGTCGCTTTCACCA
+P._myriophylla     ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._polygama        ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._macrophylla     ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTCGCTTTCACCA
+;
+END;
+BEGIN CHARACTERS;
+    TITLE second_chars;
+    LINK TAXA = second;
+    DIMENSIONS NChar=45;
+    FORMAT Datatype=RNA  Gap=-;
+Matrix
+P._fimbriata       YRCUCGGCUUAACGAACCUCGGCUUAACGAACCUCGGCUUAACGA
+X._robusta         NCCUCGGCUUAACCAACCUCGGCUUAACGAACCUCGGCUUAACGA
+P._americana       ACGUCGCUUUCA---ACGUCGCUUUCACCAACGUCGCUUUCACCA
+N._myriophylla     ACGUCGCUUUCA---ACGUCGCUUUCACCAACGUC?CUUUCACCA
+P._polygama        ACGUCGCUCUCACCAACGUCGCUUUCACCAACGUC?CUUUCACCA
+P._macrophylla     ACGUCGCUCUCACCAACGUCGCUUUCACCAACGUCGCUUUCACCA
+;
+END;
+BEGIN TREES;
+    TITLE first_trees;
+    LINK TAXA = second;
+    TRANSLATE
+        1 P._fimbriata,
+        2 X._robusta,
+        3 P._americana,
+        4 N._myriophylla,
+        5 P._polygama,
+        6 P._macrophylla;
+    TREE one = [&U](1,2,(3,4)5,6);
+END;
+BEGIN TREES;
+    TITLE second_trees;
+    LINK TAXA = firstt;
+    TRANSLATE
+        1 P._fimbriata,
+        2 P._robusta,
+        3 P._americana,
+        4 P._myriophylla,
+        5 P._polygama,
+        6 P._macrophylla;
+    TREE one = [&U](1,2,(3,4));
+END;
+BEGIN SETS;
+    LINK CHARACTERS = firstchars;
+    CHARSET p = 2-7 9-12 14-24 \ 2 44 45;
+    CHARSET r = 2-12 15-24 \ 3 44 45;
+END;
+BEGIN SETS;
+    LINK TAXA = second;
+    TAXSET p = 1-5 \ 2;
+END;
+BEGIN SETS;
+    TITLE mixedupassump;
+    LINK TAXA = firstt CHARACTERS = second_chars;
+    TAXSET o = 1 2;
+    CHARSET o = 1-5 7-11 \ 2 12-24 \ 2 30-45 \ 5;
+END;
+BEGIN SETS;
+    TITLE explicit;
+    LINK TAXA = firstt CHARACTERS = second_chars;
+    TAXSET o = 1 2;
+    CHARSET oe = 1-5 7-11 \ 2 12-24 \ 2 30-45 \ 5;
+END;
+BEGIN SETS;
+    TITLE explicit2;
+    LINK TAXA = second CHARACTERS = firstchars;
+    TAXSET pe = 1-3 5;
+    CHARSET pe = 2-7 9-12 14-24 \ 2 44 45;
+END;
diff --git a/test/NTSValidOut/m.nex b/test/NTSValidOut/m.nex
new file mode 100644
index 0000000..18584ad
--- /dev/null
+++ b/test/NTSValidOut/m.nex
@@ -0,0 +1,24 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 4;
+    TAXLABELS one_fish two_fish red_fish blue_fish;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=9;
+    FORMAT Datatype=Continuous Items = (X Y );
+    CHARLABELS landmark_1 landmark_2 landmark_3 landmark_4 landmark_5 landmark_6 landmark_7 landmark_8;
+Matrix
+one_fish       (0 1 )  (2 3 )  (5 3 )  (6.5 2 )  (9.5 2.5 )  (9.5 0 )  (6.5 0.5 )  (4 0 )  (2 0 ) 
+two_fish       (0 1.5 )  (2.5 2.8 )  (4.7 3 )  (6.5 2 )  (9.5 2.5 )  (8.5 0 )  (6.5 0.5 )  (4 0 )  (2 0 ) 
+red_fish       (0 1.2 )  (2 3 )  (4.7 3 )  (7.5 2 )  (12.5 2.5 )  (9.5 0 )  (7.5 0.9 )  (4 0 )  (2 0 ) 
+blue_fish      (0 1 )  (2 3 )  (5 3 )  (7.5 2 )  (9 2.5 )  (8.5 0.5 )  (7.5 0.8 )  (4 0 )  (2 0 ) 
+;
+END;
+BEGIN SETS;
+    LINK CHARACTERS = Untitled_CHARACTERS_Block_1;
+    CHARSET t = 1-5 \ 2;
+    CHARSET u = 1-5 \ 2 6;
+END;
diff --git a/test/NTSValidOut/mdata.nex b/test/NTSValidOut/mdata.nex
new file mode 100644
index 0000000..6028373
--- /dev/null
+++ b/test/NTSValidOut/mdata.nex
@@ -0,0 +1,24 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 4;
+    TAXLABELS one_fish two_fish red_fish blue_fish;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=9;
+    FORMAT Datatype=Continuous Items = (X Y );
+    CHARLABELS landmark_1 landmark_2 landmark_3 landmark_4 landmark_5 landmark_6 landmark_7 landmark_8;
+Matrix
+one_fish       (0 1 )  (2 3 )  (5 3 )  (6.5 2 )  (9.5 2.5 )  (9.5 0 )  (6.5 0.5 )  (4 0 )  (2 0 ) 
+two_fish       (0 1.5 )  (2.5 2.8 )  (4.7 3 )  (6.5 2 )  (9.5 2.5 )  (8.5 0 )  (6.5 0.5 )  (4 0 )  (2 0 ) 
+red_fish       (0 1.2 )  (2 3 )  (4.7 3 )  (7.5 2 )  (12.5 2.5 )  (9.5 0 )  (7.5 0.9 )  (4 0 )  (2 0 ) 
+blue_fish      (0 1 )  (2 3 )  (5 3 )  (7.5 2 )  (9 2.5 )  (8.5 0.5 )  (7.5 0.8 )  (4 0 )  (2 0 ) 
+;
+END;
+BEGIN SETS;
+    LINK CHARACTERS = Untitled_DATA_Block_1;
+    CHARSET t = 1-5 \ 2;
+    CHARSET u = 1-5 \ 2 6;
+END;
diff --git a/test/NTSValidOut/nhxtree.nex b/test/NTSValidOut/nhxtree.nex
new file mode 100644
index 0000000..20715b3
--- /dev/null
+++ b/test/NTSValidOut/nhxtree.nex
@@ -0,0 +1,133 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 8;
+    TAXLABELS A B C D E F G H;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=9;
+    FORMAT Datatype=Protein  Gap=-;
+    CHARLABELS one two three four five six seven eight nine;
+Matrix
+A     THIS-IS-A
+B     THIS-IS-B
+C     THIS-IS-C
+D     THIS-IS-D
+E     THIS-IS-E
+F     THIS-IS-F
+G     THIS-IS-G
+H     THIS-IS-H
+;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 A,
+        2 B,
+        3 C,
+        4 D,
+        5 E,
+        6 F,
+        7 G,
+        8 H;
+    TREE basic_rake = [&R](1:1.0,(2:1.0,3:1.0):3.14159[&&NHX:B=100:D=Y:E=1.1.1.1:S=Primates],4:1.0[&&NHX:Co=Y:D=Y:E=1.1.1.1:S=Primates],5:1.0,6:1.0,7:1.0,8:1.0);
+END;
+BEGIN CODONS;
+    LINK CHARACTERS = Untitled_CHARACTERS_Block_1;
+    CodeSet * UNTITLED = universal : 1-9;
+END;
+BEGIN SETS;
+    LINK CHARACTERS = Untitled_CHARACTERS_Block_1;
+    CHARSET UNTITLED = 1-4 7-9;
+    CHARSET UNTITLEDo = 1 3 4 7-9;
+END;
+BEGIN ASSUMPTIONS;
+    LINK CHARACTERS = Untitled_CHARACTERS_Block_1;
+    TypeSet * UNTITLED = unord : 1-9;
+END;
+BEGIN MESQUITECHARMODELS;
+    ProbModelSet * UNTITLED = 'Mk1 (est.)' : 1 - 9;
+END;
+BEGIN MESQUITE;
+    MESQUITESCRIPTVERSION 2;
+    TITLE AUTO;
+    tell ProjectCoordinator;
+    getEmployee #mesquite.minimal.ManageTaxa.ManageTaxa;
+    tell It;
+    setID 0 2002854640106134798;
+    endTell;
+    getEmployee #mesquite.charMatrices.ManageCharacters.ManageCharacters;
+    tell It;
+    setID 0 5914780497712519392;
+    checksum 0 1033486703 null;
+    endTell;
+    getEmployee #mesquite.charMatrices.BasicDataWindowCoord.BasicDataWindowCoord;
+    tell It;
+    showDataWindow #5914780497712519392 #mesquite.charMatrices.BasicDataWindowMaker.BasicDataWindowMaker;
+    tell It;
+    getWindow;
+    tell It;
+    setExplanationSize 30;
+    setAnnotationSize 20;
+    setFontIncAnnot 0;
+    setFontIncExp 0;
+    setSize 700 564;
+    setLocation 370 38;
+    setFont SanSerif;
+    setFontSize 10;
+    getToolPalette;
+    tell It;
+    endTell;
+    setTool mesquite.charMatrices.BasicDataWindowMaker.BasicDataWindow.arrow;
+    colorCells #mesquite.charMatrices.ColorByState.ColorByState;
+    setBackground White;
+    toggleShowNames on;
+    toggleShowTaxonNames on;
+    toggleTight off;
+    toggleShowChanges off;
+    toggleSeparateLines off;
+    toggleShowStates on;
+    toggleAutoWCharNames off;
+    toggleShowDefaultCharNames off;
+    toggleConstrainCW on;
+    setColumnWidth 16;
+    toggleBirdsEye off;
+    toggleColorsPanel off;
+    birdsEyeWidth 2;
+    toggleLinkedScrolling on;
+    toggleScrollLinkedTables off;
+    endTell;
+    showWindow;
+    getEmployee #mesquite.categ.StateNamesStrip.StateNamesStrip;
+    tell It;
+    showStrip off;
+    endTell;
+    getEmployee #mesquite.charMatrices.AnnotPanel.AnnotPanel;
+    tell It;
+    togglePanel off;
+    endTell;
+    getEmployee #mesquite.charMatrices.CharReferenceStrip.CharReferenceStrip;
+    tell It;
+    showStrip off;
+    endTell;
+    getEmployee #mesquite.charMatrices.ColorCells.ColorCells;
+    tell It;
+    setColor Red;
+    removeColor off;
+    endTell;
+    getEmployee #mesquite.charMatrices.QuickKeySelector.QuickKeySelector;
+    tell It;
+    autotabOff;
+    endTell;
+    getEmployee #mesquite.align.AlignToDropped.AlignToDropped;
+    tell It;
+    gapCosts 8 3 2 2;
+    subCosts 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 [...]
+    endTell;
+    endTell;
+    endTell;
+    endTell;
+END;
diff --git a/test/NTSValidOut/notaxablock.nex b/test/NTSValidOut/notaxablock.nex
new file mode 100644
index 0000000..6b54b85
--- /dev/null
+++ b/test/NTSValidOut/notaxablock.nex
@@ -0,0 +1,18 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 5;
+    TAXLABELS temporariaDMH84R1 boyliiMVZ148929 luteiventris_MT_MVZ191016 luteiventris_WA_MVZ225749 muscosaMVZ149006;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 temporariaDMH84R1,
+        2 boyliiMVZ148929,
+        3 luteiventris_MT_MVZ191016,
+        4 luteiventris_WA_MVZ225749,
+        5 muscosaMVZ149006;
+    TREE a = [&U](1,4,(2,3));
+    TREE b = [&U](1,4,(2,3));
+END;
diff --git a/test/NTSValidOut/parens_intree.tre b/test/NTSValidOut/parens_intree.tre
new file mode 100644
index 0000000..d068665
--- /dev/null
+++ b/test/NTSValidOut/parens_intree.tre
@@ -0,0 +1,16 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 4;
+    TAXLABELS ac 'b (' c d;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 ac,
+        2 'b (',
+        3 c,
+        4 d;
+    TREE a = [&R](1,(2,3),4);
+END;
diff --git a/test/NTSValidOut/partitions.nex b/test/NTSValidOut/partitions.nex
new file mode 100644
index 0000000..156b365
--- /dev/null
+++ b/test/NTSValidOut/partitions.nex
@@ -0,0 +1,59 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 6;
+    TAXLABELS P._fimbriata P._robusta P._americana P._myriophylla P._polygama P._macrophylla;
+    blockid bogus;
+END;
+BEGIN CHARACTERS;
+    TITLE dna_forty_five;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=45;
+    FORMAT Datatype=DNA  Gap=-;
+    CHARLABELS labone labtwo labthree labfour labfive labsix labseven;
+Matrix
+P._fimbriata       RCCTCGGCTTAACGAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._robusta         (AC)CCTCGGCTTAACCAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._americana       RCGTCGCTTTCA---ACGTCGCTTTCACCAACGTCGCTTTCACCA
+P._myriophylla     ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._polygama        ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._macrophylla     ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTCGCTTTCACCA
+;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 P._fimbriata,
+        2 P._robusta,
+        3 P._americana,
+        4 P._myriophylla,
+        5 P._polygama,
+        6 P._macrophylla;
+    TREE treone = [&R](1,2,3,4,5,6);
+    TREE tretwo = [&R](1,(2,3),4,5,6)[test];
+    TREE trethr = [&R](1,2,(3,4),5,6);
+END;
+BEGIN SETS;
+    LINK TAXA = Untitled_TAXA_Block_1 CHARACTERS = dna_forty_five TREES = Untitled_TREES_Block_1;
+    CHARSET csone = 1-3;
+    TaxPartition cspart = firstthree : 1-3, next : 4, anothergr : 6, rest : 5;
+    CharPartition cspart = firstthree : 1-3, next : 4-14 \ 2, anothergr : 5-45 \ 2, rest : 16-44 \ 2;
+    CharPartition csparttwo = firstthree : 1-3, next : 4-12 \ 2, anothergr : 5-45 \ 2, rest : 14-44 \ 2;
+    TreePartition cspart = next : 3, firstthree : 1 2;
+END;
+BEGIN ASSUMPTIONS;
+    LINK CHARACTERS = dna_forty_five;
+    EXSET e = 3-43 \ 4;
+    EXSET * edef = 2-42 \ 4;
+    UserType MINE (Stepmatrix) = 4
+       A   C   G   T
+       .   1   1   1
+       2   .   2   2
+       3   3   .   3
+       4   4   4   .;
+    WtSet TES = '2' : 1-3 5-13 \ 2, '6.01' : 4-44 \ 2, '3' : 15-45 \ 2;
+    WtSet T = '2' : 1-3 5-13 \ 2, '1' : 4-44 \ 2, '3' : 15-45 \ 2;
+    WtSet * TVECS = '1' : 1-13 \ 3 19-43 \ 3, '11' : 16, '2' : 2-17 \ 3 23-44 \ 3, '21' : 20, '3' : 3-30 \ 3 36-45 \ 3, '31' : 33;
+    TypeSet * TS = ORD : 1-3 5-13 \ 2, UNORD : 4-44 \ 2, mine : 15-45 \ 2;
+END;
diff --git a/test/NTSValidOut/paup_characters.nex b/test/NTSValidOut/paup_characters.nex
new file mode 100644
index 0000000..d371b64
--- /dev/null
+++ b/test/NTSValidOut/paup_characters.nex
@@ -0,0 +1,21 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 6;
+    TAXLABELS P._fimbriata P._robusta P._americana P._myriophylla P._polygama P._macrophylla;
+    blockid bogus;
+END;
+BEGIN CHARACTERS;
+    TITLE paup_multi;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=45;
+    FORMAT Datatype=MIXED(DNA: 1-13 15-45, Standard: 14)  Gap=-;
+Matrix
+P._fimbriata       RCCTCGGCTTAAC1AACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._robusta         (AC)CCTCGGCTTAAC0AACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._americana       MCGTCGCTTTCA---ACGTCGCTTTCACCAACGTCGCTTTCACCA
+P._myriophylla     ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._polygama        ACGTCGCTCTCAC?AACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._macrophylla     ACGTCGCTCTCA?{01}AACGTCGCTTTCACCAACGTCGCTTTCACCA
+;
+END;
diff --git a/test/NTSValidOut/primates.nex b/test/NTSValidOut/primates.nex
new file mode 100644
index 0000000..e3a95d2
--- /dev/null
+++ b/test/NTSValidOut/primates.nex
@@ -0,0 +1,26 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 12;
+    TAXLABELS Tarsius_syrichta Lemur_catta Homo_sapiens Pan Gorilla Pongo Hylobates Macaca_fuscata M_mulatta M_fascicularis M_sylvanus Saimiri_sciureus;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=898;
+    FORMAT Datatype=DNA  Gap=-;
+Matrix
+Tarsius_syrichta     AAGTTTCATTGGAGCCACCACTCTTATAATTGCCCATGGCCTCACCTCCTCCCTATTATTTTGCCTAGCAAATACAAACTACGAACGAGTCCACAGTCGAACAATAGCACTAGCCCGTGGCCTTCAAACCCTATTACCTCTTGCAGCAACATGATGACTCCTCGCCAGCTTAACCAACCTGGCCCTTCCCCCAACAATTAATTTAATCGGTGAACTGTCCGTAATAATAGCAGCATTTTCATGGTCACACCTAACTATTATCTTAGTAGGCCTTAACACCCTTATCACCGCCCTATATTCCCTATATATACTAATCATAACTCAACGAGGAAAATACACATATCATATCAACAATATCATGCCCCCTTTCACCCGAGAAAATACATTAATAATCATACACCTATTTCCCTTAATCCTACTATCTACCAACCCCAAAGTAATTATAGGAACCATGTACTGTAAATATAGTTT [...]
+Lemur_catta          AAGCTTCATAGGAGCAACCATTCTAATAATCGCACATGGCCTTACATCATCCATATTATTCTGTCTAGCCAACTCTAACTACGAACGAATCCATAGCCGTACAATACTACTAGCACGAGGGATCCAAACCATTCTCCCTCTTATAGCCACCTGATGACTACTCGCCAGCCTAACTAACCTAGCCCTACCCACCTCTATCAATTTAATTGGCGAACTATTCGTCACTATAGCATCCTTCTCATGATCAAACATTACAATTATCTTAATAGGCTTAAATATGCTCATCACCGCTCTCTATTCCCTCTATATATTAACTACTACACAACGAGGAAAACTCACATATCATTCGCACAACCTAAACCCATCCTTTACACGAGAAAACACCCTTATATCCATACACATACTCCCCCTTCTCCTATTTACCTTAAACCCCAAAATTATTCTAGGACCCACGTACTGTAAATATAGTTT [...]
+Homo_sapiens         AAGCTTCACCGGCGCAGTCATTCTCATAATCGCCCACGGGCTTACATCCTCATTACTATTCTGCCTAGCAAACTCAAACTACGAACGCACTCACAGTCGCATCATAATCCTCTCTCAAGGACTTCAAACTCTACTCCCACTAATAGCTTTTTGATGACTTCTAGCAAGCCTCGCTAACCTCGCCTTACCCCCCACTATTAACCTACTGGGAGAACTCTCTGTGCTAGTAACCACGTTCTCCTGATCAAATATCACTCTCCTACTTACAGGACTCAACATACTAGTCACAGCCCTATACTCCCTCTACATATTTACCACAACACAATGGGGCTCACTCACCCACCACATTAACAACATAAAACCCTCATTCACACGAGAAAACACCCTCATGTTCATACACCTATCCCCCATTCTCCTCCTATCCCTCAACCCCGACATCATTACCGGGTTTTCCTCTTGTAAATATAGTTT [...]
+Pan                  AAGCTTCACCGGCGCAATTATCCTCATAATCGCCCACGGACTTACATCCTCATTATTATTCTGCCTAGCAAACTCAAATTATGAACGCACCCACAGTCGCATCATAATTCTCTCCCAAGGACTTCAAACTCTACTCCCACTAATAGCCTTTTGATGACTCCTAGCAAGCCTCGCTAACCTCGCCCTACCCCCTACCATTAATCTCCTAGGGGAACTCTCCGTGCTAGTAACCTCATTCTCCTGATCAAATACCACTCTCCTACTCACAGGATTCAACATACTAATCACAGCCCTGTACTCCCTCTACATGTTTACCACAACACAATGAGGCTCACTCACCCACCACATTAATAACATAAAGCCCTCATTCACACGAGAAAATACTCTCATATTTTTACACCTATCCCCCATCCTCCTTCTATCCCTCAATCCTGATATCATCACTGGATTCACCTCCTGTAAATATAGTTT [...]
+Gorilla              AAGCTTCACCGGCGCAGTTGTTCTTATAATTGCCCACGGACTTACATCATCATTATTATTCTGCCTAGCAAACTCAAACTACGAACGAACCCACAGCCGCATCATAATTCTCTCTCAAGGACTCCAAACCCTACTCCCACTAATAGCCCTTTGATGACTTCTGGCAAGCCTCGCCAACCTCGCCTTACCCCCCACCATTAACCTACTAGGAGAGCTCTCCGTACTAGTAACCACATTCTCCTGATCAAACACCACCCTTTTACTTACAGGATCTAACATACTAATTACAGCCCTGTACTCCCTTTATATATTTACCACAACACAATGAGGCCCACTCACACACCACATCACCAACATAAAACCCTCATTTACACGAGAAAACATCCTCATATTCATGCACCTATCCCCCATCCTCCTCCTATCCCTCAACCCCGATATTATCACCGGGTTCACCTCCTGTAAATATAGTTT [...]
+Pongo                AAGCTTCACCGGCGCAACCACCCTCATGATTGCCCATGGACTCACATCCTCCCTACTGTTCTGCCTAGCAAACTCAAACTACGAACGAACCCACAGCCGCATCATAATCCTCTCTCAAGGCCTTCAAACTCTACTCCCCCTAATAGCCCTCTGATGACTTCTAGCAAGCCTCACTAACCTTGCCCTACCACCCACCATCAACCTTCTAGGAGAACTCTCCGTACTAATAGCCATATTCTCTTGATCTAACATCACCATCCTACTAACAGGACTCAACATACTAATCACAACCCTATACTCTCTCTATATATTCACCACAACACAACGAGGTACACCCACACACCACATCAACAACATAAAACCTTCTTTCACACGCGAAAATACCCTCATGCTCATACACCTATCCCCCATCCTCCTCTTATCCCTCAACCCCAGCATCATCGCTGGGTTCGCCTACTGTAAATATAGTTT [...]
+Hylobates            AAGCTTTACAGGTGCAACCGTCCTCATAATCGCCCACGGACTAACCTCTTCCCTGCTATTCTGCCTTGCAAACTCAAACTACGAACGAACTCACAGCCGCATCATAATCCTATCTCGAGGGCTCCAAGCCTTACTCCCACTGATAGCCTTCTGATGACTCGCAGCAAGCCTCGCTAACCTCGCCCTACCCCCCACTATTAACCTCCTAGGTGAACTCTTCGTACTAATGGCCTCCTTCTCCTGGGCAAACACTACTATTACACTCACCGGGCTCAACGTACTAATCACGGCCCTATACTCCCTTTACATATTTATCATAACACAACGAGGCACACTTACACACCACATTAAAAACATAAAACCCTCACTCACACGAGAAAACATATTAATACTTATGCACCTCTTCCCCCTCCTCCTCCTAACCCTCAACCCTAACATCATTACTGGCTTTACTCCCTGTAAACATAGTTT [...]
+Macaca_fuscata       AAGCTTTTCCGGCGCAACCATCCTTATGATCGCTCACGGACTCACCTCTTCCATATATTTCTGCCTAGCCAATTCAAACTATGAACGCACTCACAACCGTACCATACTACTGTCCCGAGGACTTCAAATCCTACTTCCACTAACAGCCTTTTGATGATTAACAGCAAGCCTTACTAACCTTGCCCTACCCCCCACTATCAATCTACTAGGTGAACTCTTTGTAATCGCAACCTCATTCTCCTGATCCCATATCACCATTATGCTAACAGGACTTAACATATTAATTACGGCCCTCTACTCTCTCCACATATTCACTACAACACAACGAGGAACACTCACACATCACATAATCAACATAAAGCCCCCCTTCACACGAGAAAACACATTAATATTCATACACCTCGCTCCAATTATCCTTCTATCCCTCAACCCCAACATCATCCTGGGGTTTACCTCCTGTAGATATAGTTT [...]
+M_mulatta            AAGCTTTTCTGGCGCAACCATCCTCATGATTGCTCACGGACTCACCTCTTCCATATATTTCTGCCTAGCCAATTCAAACTATGAACGCACTCACAACCGTACCATACTACTGTCCCGGGGACTTCAAATCCTACTTCCACTAACAGCTTTCTGATGATTAACAGCAAGCCTTACTAACCTTGCCCTACCCCCCACTATCAACCTACTAGGTGAACTCTTTGTAATCGCGACCTCATTCTCCTGGTCCCATATCACCATTATATTAACAGGATTTAACATACTAATTACGGCCCTCTACTCCCTCCACATATTCACCACAACACAACGAGGAGCACTCACACATCACATAATCAACATAAAACCCCCCTTCACACGAGAAAACATATTAATATTCATACACCTCGCTCCAATCATCCTCCTATCTCTCAACCCCAACATCATCCTGGGGTTTACTTCCTGTAGATATAGTTT [...]
+M_fascicularis       AAGCTTCTCCGGCGCAACCACCCTTATAATCGCCCACGGGCTCACCTCTTCCATGTATTTCTGCTTGGCCAATTCAAACTATGAGCGCACTCATAACCGTACCATACTACTATCCCGAGGACTTCAAATTCTACTTCCATTGACAGCCTTCTGATGACTCACAGCAAGCCTTACTAACCTTGCCCTACCCCCCACTATTAATCTACTAGGCGAACTCTTTGTAATCACAACTTCATTTTCCTGATCCCATATCACCATTGTGTTAACGGGCCTTAATATACTAATCACAGCCCTCTACTCTCTCCACATGTTCATTACAGTACAACGAGGAACACTCACACACCACATAATCAATATAAAACCCCCCTTCACACGAGAAAACATATTAATATTCATACACCTCGCTCCAATTATCCTTCTATCTCTCAACCCCAACATCATCCTGGGGTTTACCTCCTGTAAATATAGTTT [...]
+M_sylvanus           AAGCTTCTCCGGTGCAACTATCCTTATAGTTGCCCATGGACTCACCTCTTCCATATACTTCTGCTTGGCCAACTCAAACTACGAACGCACCCACAGCCGCATCATACTACTATCCCGAGGACTCCAAATCCTACTCCCACTAACAGCCTTCTGATGATTCACAGCAAGCCTTACTAATCTTGCTCTACCCTCCACTATTAATCTACTGGGCGAACTCTTCGTAATCGCAACCTCATTTTCCTGATCCCACATCACCATCATACTAACAGGACTGAACATACTAATTACAGCCCTCTACTCTCTTCACATATTCACCACAACACAACGAGGAGCGCTCACACACCACATAATTAACATAAAACCACCTTTCACACGAGAAAACATATTAATACTCATACACCTCGCTCCAATTATTCTTCTATCTCTTAACCCCAACATCATTCTAGGATTTACTTCCTGTAAATATAGTTT [...]
+Saimiri_sciureus     AAGCTTCACCGGCGCAATGATCCTAATAATCGCTCACGGGTTTACTTCGTCTATGCTATTCTGCCTAGCAAACTCAAATTACGAACGAATTCACAGCCGAACAATAACATTTACTCGAGGGCTCCAAACACTATTCCCGCTTATAGGCCTCTGATGACTCCTAGCAAATCTCGCTAACCTCGCCCTACCCACAGCTATTAATCTAGTAGGAGAATTACTCACAATCGTATCTTCCTTCTCTTGATCCAACTTTACTATTATATTCACAGGACTTAATATACTAATTACAGCACTCTACTCACTTCATATGTATGCCTCTACACAGCGAGGTCCACTTACATACAGCACCAGCAATATAAAACCAATATTTACACGAGAAAATACGCTAATATTTATACATATAACACCAATCCTCCTCCTTACCTTGAGCCCCAAGGTAATTATAGGACCCTCACCTTGTAATTATAGTTT [...]
+;
+END;
diff --git a/test/NTSValidOut/protein.nex b/test/NTSValidOut/protein.nex
new file mode 100644
index 0000000..26c24d4
--- /dev/null
+++ b/test/NTSValidOut/protein.nex
@@ -0,0 +1,20 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 6;
+    TAXLABELS P._fimbriata P._robusta P._americana P._myriophylla P._polygama P._macrophylla;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=90;
+    FORMAT Datatype=Protein  Gap=-  MatchChar=.;
+Matrix
+P._fimbriata       {AG}RCTCGGCTTAACGAACCTCGGCTTAACGAACCTCGGCTTAACGARCCTCGGCTTAACGAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._robusta         (AC)CCTCGGCTTAACCAACCTCGGCTTAACGAACCTCGGCTTAACGA(AC)CCTCGGCTTAACCAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._americana       ACDEFGHIKLMNPQRSTVWY*BZAAAAAAAAAATCGCTTTCACCARCGTCGCTTTCA---ACGTCGCTTTCACCAACGTCGCTTTCACCA
+P._myriophylla     ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCAACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._polygama        ARGTCGCTCTCACCAACGTCGCTTTCACCAACGTC?CTTTCACCAACGTCGCTCTCACCAACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._macrophylla     ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTCGCTTTCACCAACGTCGCTCTCACCAACGTCGCTTTCACCAACGTCGCTTTCACCA
+;
+END;
diff --git a/test/NTSValidOut/replicase.nex b/test/NTSValidOut/replicase.nex
new file mode 100644
index 0000000..c939b93
--- /dev/null
+++ b/test/NTSValidOut/replicase.nex
@@ -0,0 +1,33 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 9;
+    TAXLABELS FR MS2 GA SP NL95 M11 MX1 QB PP7;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_DATA_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=720;
+    FORMAT Datatype=RNA  Gap=-;
+Matrix
+FR       GGCAACGGU---GUGUUUACUGUUCCGAAGAACAAUAAAAUAGAUCGGGCUGCUUGCAAAGAGCCUGAUAUGAAUAUGUACUUACAGAAAGGGGUCGGCGGUUUCAUCCGUCGCCGCCUUAAGACUGUGGGUAUAGACUUGAACGAUCAAACGAUCAAUCAACGCCUGGCUCAACAAGGUAGCCGUGAUGGGUCUUUGGCGACGAUAGACUUAUCGUCUGCUUCUGACUCCAUCAGCGACCGCCUAGUGUGGAGUUUUCUCCCACCUGAGCUAUAUUCAUAUCUCGACAUGAUUCGAAGCCACUACGGUUACGUA---AAUGGCAAGAUGAUUCGUUGGGAACUAUUUUCGACGAUGGGUAAUGGGUUCACCUUUGAACUAGAGUCCAUGAUUUUCUGGGCUAUAGUCAGGGCUACUCAGAUCCAUUUUCGU---AACACCGGAACCAUUGGCAUCUAUGGGGACGAUAUUAUAUGCCCCACA [...]
+MS2      GGGAACGGA---GUGUUUACAGUUCCGAAGAAUAAUAAAAUAGAUCGGGCUGCCUGUAAGGAGCCUGAUAUGAAUAUGUACCUCCAGAAAGGGGUCGGUGCUUUCAUCAGACGCCGGCUCAAAUCCGUUGGUAUAGACCUGAAUGAUCAAUCGAUCAACCAGCGUCUGGCUCAGCAGGGCAGCGUAGAUGGUUCGCUUGCGACGAUAGACUUAUCGUCUGCAUCCGAUUCCAUCUCCGAUCGCCUGGUGUGGAGUUUUCUCCCACCUGAGCUAUAUUCAUAUCUCGAUCGUAUCCGCUCACACUACGGA---GUA---GAUGGCGAGACGAUACGAUGGGAACUAUUUUCCACAAUGGGAAAUGGGUUCACAUUUGAGCUAGAGUCCAUGAUAUUCUGGGCAAUAGUCAAAGCGACCCAAAUCCAUUUUGGU---AACGCCGGAACCAUAGGCAUCUACGGGGACGAUAUUAUAUGUCCCAGU [...]
+GA       GGCAACGGU---UUGUUUUCUGUUCCGAAGAACAAUAAAAUAGAUCGGGCUGCCUGUAAGGAGCCUGAUAUGAAUAUGUACCUUCAGAAGGGGGCGGGAUCUUUUAUAAGAAAACGCCUUCGCUCCGUCGGUAUAGAUCUUAACGAUCAGACGCGCAAUCAGGAAUUAGCCCGACUUGGCAGCAUUGAUGGUUCGCUCGCUACUAUUGAUCUUAGUAGCGCUAGCGAUUCCAUCUCUGACCGUCUUGUCUGGGAUCUACUUCCGCCGCACGUUUAUUCAUACCUCGCUCGUAUCCGAACAUCGUUCACUAUGAUC---GAUGGGCGUUUACAUAAGUGGGGUCUAUUUUCUACCAUGGGUAAUGGCUUCACGUUCGAACUCGAGUCCAUGAUCUUUUGGGCUUUAAGCAAGAGCAUUAUGCUGUCCAUGGGUGUU---ACUGGCUCAUUAGGCAUCUACGGUGAUGAUAUAAUCGUCCCCGUU [...]
+SP       UCA---AAUAAAGCAGUCACUGUUCCAAAGAACAGUAAAACUGAUCGCUGUAUUGCUAUCGAGCCCGGCUGGAAUAUGUUUUUCCAGUUAGGCGUCGGUGCAGUGCUACGCGAUAGGUUGCGUUUAUGGAAGAUUGAUCUUAAUGACCAAUCGACCAAUCAACGCCUCGCGCGUGAUGGGUCUCUGCUAAAUCAUUUAGCUACCAUAGACUUAUCUGCAGCCAGCGAUUCAAUCAGCCUUAAGCUUGUUGAGUUGCUCAUGCCCCCUGAAUGGUAUGACCUUCUAACGGAUCUCCGAUCCGAUGAAGGAAUACUGCCUGACGGGCGAGUUGUGACCUAUGAGAAAAUAUCCUCCAUGGGUAAUGGCUACACUUUCGAACUCGAGUCGCUUAUUUUUGCGGCUAUCGCUCGAAGUGUGUGCGAGUUACUGGAAAUUGACCAAUCUACUGUUAGCGUGUACGGGGAUGAUAUAAUCAUCGAUACC [...]
+NL95     UCG---AAUAAAGCAGUCACUGUUCCAAAGAACAGUAAAACUGAUCGCUGCAUUGCUAUCGAGCCCGGCUGGAAUAUGUUUUUCCAGUUAGGCGUCGGUGCUGUGCUCCGUGAUCGGUUGCGCCUUUGGCAUAUUGAUCUCAAUGAUCAAUCUGUUAAUCAGCGCCUCGCACGUGAUGCAUCGCAGUUGGACCAUUUGGCCACUGUCGAUUUAUCAGCAGCAAGCGAUUCGAUAAGCUUACGGCUUGUUGAACUGCUAAUGCCGCCUGCUUGGUUUGAUCUCCUGACCGAUCUCCGAUCGGACCAGGGAAUCCUGCCUGACGGGCGUGUCGUUACUUACGAGAAAAUAUCCUCCAUGGGUAAUGGCUACACUUUUGAGCUAGAGUCGUUAAUUUUCGCGGCUCUCGCCAGAAGUGUGUGCGAGUUAUUGGACCUUGACCAGUCAACUGUCAGCGUGUACGGUGAUGAUAUAAUCAUCGAUUCA [...]
+M11      CCUUUCAAUAAAGCAGUUACUGUACCAAAGAACAGUAAAACUGAUCGCUGUAUAGCCAUCGAACCUGGCUGGAAUAUGUUUUUCCAGCUAGGUAUCGGUGGUGUUAUACGCGAAAAGUUGCGUUUGUGGGGCAUCGAUCUGAAUGAUCAGACGAUUAACCAAACGCGCGCAUAUUUAGGCAGCCGUGAUGAUAAUCUCGCCACGGUGGAUCUCUCAAGAGCUAGCGAUACUAUUUCGCUUGCCCUUGUUGAGCUCCUUAUGCCUCCUGAGUGGUUUAAGGUCCUGUUGGCCUUAAGAUCACCCAAGGGCAUCUUGCCAGAUGGUACCGUCAUUACUUAUGAGAAAAUAUCCUCAAUGGGUAAUGGCUAUACCUUCGAGCUUGAGUCGCUUAUAUUUGCGGCUCUUGCUCGGUCUUUAUGCGAAUUACUGGGCUUACGACCGUCAGAUGUUACGGUCUAUGGCGAUGACAUAAUAUUGCCAUCA [...]
+MX1      CCUUUCAAUAAAGCAGUUACUGUACCAAAGAACAGUAAAACUGAUCGCUGCAUCGCUAUCGAGCCAGGCUGGAAUAUGUUUUUCCAGUUGGGCAUUGGUGGCGUAAUUCGCGAAAAGUUGCACUUGUGGAAUAUCGACCUGAAUGAUCAGACGAUUAACCAGGUGCGCGCAUAUUCAGGCAGCUGUAGCAAUGAACUUGCUACAGUGGAUCUCUCGAGCGCGAGUGAUACUAUUUCGCUUGCGCUCGUUGAGCUCCUGCUACCCCCUGCGUGGUUUAAAGUCCUUACGGACCUUAGGUCACGAAGGGGUAUGUUGCCAGACGGUAGAAUCAUUACCUAUGAGAAAAUUUCCUCAAUGGGUAACGGUUUCACCUUCGAGCUCGAGUCGCUUAUAUUUGCAGCUCUUGCUCGGUCUUUAUGCGAGUUACUGAACUUACAACCGUCGAGUGUCACGGUCUAUGGCGAUGAUAUUAUAUUGCCAUCA [...]
+QB       CCUUUUAAUAAAGCAGUUACUGUACCUAAGAACAGUAAGACAGAUCGUUGUAUUGCUAUCGAACCUGGUUGGAAUAUGUUUUUCCAACUGGGUAUCGGUGGCAUUCUACGCGAUCGGUUGCGUUGCUGGGGUAUCGAUCUGAAUGAUCAGACGAUAAAUCAGCGCCGCGCUCACGAAGGCUCCGUUACUAAUAACUUAGCAACGGUUGAUCUCUCAGCGGCAAGCGAUUCUAUAUCUCUUGCCCUCUGUGAGCUCUUAUUGCCCCUAGGCUGGUUUGAGGUUCUUAUGGACCUCAGAUCACCUAAGGGGCGAUUGCCUGACGGUAGUGUUGUUACCUACGAGAAGAUUUCUUCUAUGGGUAACGGUUACACAUUCGAGCUCGAGUCGCUUAUUUUUGCUUCUCUCGCUCGUUCCGUUUGUGAGAUACUGGACUUAGACUCGUCUGAGGUCACUGUUUACGGAGACGAUAUUAUUUUACCGUCC [...]
+PP7      GACAGC---CGGUUCGAUUUUGUCGCUAAGACCGCGAAGGCGGUUCGCUUCAUCGCUAUGGAGCCAGAACUUAACAUGCUGCUGCAGAAAUCUGUAGGAGACACGAUAAGGGCUGCUCUGCGGAAAGCGGGUAUCGAUCUCAAUACCCAGCGACUAAAUCAAGAUCUUGCGUACCACGGAUCCGUUUUUCGGAAUCUCGGUACGAUAGAUCUGUCUAGCGCUUCCGAUACGUUAAGCAUUGAACUCGUGCGGCAGUACCUGCCGAAGCGGUUUCUCCGCUAUGUAUUGGAUCUCCGAACCCCCUACACGAGUGUA---GGUGGUAAGAAGCACAGGCUCGAGAAGGUCGCUUCGAUGGGCAACGGGUUCAUUUUUGAACUCCAGAGCCUCAUCUACGCAGCCUUCGCGCAUGCCAUGACGCUAGUAGUAGGAGGAAGAGAAUGCGACAUAGCCAUUUACGGCGAUGAUAUCAUCGUCAGUGAA [...]
+;
+END;
+BEGIN MRBAYES;
+    set autoclose = yes nowarn = yes;
+    charset first_pos = 1 - 720 \ 3;
+    charset second_pos = 2 - 720 \ 3;
+    charset third_pos = 3 - 720 \ 3;
+    partition by_codon = 3 : first_pos , second_pos , third_pos;
+    set partition = by_codon;
+    lset nst = 6 rates = gamma;
+    unlink shape = ( 3 );
+END;
diff --git a/test/NTSValidOut/t.nex b/test/NTSValidOut/t.nex
new file mode 100644
index 0000000..6308b81
--- /dev/null
+++ b/test/NTSValidOut/t.nex
@@ -0,0 +1,118 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 49;
+    TAXLABELS Tm Ur Um Nn pl Mp Ml Cp Ct Lp Ca Uc Vf Hh Cc Aj Pp Pt Pq Tb Cs Db Eh Ec Eb Lg Cd Gc Sc Bb To Gg Gt Ac Mk Oa Oc He Am Cu Dl Ab Aa cq Dd Al Rt Ov Oh;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=2;
+    FORMAT Datatype=Continuous Items = (AVERAGE );
+Matrix
+Tm      2.423245874   2.062957834  
+Ur      2.400192489   1.918030337  
+Um      1.970346876   1.754348336  
+Nn      0.6434526765   0.0211892991  
+pl      0.84509804   0.0569048513  
+Mp      0.3979400087   0.3979400087  
+Ml      1.064457989   -0.060480747  
+Cp      1.547774705   2.307067951  
+Ct      1.123851641   1.653212514  
+Lp      1.301029996   2.204119983  
+Ca      0.9444826722   0.9590413923  
+Uc      0.5682017241   0.0413926852  
+Vf      0.6812412374   0.587710965  
+Hh      1.428134794   2.184123354  
+Cc      1.716003344   1.397940009  
+Aj      1.769377326   1.7930916  
+Pp      1.719331287   1.365487985  
+Pt      2.206825876   1.84260924  
+Pq      2.192567453   2.372912003  
+Tb      2.397940009   0.3010299957  
+Cs      3.301029996   0.8228216453  
+Db      3.079181246   1.193124598  
+Eh      2.301029996   1.544068044  
+Ec      2.544068044   1.352182518  
+Eb      2.371067862   2.217483944  
+Lg      1.977723605   -0.301029996  
+Cd      2.740362689   2  
+Gc      3.031408464   1.927370363  
+Sc      2.792391689   2.139879086  
+Bb      2.937016107   2.123851641  
+To      2.7084209   1.942008053  
+Gg      1.795880017   1.301029996  
+Gt      1.311753861   0.7242758696  
+Ac      1.574031268   0.8129133566  
+Mk      0.6989700043   -1.36653154  
+Oa      2.054995862   1.356981401  
+Oc      1.929418926   1.15624619  
+He      2.355068206   1.903089987  
+Am      1.726319612   0.5797835966  
+Cu      2.334453751   1.875061263  
+Dl      2.113943352   0.3424226808  
+Ab      2.133538908   0.6989700043  
+Aa      1.698970004   1  
+cq      2.477121255   1.111598525  
+Dd      1.740362689   0.1139433523  
+Al      2.584331224   1.206825876  
+Rt      2   1.477121255  
+Ov      1.755874856   0.2922560714  
+Oh      1.86923172   0.45484486  
+;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 Tm,
+        2 Ur,
+        3 Um,
+        4 Nn,
+        5 pl,
+        6 Mp,
+        7 Ml,
+        8 Cp,
+        9 Ct,
+        10 Lp,
+        11 Ca,
+        12 Uc,
+        13 Vf,
+        14 Hh,
+        15 Cc,
+        16 Aj,
+        17 Pp,
+        18 Pt,
+        19 Pq,
+        20 Tb,
+        21 Cs,
+        22 Db,
+        23 Eh,
+        24 Ec,
+        25 Eb,
+        26 Lg,
+        27 Cd,
+        28 Gc,
+        29 Sc,
+        30 Bb,
+        31 To,
+        32 Gg,
+        33 Gt,
+        34 Ac,
+        35 Mk,
+        36 Oa,
+        37 Oc,
+        38 He,
+        39 Am,
+        40 Cu,
+        41 Dl,
+        42 Ab,
+        43 Aa,
+        44 cq,
+        45 Dd,
+        46 Al,
+        47 Rt,
+        48 Ov,
+        49 Oh;
+    TREE Untitled_Tree = [&R]((((((1:2000000.0,2:2.435E6)n95:3000000.0,3:5000000.0)n31:3.9E7,((4:5000000.0,5:5000000.0)n92:2.6E7,(6:2.0E7,7:2.0E7)n07:1.1E7)n93:1.3E7)n06:8000000.0,(((((8:2500000.0,9:2500000.0)n34:500000.0,10:3000000.0)n32:3000000.0,11:6000000.0)n28:3000000.0,12:9000000.0)n22:500000.0,13:9500000.0)n21:4.25E7)n05:6000000.0,((14:5000000.0,15:5000000.0)n18:2.1E7,(16:9000000.0,(17:2500000.0,(18:2000000.0,19:2000000.0)n36:500000.0)n35:6500000.0)n23:1.7E7)n10:3.2E7)n03:1.2E7,(( [...]
+END;
diff --git a/test/NTSValidOut/treeswithouttaxa.nex b/test/NTSValidOut/treeswithouttaxa.nex
new file mode 100644
index 0000000..f4aaa31
--- /dev/null
+++ b/test/NTSValidOut/treeswithouttaxa.nex
@@ -0,0 +1,16 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 4;
+    TAXLABELS a b c d;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 a,
+        2 b,
+        3 c,
+        4 d;
+    TREE test = [&U](1,(2,3),4);
+END;
diff --git a/test/NTSValidOut/unaligned.nex b/test/NTSValidOut/unaligned.nex
new file mode 100644
index 0000000..d9a59eb
--- /dev/null
+++ b/test/NTSValidOut/unaligned.nex
@@ -0,0 +1,19 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 10;
+    TAXLABELS taxon_1 taxon_2 taxon_3 taxon_4 taxon_5 taxon_6 taxon_7 taxon_8 taxon_9 taxon_10;
+END;
+BEGIN UNALIGNED;
+    TITLE Untitled_UNALIGNED_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NTax=5;
+    FORMAT Datatype=DNA;
+Matrix
+taxon_2      ACCAGGAC(CT)AGCGGATCAAG,
+taxon_4      AGCCAGGACTAGTTC,
+taxon_5      RTCAGGACNAGA?CAAGTTC,
+taxon_7      ACCAGGACTAGATCAAG,
+taxon_10     ACYAGGACTAGATCAAGTT
+;
+END;
diff --git a/test/OldValidIn/m.nex b/test/OldValidIn/m.nex
new file mode 100644
index 0000000..faf7c2d
--- /dev/null
+++ b/test/OldValidIn/m.nex
@@ -0,0 +1,21 @@
+#NEXUS
+BEGIN TAXA;
+	DIMENSIONS NTax = 4;
+	TAXLABELS 'one fish' 'two fish' 'red fish' 'blue fish';
+END;
+BEGIN CHARACTERS;
+	DIMENSIONS NChar=9;
+	
+	FORMAT Datatype=DNA gap = -;
+Matrix
+'one fish'   ACGTACGTN
+'two fish'   BDHKMNRSV
+'red fish'   CGTACGTNA
+'blue fish'  GTACGTNAC
+;
+END;
+[!Skipping unknown block (NOTES)...]
+begin assumptions;
+	charset t = 1-5\2;
+	charset u = t 6;
+end;
diff --git a/test/OldValidOut/m.nex b/test/OldValidOut/m.nex
new file mode 100644
index 0000000..9cdabf5
--- /dev/null
+++ b/test/OldValidOut/m.nex
@@ -0,0 +1,17 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 4;
+    TAXLABELS one_fish two_fish red_fish blue_fish;
+END;
+BEGIN DATA;
+    DIMENSIONS NTax=4 NChar=9;
+    FORMAT Datatype = DNA missing=? gap=-;
+Matrix
+one_fish ACGTACGT{ACGT}
+two_fish {CGT}{AGT}{ACT}{GT}{AC}{ACGT}{AG}{CG}{ACG}
+red_fish CGTACGT{ACGT}A
+blue_fish GTACGT{ACGT}AC
+;
+END;
+[!Skipping unknown block (NOTES)...]
diff --git a/test/README b/test/README
new file mode 100644
index 0000000..9df7bdb
--- /dev/null
+++ b/test/README
@@ -0,0 +1,11 @@
+The files in the NTS*In directories were provided by Arlin Stoltzfus. see
+	http://www.molevol.org/camel/projects/nexus/ for more information.
+
+The files in NTSValidIn should be accepted by NCL.
+
+The files in NTSInvalidIn should generate errors.
+
+The corresponding output files are found in the NTS*Out dir and have the same
+	file name as the input.  These output files will be sensitive to
+	inconsequential changes in formatting in the normalizer program, but will
+	still be useful for regression testing.
diff --git a/test/TranslateIn/bglobin.nex b/test/TranslateIn/bglobin.nex
new file mode 100755
index 0000000..07a09be
--- /dev/null
+++ b/test/TranslateIn/bglobin.nex
@@ -0,0 +1,46 @@
+#NEXUS
+
+begin data;
+   dimensions ntax=17 nchar=432;
+   format datatype=dna missing=?;
+   matrix
+   human       ctgactcctgaggagaagtctgccgttactgccctgtggggcaaggtgaacgtggatgaagttggtggtgaggccctgggcaggctgctggtggtctacccttggacccagaggttctttgagtcctttggggatctgtccactcctgatgctgttatgggcaaccctaaggtgaaggctcatggcaagaaagtgctcggtgcctttagtgatggcctggctcacctggacaacctcaagggcacctttgccacactgagtgagctgcactgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggtctgtgtgctggcccatcactttggcaaagaattcaccccaccagtgcaggctgcctatcagaaagtggtggctggtgtggctaatgccctggcccacaagtatcac
+   tarsier     ctgactgctgaagagaaggccgccgtcactgccctgtggggcaaggtagacgtggaagatgttggtggtgaggccctgggcaggctgctggtcgtctacccatggacccagaggttctttgactcctttggggacctgtccactcctgccgctgttatgagcaatgctaaggtcaaggcccatggcaaaaaggtgctgaacgcctttagtgacggcatggctcatctggacaacctcaagggcacctttgctaagctgagtgagctgcactgtgacaaattgcacgtggatcctgagaatttcaggctcttgggcaatgtgctggtgtgtgtgctggcccaccactttggcaaagaattcaccccgcaggttcaggctgcctatcagaaggtggtggctggtgtggctactgccttggctcacaagtaccac
+   bushbaby    ctgactcctgatgagaagaatgccgtttgtgccctgtggggcaaggtgaatgtggaagaagttggtggtgaggccctgggcaggctgctggttgtctacccatggacccagaggttctttgactcctttggggacctgtcctctccttctgctgttatgggcaaccctaaagtgaaggcccacggcaagaaggtgctgagtgcctttagcgagggcctgaatcacctggacaacctcaagggcacctttgctaagctgagtgagctgcattgtgacaagctgcacgtggaccctgagaacttcaggctcctgggcaacgtgctggtggttgtcctggctcaccactttggcaaggatttcaccccacaggtgcaggctgcctatcagaaggtggtggctggtgtggctactgccctggctcacaaataccac
+   hare        ctgtccggtgaggagaagtctgcggtcactgccctgtggggcaaggtgaatgtggaagaagttggtggtgagaccctgggcaggctgctggttgtctacccatggacccagaggttcttcgagtcctttggggacctgtccactgcttctgctgttatgggcaaccctaaggtgaaggctcatggcaagaaggtgctggctgccttcagtgagggtctgagtcacctggacaacctcaaaggcaccttcgctaagctgagtgaactgcattgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggttattgtgctgtctcatcactttggcaaagaattcactcctcaggtgcaggctgcctatcagaaggtggtggctggtgtggccaatgccctggctcacaaataccac
+   rabbit      ctgtccagtgaggagaagtctgcggtcactgccctgtggggcaaggtgaatgtggaagaagttggtggtgaggccctgggcaggctgctggttgtctacccatggacccagaggttcttcgagtcctttggggacctgtcctctgcaaatgctgttatgaacaatcctaaggtgaaggctcatggcaagaaggtgctggctgccttcagtgagggtctgagtcacctggacaacctcaaaggcacctttgctaagctgagtgaactgcactgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggttattgtgctgtctcatcattttggcaaagaattcactcctcaggtgcaggctgcctatcagaaggtggtggctggtgtggccaatgccctggctcacaaataccac
+   cow         ctgactgctgaggagaaggctgccgtcaccgccttttggggcaaggtgaaagtggatgaagttggtggtgaggccctgggcaggctgctggttgtctacccctggactcagaggttctttgagtcctttggggacttgtccactgctgatgctgttatgaacaaccctaaggtgaaggcccatggcaagaaggtgctagattcctttagtaatggcatgaagcatctcgatgacctcaagggcacctttgctgcgctgagtgagctgcactgtgataagctgcatgtggatcctgagaacttcaagctcctgggcaacgtgctagtggttgtgctggctcgcaattttggcaaggaattcaccccggtgctgcaggctgactttcagaaggtggtggctggtgtggccaatgccctggcccacagatatcat
+   sheep       ctgactgctgaggagaaggctgccgtcaccggcttctggggcaaggtgaaagtggatgaagttggtgctgaggccctgggcaggctgctggttgtctacccctggactcagaggttctttgagcactttggggacttgtccaatgctgatgctgttatgaacaaccctaaggtgaaggcccatggcaagaaggtgctagactcctttagtaacggcatgaagcatctcgatgacctcaagggcacctttgctcagctgagtgagctgcactgtgataagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggtggttgtgctggctcgccaccatggcaatgaattcaccccggtgctgcaggctgactttcagaaggtggtggctggtgttgccaatgccctggcccacaaatatcac
+   pig         ctgtctgctgaggagaaggaggccgtcctcggcctgtggggcaaagtgaatgtggacgaagttggtggtgaggccctgggcaggctgctggttgtctacccctggactcagaggttcttcgagtcctttggggacctgtccaatgccgatgccgtcatgggcaatcccaaggtgaaggcccacggcaagaaggtgctccagtccttcagtgacggcctgaaacatctcgacaacctcaagggcacctttgctaagctgagcgagctgcactgtgaccagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgatagtggttgttctggctcgccgccttggccatgacttcaacccgaatgtgcaggctgcttttcagaaggtggtggctggtgttgctaatgccctggcccacaagtaccac
+   elephseal   ttgacggcggaggagaagtctgccgtcacctccctgtggggcaaagtgaaggtggatgaagttggtggtgaagccctgggcaggctgctggttgtctacccctggactcagaggttctttgactcctttggggacctgtcctctcctaatgctattatgagcaaccccaaggtcaaggcccatggcaagaaggtgctgaattcctttagtgatggcctgaagaatctggacaacctcaagggcacctttgctaagctcagtgagctgcactgtgaccagctgcatgtggatcccgagaacttcaagctcctgggcaatgtgctggtgtgtgtgctggcccgccactttggcaaggaattcaccccacagatgcagggtgcctttcagaaggtggtagctggtgtggccaatgccctcgcccacaaatatcac
+   rat         ctaactgatgctgagaaggctgctgttaatgccctgtggggaaaggtgaaccctgatgatgttggtggcgaggccctgggcaggctgctggttgtctacccttggacccagaggtactttgatagctttggggacctgtcctctgcctctgctatcatgggtaaccctaaggtgaaggcccatggcaagaaggtgataaacgccttcaatgatggcctgaaacacttggacaacctcaagggcacctttgctcatctgagtgaactccactgtgacaagctgcatgtggatcctgagaacttcaggctcctgggcaatatgattgtgattgtgttgggccaccacctgggcaaggaattcaccccctgtgcacaggctgccttccagaaggtggtggctggagtggccagtgccctggctcacaagtaccac
+   mouse       ctgactgatgctgagaagtctgctgtctcttgcctgtgggcaaaggtgaaccccgatgaagttggtggtgaggccctgggcaggctgctggttgtctacccttggacccagcggtactttgatagctttggagacctatcctctgcctctgctatcatgggtaatcccaaggtgaaggcccatggcaaaaaggtgataactgcctttaacgagggcctgaaaaacctggacaacctcaagggcacctttgccagcctcagtgagctccactgtgacaagctgcatgtggatcctgagaacttcaggctcctaggcaatgcgatcgtgattgtgctgggccaccacctgggcaaggatttcacccctgctgcacaggctgccttccagaaggtggtggctggagtggccactgccctggctcacaagtaccac
+   hamster     ctgactgatgctgagaaggcccttgtcactggcctgtggggaaaggtgaacgccgatgcagttggcgctgaggccctgggcaggttgctggttgtctacccttggacccagaggttctttgaacactttggagacctgtctctgccagttgctgtcatgaataacccccaggtgaaggcccatggcaagaaggtgatccactccttcgctgatggcctgaaacacctggacaacctgaagggcgccttttccagcctgagtgagctccactgtgacaagctgcacgtggatcctgagaacttcaagctcctgggcaatatgatcatcattgtgctgatccacgacctgggcaaggacttcactcccagtgcacagtctgcctttcataaggtggtggctggtgtggccaatgccctggctcacaagtaccac
+   marsupial   ttgacttctgaggagaagaactgcatcactaccatctggtctaaggtgcaggttgaccagactggtggtgaggcccttggcaggatgctcgttgtctacccctggaccaccaggttttttgggagctttggtgatctgtcctctcctggcgctgtcatgtcaaattctaaggttcaagcccatggtgctaaggtgttgacctccttcggtgaagcagtcaagcatttggacaacctgaagggtacttatgccaagttgagtgagctccactgtgacaagctgcatgtggaccctgagaacttcaagatgctggggaatatcattgtgatctgcctggctgagcactttggcaaggattttactcctgaatgtcaggttgcttggcagaagctcgtggctggagttgcccatgccctggcccacaagtaccac
+   duck        tggacagccgaggagaagcagctcatcaccggcctctggggcaaggtcaatgtggccgactgtggagctgaggccctggccaggctgctgatcgtctacccctggacccagaggttcttcgcctccttcgggaacctgtccagccccactgccatccttggcaaccccatggtccgtgcccatggcaagaaagtgctcacctccttcggagatgctgtgaagaacctggacaacatcaagaacaccttcgcccagctgtccgagctgcactgcgacaagctgcacgtggaccctgagaacttcaggctcctgggtgacatcctcatcatcgtcctggccgcccacttcaccaaggatttcactcctgactgccaggccgcctggcagaagctggtccgcgtggtggcccacgctctggcccgcaagtaccac
+   chicken     tggactgctgaggagaagcagctcatcaccggcctctggggcaaggtcaatgtggccgaatgtggggccgaagccctggccaggctgctgatcgtctacccctggacccagaggttctttgcgtcctttgggaacctctccagccccactgccatccttggcaaccccatggtccgcgcccacggcaagaaagtgctcacctcctttggggatgctgtgaagaacctggacaacatcaagaacaccttctcccaactgtccgaactgcattgtgacaagctgcatgtggaccccgagaacttcaggctcctgggtgacatcctcatcattgtcctggccgcccacttcagcaaggacttcactcctgaatgccaggctgcctggcagaagctggtccgcgtggtggcccatgccctggctcgcaagtaccac
+   xenlaev     tggacagctgaagagaaggccgccatcacttctgtatggcagaaggtcaatgtagaacatgatggccatgatgccctgggcaggctgctgattgtgtacccctggacccagagatacttcagtaactttggaaacctctccaattcagctgctgttgctggaaatgccaaggttcaagcccatggcaagaaggttctttcagctgttggcaatgccattagccatattgacagtgtgaagtcctctctccaacaactcagtaagatccatgccactgaactgtttgtggaccctgagaactttaagcgttttggtggagttctggtcattgtcttgggtgccaaactgggaactgccttcactcctaaagttcaggctgcttgggagaaattcattgcagttttggttgatggtcttagccagggctataac
+   xentrop     tggacagctgaagaaaaagcaaccattgcttctgtgtgggggaaagtcgacattgaacaggatggccatgatgcattatccaggctgctggttgtttatccctggactcagaggtacttcagcagttttggaaacctctccaatgtctccgctgtctctggaaatgtcaaggttaaagcccatggaaataaagtcctgtcagctgttggcagtgcaatccagcatctggatgatgtgaagagccaccttaaaggtcttagcaagagccatgctgaggatcttcatgtggatcccgaaaacttcaagcgccttgcggatgttctggtgatcgttctggctgccaaacttggatctgccttcactccccaagtccaagctgtctgggagaagctcaatgcaactctggtggctgctcttagccatggctacttc
+   ;
+end;
+
+begin mrbayes;
+   [The following block illustrates how to set up two data partitions
+    and use different models for the different partitions.]
+   charset non_coding = 1-90 358-432;
+   charset coding     = 91-357;
+   partition region = 2:non_coding,coding;
+   set partition = region;
+   
+   [The following lines set a codon model for the second data partition (coding) and
+    allows the non_coding and coding partitions to have different overall rates.]
+   lset applyto=(2) nucmodel=codon;
+   prset ratepr=variable;
+   
+   [Codon models are computationally complex so the following lines set the parameters
+    of the MCMC such that only 1 chain is run for 100 generations and results are printed
+    to screen and to file every tenth generation. To start this chain, you need to type
+    'mcmc' after executing this block. You need to run the chain longer to get adequate
+    convergence.]
+   mcmcp ngen=100 nchains=1 printfreq=10 samplefreq=10;
+end;
diff --git a/test/TranslateIn/bglobinoof.nex b/test/TranslateIn/bglobinoof.nex
new file mode 100755
index 0000000..36bd0ff
--- /dev/null
+++ b/test/TranslateIn/bglobinoof.nex
@@ -0,0 +1,29 @@
+#NEXUS
+
+begin data;
+   dimensions ntax=17 nchar=432;
+   format datatype=dna missing=?;
+   matrix
+   human       ctgactcctgaggagaagtctgccgttactgccctgtggggcaaggtgaacgtggatgaagttggtggtgaggccctgggcaggctgctggtggtctacccttggacccagaggttctttgagtcctttggggatctgtccactcctgatgctgttatgggcaaccctaaggtgaaggctcatggcaagaaagtgctcggtgcctttagtgatggcctggctcacctggacaacctcaagggcacctttgccacactgagtgagctgcactgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggtctgtgtgctggcccatcactttggcaaagaattcaccccaccagtgcaggctgcctatcagaaagtggtggctggtgtggctaatgccctggcccacaagtatcac
+   tarsier     ctgactgctgaagagaaggccgccgtcactgccctgtggggcaaggtagacgtggaagatgttggtggtgaggccctgggcaggctgctggtcgtctacccatggacccagaggttctttgactcctttggggacctgtccactcctgccgctgttatgagcaatgctaaggtcaaggcccatggcaaaaaggtgctgaacgcctttagtgacggcatggctcatctggacaacctcaagggcacctttgctaagctgagtgagctgcactgtgacaaattgcacgtggatcctgagaatttcaggctcttgggcaatgtgctggtgtgtgtgctggcccaccactttggcaaagaattcaccccgcaggttcaggctgcctatcagaaggtggtggctggtgtggctactgccttggctcacaagtaccac
+   bushbaby    ctgactcctgatgagaagaatgccgtttgtgccctgtggggcaaggtgaatgtggaagaagttggtggtgaggccctgggcaggctgctggttgtctacccatggacccagaggttctttgactcctttggggacctgtcctctccttctgctgttatgggcaaccctaaagtgaaggcccacggcaagaaggtgctgagtgcctttagcgagggcctgaatcacctggacaacctcaagggcacctttgctaagctgagtgagctgcattgtgacaagctgcacgtggaccctgagaacttcaggctcctgggcaacgtgctggtggttgtcctggctcaccactttggcaaggatttcaccccacaggtgcaggctgcctatcagaaggtggtggctggtgtggctactgccctggctcacaaataccac
+   hare        ctgtccggtgaggagaagtctgcggtcactgccctgtggggcaaggtgaatgtggaagaagttggtggtgagaccctgggcaggctgctggttgtctacccatggacccagaggttcttcgagtcctttggggacctgtccactgcttctgctgttatgggcaaccctaaggtgaaggctcatggcaagaaggtgctggctgccttcagtgagggtctgagtcacctggacaacctcaaaggcaccttcgctaagctgagtgaactgcattgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggttattgtgctgtctcatcactttggcaaagaattcactcctcaggtgcaggctgcctatcagaaggtggtggctggtgtggccaatgccctggctcacaaataccac
+   rabbit      ctgtccagtgaggagaagtctgcggtcactgccctgtggggcaaggtgaatgtggaagaagttggtggtgaggccctgggcaggctgctggttgtctacccatggacccagaggttcttcgagtcctttggggacctgtcctctgcaaatgctgttatgaacaatcctaaggtgaaggctcatggcaagaaggtgctggctgccttcagtgagggtctgagtcacctggacaacctcaaaggcacctttgctaagctgagtgaactgcactgtgacaagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggttattgtgctgtctcatcattttggcaaagaattcactcctcaggtgcaggctgcctatcagaaggtggtggctggtgtggccaatgccctggctcacaaataccac
+   cow         ctgactgctgaggagaaggctgccgtcaccgccttttggggcaaggtgaaagtggatgaagttggtggtgaggccctgggcaggctgctggttgtctacccctggactcagaggttctttgagtcctttggggacttgtccactgctgatgctgttatgaacaaccctaaggtgaaggcccatggcaagaaggtgctagattcctttagtaatggcatgaagcatctcgatgacctcaagggcacctttgctgcgctgagtgagctgcactgtgataagctgcatgtggatcctgagaacttcaagctcctgggcaacgtgctagtggttgtgctggctcgcaattttggcaaggaattcaccccggtgctgcaggctgactttcagaaggtggtggctggtgtggccaatgccctggcccacagatatcat
+   sheep       ctgactgctgaggagaaggctgccgtcaccggcttctggggcaaggtgaaagtggatgaagttggtgctgaggccctgggcaggctgctggttgtctacccctggactcagaggttctttgagcactttggggacttgtccaatgctgatgctgttatgaacaaccctaaggtgaaggcccatggcaagaaggtgctagactcctttagtaacggcatgaagcatctcgatgacctcaagggcacctttgctcagctgagtgagctgcactgtgataagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgctggtggttgtgctggctcgccaccatggcaatgaattcaccccggtgctgcaggctgactttcagaaggtggtggctggtgttgccaatgccctggcccacaaatatcac
+   pig         ctgtctgctgaggagaaggaggccgtcctcggcctgtggggcaaagtgaatgtggacgaagttggtggtgaggccctgggcaggctgctggttgtctacccctggactcagaggttcttcgagtcctttggggacctgtccaatgccgatgccgtcatgggcaatcccaaggtgaaggcccacggcaagaaggtgctccagtccttcagtgacggcctgaaacatctcgacaacctcaagggcacctttgctaagctgagcgagctgcactgtgaccagctgcacgtggatcctgagaacttcaggctcctgggcaacgtgatagtggttgttctggctcgccgccttggccatgacttcaacccgaatgtgcaggctgcttttcagaaggtggtggctggtgttgctaatgccctggcccacaagtaccac
+   elephseal   ttgacggcggaggagaagtctgccgtcacctccctgtggggcaaagtgaaggtggatgaagttggtggtgaagccctgggcaggctgctggttgtctacccctggactcagaggttctttgactcctttggggacctgtcctctcctaatgctattatgagcaaccccaaggtcaaggcccatggcaagaaggtgctgaattcctttagtgatggcctgaagaatctggacaacctcaagggcacctttgctaagctcagtgagctgcactgtgaccagctgcatgtggatcccgagaacttcaagctcctgggcaatgtgctggtgtgtgtgctggcccgccactttggcaaggaattcaccccacagatgcagggtgcctttcagaaggtggtagctggtgtggccaatgccctcgcccacaaatatcac
+   rat         ctaactgatgctgagaaggctgctgttaatgccctgtggggaaaggtgaaccctgatgatgttggtggcgaggccctgggcaggctgctggttgtctacccttggacccagaggtactttgatagctttggggacctgtcctctgcctctgctatcatgggtaaccctaaggtgaaggcccatggcaagaaggtgataaacgccttcaatgatggcctgaaacacttggacaacctcaagggcacctttgctcatctgagtgaactccactgtgacaagctgcatgtggatcctgagaacttcaggctcctgggcaatatgattgtgattgtgttgggccaccacctgggcaaggaattcaccccctgtgcacaggctgccttccagaaggtggtggctggagtggccagtgccctggctcacaagtaccac
+   mouse       ctgactgatgctgagaagtctgctgtctcttgcctgtgggcaaaggtgaaccccgatgaagttggtggtgaggccctgggcaggctgctggttgtctacccttggacccagcggtactttgatagctttggagacctatcctctgcctctgctatcatgggtaatcccaaggtgaaggcccatggcaaaaaggtgataactgcctttaacgagggcctgaaaaacctggacaacctcaagggcacctttgccagcctcagtgagctccactgtgacaagctgcatgtggatcctgagaacttcaggctcctaggcaatgcgatcgtgattgtgctgggccaccacctgggcaaggatttcacccctgctgcacaggctgccttccagaaggtggtggctggagtggccactgccctggctcacaagtaccac
+   hamster     ctgactgatgctgagaaggcccttgtcactggcctgtggggaaaggtgaacgccgatgcagttggcgctgaggccctgggcaggttgctggttgtctacccttggacccagaggttctttgaacactttggagacctgtctctgccagttgctgtcatgaataacccccaggtgaaggcccatggcaagaaggtgatccactccttcgctgatggcctgaaacacctggacaacctgaagggcgccttttccagcctgagtgagctccactgtgacaagctgcacgtggatcctgagaacttcaagctcctgggcaatatgatcatcattgtgctgatccacgacctgggcaaggacttcactcccagtgcacagtctgcctttcataaggtggtggctggtgtggccaatgccctggctcacaagtaccac
+   marsupial   ttgacttctgaggagaagaactgcatcactaccatctggtctaaggtgcaggttgaccagactggtggtgaggcccttggcaggatgctcgttgtctacccctggaccaccaggttttttgggagctttggtgatctgtcctctcctggcgctgtcatgtcaaattctaaggttcaagcccatggtgctaaggtgttgacctccttcggtgaagcagtcaagcatttggacaacctgaagggtacttatgccaagttgagtgagctccactgtgacaagctgcatgtggaccctgagaacttcaagatgctggggaatatcattgtgatctgcctggctgagcactttggcaaggattttactcctgaatgtcaggttgcttggcagaagctcgtggctggagttgcccatgccctggcccacaagtaccac
+   duck        tggacagccgaggagaagcagctcatcaccggcctctggggcaaggtcaatgtggccgactgtggagctgaggccctggccaggctgctgatcgtctacccctggacccagaggttcttcgcctccttcgggaacctgtccagccccactgccatccttggcaaccccatggtccgtgcccatggcaagaaagtgctcacctccttcggagatgctgtgaagaacctggacaacatcaagaacaccttcgcccagctgtccgagctgcactgcgacaagctgcacgtggaccctgagaacttcaggctcctgggtgacatcctcatcatcgtcctggccgcccacttcaccaaggatttcactcctgactgccaggccgcctggcagaagctggtccgcgtggtggcccacgctctggcccgcaagtaccac
+   chicken     tggactgctgaggagaagcagctcatcaccggcctctggggcaaggtcaatgtggccgaatgtggggccgaagccctggccaggctgctgatcgtctacccctggacccagaggttctttgcgtcctttgggaacctctccagccccactgccatccttggcaaccccatggtccgcgcccacggcaagaaagtgctcacctcctttggggatgctgtgaagaacctggacaacatcaagaacaccttctcccaactgtccgaactgcattgtgacaagctgcatgtggaccccgagaacttcaggctcctgggtgacatcctcatcattgtcctggccgcccacttcagcaaggacttcactcctgaatgccaggctgcctggcagaagctggtccgcgtggtggcccatgccctggctcgcaagtaccac
+   xenlaev     tggacagctgaagagaaggccgccatcacttctgtatggcagaaggtcaatgtagaacatgatggccatgatgccctgggcaggctgctgattgtgtacccctggacccagagatacttcagtaactttggaaacctctccaattcagctgctgttgctggaaatgccaaggttcaagcccatggcaagaaggttctttcagctgttggcaatgccattagccatattgacagtgtgaagtcctctctccaacaactcagtaagatccatgccactgaactgtttgtggaccctgagaactttaagcgttttggtggagttctggtcattgtcttgggtgccaaactgggaactgccttcactcctaaagttcaggctgcttgggagaaattcattgcagttttggttgatggtcttagccagggctataac
+   xentrop     tggacagctgaagaaaaagcaaccattgcttctgtgtgggggaaagtcgacattgaacaggatggccatgatgcattatccaggctgctggttgtttatccctggactcagaggtacttcagcagttttggaaacctctccaatgtctccgctgtctctggaaatgtcaaggttaaagcccatggaaataaagtcctgtcagctgttggcagtgcaatccagcatctggatgatgtgaagagccaccttaaaggtcttagcaagagccatgctgaggatcttcatgtggatcccgaaaacttcaagcgccttgcggatgttctggtgatcgttctggctgccaaacttggatctgccttcactccccaagtccaagctgtctgggagaagctcaatgcaactctggtggctgctcttagccatggctacttc
+   ;
+end;
+
+begin codons;
+	codonposset * def = N: 1-3 19-21, 1:4-18\3 22-.\3 , 2:5-18\3 23-.\3, 3:6-18\3 24-.\3 ;
+end;
diff --git a/test/TranslateOut/bglobin.nex b/test/TranslateOut/bglobin.nex
new file mode 100755
index 0000000..d9cf0ee
--- /dev/null
+++ b/test/TranslateOut/bglobin.nex
@@ -0,0 +1,29 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 17;
+    TAXLABELS human tarsier bushbaby hare rabbit cow sheep pig elephseal rat mouse hamster marsupial duck chicken xenlaev xentrop;
+END;
+BEGIN CHARACTERS;
+    DIMENSIONS NChar=144;
+    FORMAT Datatype=Protein;
+Matrix
+human         LTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH
+tarsier       LTAEEKAAVTALWGKVDVEDVGGEALGRLLVVYPWTQRFFDSFGDLSTPAAVMSNAKVKAHGKKVLNAFSDGMAHLDNLKGTFAKLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVATALAHKYH
+bushbaby      LTPDEKNAVCALWGKVNVEEVGGEALGRLLVVYPWTQRFFDSFGDLSSPSAVMGNPKVKAHGKKVLSAFSEGLNHLDNLKGTFAKLSELHCDKLHVDPENFRLLGNVLVVVLAHHFGKDFTPQVQAAYQKVVAGVATALAHKYH
+hare          LSGEEKSAVTALWGKVNVEEVGGETLGRLLVVYPWTQRFFESFGDLSTASAVMGNPKVKAHGKKVLAAFSEGLSHLDNLKGTFAKLSELHCDKLHVDPENFRLLGNVLVIVLSHHFGKEFTPQVQAAYQKVVAGVANALAHKYH
+rabbit        LSSEEKSAVTALWGKVNVEEVGGEALGRLLVVYPWTQRFFESFGDLSSANAVMNNPKVKAHGKKVLAAFSEGLSHLDNLKGTFAKLSELHCDKLHVDPENFRLLGNVLVIVLSHHFGKEFTPQVQAAYQKVVAGVANALAHKYH
+cow           LTAEEKAAVTAFWGKVKVDEVGGEALGRLLVVYPWTQRFFESFGDLSTADAVMNNPKVKAHGKKVLDSFSNGMKHLDDLKGTFAALSELHCDKLHVDPENFKLLGNVLVVVLARNFGKEFTPVLQADFQKVVAGVANALAHRYH
+sheep         LTAEEKAAVTGFWGKVKVDEVGAEALGRLLVVYPWTQRFFEHFGDLSNADAVMNNPKVKAHGKKVLDSFSNGMKHLDDLKGTFAQLSELHCDKLHVDPENFRLLGNVLVVVLARHHGNEFTPVLQADFQKVVAGVANALAHKYH
+pig           LSAEEKEAVLGLWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSNADAVMGNPKVKAHGKKVLQSFSDGLKHLDNLKGTFAKLSELHCDQLHVDPENFRLLGNVIVVVLARRLGHDFNPNVQAAFQKVVAGVANALAHKYH
+elephseal     LTAEEKSAVTSLWGKVKVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPNAIMSNPKVKAHGKKVLNSFSDGLKNLDNLKGTFAKLSELHCDQLHVDPENFKLLGNVLVCVLARHFGKEFTPQMQGAFQKVVAGVANALAHKYH
+rat           LTDAEKAAVNALWGKVNPDDVGGEALGRLLVVYPWTQRYFDSFGDLSSASAIMGNPKVKAHGKKVINAFNDGLKHLDNLKGTFAHLSELHCDKLHVDPENFRLLGNMIVIVLGHHLGKEFTPCAQAAFQKVVAGVASALAHKYH
+mouse         LTDAEKSAVSCLWAKVNPDEVGGEALGRLLVVYPWTQRYFDSFGDLSSASAIMGNPKVKAHGKKVITAFNEGLKNLDNLKGTFASLSELHCDKLHVDPENFRLLGNAIVIVLGHHLGKDFTPAAQAAFQKVVAGVATALAHKYH
+hamster       LTDAEKALVTGLWGKVNADAVGAEALGRLLVVYPWTQRFFEHFGDLSLPVAVMNNPQVKAHGKKVIHSFADGLKHLDNLKGAFSSLSELHCDKLHVDPENFKLLGNMIIIVLIHDLGKDFTPSAQSAFHKVVAGVANALAHKYH
+marsupial     LTSEEKNCITTIWSKVQVDQTGGEALGRMLVVYPWTTRFFGSFGDLSSPGAVMSNSKVQAHGAKVLTSFGEAVKHLDNLKGTYAKLSELHCDKLHVDPENFKMLGNIIVICLAEHFGKDFTPECQVAWQKLVAGVAHALAHKYH
+duck          WTAEEKQLITGLWGKVNVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLDNIKNTFAQLSELHCDKLHVDPENFRLLGDILIIVLAAHFTKDFTPDCQAAWQKLVRVVAHALARKYH
+chicken       WTAEEKQLITGLWGKVNVAECGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLDNIKNTFSQLSELHCDKLHVDPENFRLLGDILIIVLAAHFSKDFTPECQAAWQKLVRVVAHALARKYH
+xenlaev       WTAEEKAAITSVWQKVNVEHDGHDALGRLLIVYPWTQRYFSNFGNLSNSAAVAGNAKVQAHGKKVLSAVGNAISHIDSVKSSLQQLSKIHATELFVDPENFKRFGGVLVIVLGAKLGTAFTPKVQAAWEKFIAVLVDGLSQGYN
+xentrop       WTAEEKATIASVWGKVDIEQDGHDALSRLLVVYPWTQRYFSSFGNLSNVSAVSGNVKVKAHGNKVLSAVGSAIQHLDDVKSHLKGLSKSHAEDLHVDPENFKRLADVLVIVLAAKLGSAFTPQVQAVWEKLNATLVAALSHGYF
+;
+END;
diff --git a/test/TranslateOut/bglobinoof.nex b/test/TranslateOut/bglobinoof.nex
new file mode 100755
index 0000000..218649f
--- /dev/null
+++ b/test/TranslateOut/bglobinoof.nex
@@ -0,0 +1,52 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 17;
+    TAXLABELS human tarsier bushbaby hare rabbit cow sheep pig elephseal rat mouse hamster marsupial duck chicken xenlaev xentrop;
+END;
+BEGIN CHARACTERS;
+    DIMENSIONS NChar=142;
+    FORMAT Datatype=Protein;
+Matrix
+human         TPEEKAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH
+tarsier       TAEEKAVTALWGKVDVEDVGGEALGRLLVVYPWTQRFFDSFGDLSTPAAVMSNAKVKAHGKKVLNAFSDGMAHLDNLKGTFAKLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPQVQAAYQKVVAGVATALAHKYH
+bushbaby      TPDEKAVCALWGKVNVEEVGGEALGRLLVVYPWTQRFFDSFGDLSSPSAVMGNPKVKAHGKKVLSAFSEGLNHLDNLKGTFAKLSELHCDKLHVDPENFRLLGNVLVVVLAHHFGKDFTPQVQAAYQKVVAGVATALAHKYH
+hare          SGEEKAVTALWGKVNVEEVGGETLGRLLVVYPWTQRFFESFGDLSTASAVMGNPKVKAHGKKVLAAFSEGLSHLDNLKGTFAKLSELHCDKLHVDPENFRLLGNVLVIVLSHHFGKEFTPQVQAAYQKVVAGVANALAHKYH
+rabbit        SSEEKAVTALWGKVNVEEVGGEALGRLLVVYPWTQRFFESFGDLSSANAVMNNPKVKAHGKKVLAAFSEGLSHLDNLKGTFAKLSELHCDKLHVDPENFRLLGNVLVIVLSHHFGKEFTPQVQAAYQKVVAGVANALAHKYH
+cow           TAEEKAVTAFWGKVKVDEVGGEALGRLLVVYPWTQRFFESFGDLSTADAVMNNPKVKAHGKKVLDSFSNGMKHLDDLKGTFAALSELHCDKLHVDPENFKLLGNVLVVVLARNFGKEFTPVLQADFQKVVAGVANALAHRYH
+sheep         TAEEKAVTGFWGKVKVDEVGAEALGRLLVVYPWTQRFFEHFGDLSNADAVMNNPKVKAHGKKVLDSFSNGMKHLDDLKGTFAQLSELHCDKLHVDPENFRLLGNVLVVVLARHHGNEFTPVLQADFQKVVAGVANALAHKYH
+pig           SAEEKAVLGLWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSNADAVMGNPKVKAHGKKVLQSFSDGLKHLDNLKGTFAKLSELHCDQLHVDPENFRLLGNVIVVVLARRLGHDFNPNVQAAFQKVVAGVANALAHKYH
+elephseal     TAEEKAVTSLWGKVKVDEVGGEALGRLLVVYPWTQRFFDSFGDLSSPNAIMSNPKVKAHGKKVLNSFSDGLKNLDNLKGTFAKLSELHCDQLHVDPENFKLLGNVLVCVLARHFGKEFTPQMQGAFQKVVAGVANALAHKYH
+rat           TDAEKAVNALWGKVNPDDVGGEALGRLLVVYPWTQRYFDSFGDLSSASAIMGNPKVKAHGKKVINAFNDGLKHLDNLKGTFAHLSELHCDKLHVDPENFRLLGNMIVIVLGHHLGKEFTPCAQAAFQKVVAGVASALAHKYH
+mouse         TDAEKAVSCLWAKVNPDEVGGEALGRLLVVYPWTQRYFDSFGDLSSASAIMGNPKVKAHGKKVITAFNEGLKNLDNLKGTFASLSELHCDKLHVDPENFRLLGNAIVIVLGHHLGKDFTPAAQAAFQKVVAGVATALAHKYH
+hamster       TDAEKLVTGLWGKVNADAVGAEALGRLLVVYPWTQRFFEHFGDLSLPVAVMNNPQVKAHGKKVIHSFADGLKHLDNLKGAFSSLSELHCDKLHVDPENFKLLGNMIIIVLIHDLGKDFTPSAQSAFHKVVAGVANALAHKYH
+marsupial     TSEEKCITTIWSKVQVDQTGGEALGRMLVVYPWTTRFFGSFGDLSSPGAVMSNSKVQAHGAKVLTSFGEAVKHLDNLKGTYAKLSELHCDKLHVDPENFKMLGNIIVICLAEHFGKDFTPECQVAWQKLVAGVAHALAHKYH
+duck          TAEEKLITGLWGKVNVADCGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLDNIKNTFAQLSELHCDKLHVDPENFRLLGDILIIVLAAHFTKDFTPDCQAAWQKLVRVVAHALARKYH
+chicken       TAEEKLITGLWGKVNVAECGAEALARLLIVYPWTQRFFASFGNLSSPTAILGNPMVRAHGKKVLTSFGDAVKNLDNIKNTFSQLSELHCDKLHVDPENFRLLGDILIIVLAAHFSKDFTPECQAAWQKLVRVVAHALARKYH
+xenlaev       TAEEKAITSVWQKVNVEHDGHDALGRLLIVYPWTQRYFSNFGNLSNSAAVAGNAKVQAHGKKVLSAVGNAISHIDSVKSSLQQLSKIHATELFVDPENFKRFGGVLVIVLGAKLGTAFTPKVQAAWEKFIAVLVDGLSQGYN
+xentrop       TAEEKTIASVWGKVDIEQDGHDALSRLLVVYPWTQRYFSSFGNLSNVSAVSGNVKVKAHGNKVLSAVGSAIQHLDDVKSHLKGLSKSHAEDLHVDPENFKRLADVLVIVLAAKLGSAFTPQVQAVWEKLNATLVAALSHGYF
+;
+END;
+BEGIN CHARACTERS;
+    DIMENSIONS NChar=6;
+    FORMAT Datatype=DNA;
+Matrix
+human         CTGTCT
+tarsier       CTGGCC
+bushbaby      CTGAAT
+hare          CTGTCT
+rabbit        CTGTCT
+cow           CTGGCT
+sheep         CTGGCT
+pig           CTGGAG
+elephseal     TTGTCT
+rat           CTAGCT
+mouse         CTGTCT
+hamster       CTGGCC
+marsupial     TTGAAC
+duck          TGGCAG
+chicken       TGGCAG
+xenlaev       TGGGCC
+xentrop       TGGGCA
+;
+END;
diff --git a/test/data/characters.nex b/test/data/characters.nex
new file mode 100644
index 0000000..f77d3dc
--- /dev/null
+++ b/test/data/characters.nex
@@ -0,0 +1,83 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 6;
+    TAXLABELS P._fimbriata P._robusta P._americana P._myriophylla P._polygama P._macrophylla;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=45;
+    FORMAT Datatype=DNA  Gap=-;
+Matrix
+P._fimbriata       ACCTCGGCTTAACGAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._robusta         ACCTCGGCTTAACCAACCTCGGCTTAACGAACCTCGGCTTAACGA
+P._americana       ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTCGCTTTCACCA
+P._myriophylla     ACGTCGCTTTCA---ACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._polygama        ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTC?CTTTCACCA
+P._macrophylla     ACGTCGCTCTCACCAACGTCGCTTTCACCAACGTCGCTTTCACCA
+;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_2;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=3;
+    FORMAT Datatype=Standard Symbols="01" Tokens;
+    CharStateLabels 
+      1 leaf_margins /  entire fimbriate,
+      2 flower_color /  white_to_cream crimson,
+      3 breeding_system /  hermaphroditic gynomonoecious gynodioecious dioecious;
+Matrix
+P._fimbriata        fimbriate crimson gynomonoecious
+P._robusta          fimbriate crimson gynomonoecious
+P._americana        entire white_to_cream hermaphroditic
+P._myriophylla      entire white_to_cream hermaphroditic
+P._polygama         entire white_to_cream dioecious
+P._macrophylla      entire crimson gynodioecious
+;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_3;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=3;
+    FORMAT Datatype=Standard Symbols="0123";
+    CharStateLabels 
+      1 leaf_margins /  entire fimbriate,
+      2 flower_color /  white_to_cream crimson,
+      3 breeding_system /  hermaphroditic gynomonoecious gynodioecious dioecious;
+Matrix
+P._fimbriata       111
+P._robusta         111
+P._americana       000
+P._myriophylla     000
+P._polygama        003
+P._macrophylla     012
+;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_4;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NTax=4 NChar=15;
+    FORMAT Datatype=DNA;
+Matrix
+P._fimbriata       ACCTCGGCTTAACGA
+P._robusta         ACCTCGGCTTAACCA
+P._americana       ACGTCGCTCTCACCA
+P._myriophylla     ACGTCGCTTTCACCA
+;
+END;
+BEGIN CHARACTERS;
+    TITLE Untitled_CHARACTERS_Block_5;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    DIMENSIONS NChar=15;
+    FORMAT Datatype=DNA;
+    CHARLABELS site_1 site_2 site_3 site_4 site_5 site_6 site_7 site_8 site_9 site_10 site_11 site_12 site_13 site_14 site_15;
+Matrix
+P._fimbriata       ACCTCGGCTTAACGA
+P._robusta         ACCTCGGCTTAACCA
+P._americana       ACGTCGCTCTCACCA
+P._myriophylla     ACGTCGCTTTCACCA
+P._polygama        ACCTCGCTTTCACGA
+P._macrophylla     ACCTCGCTTTCACGA
+;
+END;
diff --git a/test/data/sample.tre b/test/data/sample.tre
new file mode 100644
index 0000000..9eb69ca
--- /dev/null
+++ b/test/data/sample.tre
@@ -0,0 +1,29 @@
+#NEXUS
+BEGIN PAUP;
+    lset nst = 2 basefreq = empirical tratio = estimate rates = gamma shape = estimate;
+END;
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 11;
+    TAXLABELS P._fimbriata P._robusta P._americana P._myriophylla P._articulata P._parksii P._gracilis P._macrophylla P._polygama P._basiramia P._ciliata;
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 P._fimbriata,
+        2 P._robusta,
+        3 P._americana,
+        4 P._myriophylla,
+        5 P._articulata,
+        6 P._parksii,
+        7 P._gracilis,
+        8 P._macrophylla,
+        9 P._polygama,
+        10 P._basiramia,
+        11 P._ciliata;
+    TREE unrooted = [&U](1,2,((4,3,(5,6)),((9,8),(7,(10,11)))));
+    TREE rooted = [&R]((1,2),((4,3,(5,6)),(9,(8,(7,(10,11))))));
+    TREE u_to_r = [&R]((1,2),((4,3,(5,6)),(9,(8,(7,(10,11))))));
+    TREE r_to_u = [&U](1,2,((4,3,(5,6)),((9,8),(7,(10,11)))));
+END;
diff --git a/test/funkyValidIn/choke.tre b/test/funkyValidIn/choke.tre
new file mode 100755
index 0000000..58b0fa4
--- /dev/null
+++ b/test/funkyValidIn/choke.tre
@@ -0,0 +1,20 @@
+#NEXUS
+
+Begin trees;  [Treefile saved Thu Apr 01 14:20:40 CDT 2010]
+
+TREE rana_1 = [&R] [&C] ((((((((((CATESBIANADMH84R2:0.009341165670082321,CATESBIANAX12841:0.01670237442008101)1:0.02367784808488773[C=100%],HECKSCHERIMVZ164908:0.024302372055508326)2:0.0045459049779782825[C=70%],(CLAMITANSJSF1118:0.008264805550320975,OKALOOSAE:0.013235191158770237)3:0.008940535544490303[C=100%])4:0.021977070375380405[C=70%],(VIRGATIPESMVZ175944:0.04284830362694966,GRYLIOMVZ175945:0.06812934384157285)5:0.0019862651579835846[C=50%])6:0.0047254144276442055[C=50%],SEPTENTRIO [...]
+
+TREE rana = [&R] (OMILTEMANAJAC7413:0.05279027864290483,(SPECTABILISJAC8622:0.0424908377160199,(((TAYLORI286:0.05527269668494973,(MACROGLOSSAJSF7933:0.0062059300734275055,MACROGLOSSAJAC10472:0.010411319563575425)27:0.012469909096599542)5:0.012729555474823276,(SP_6_COSTARICADMH86_225:0.03107514027636416,(SP_5_COSTARICHDMH86_210:0.03495106213249873,SP_4_PANAMA:0.01414117337827914)34:0.005328810766310077)13:0.005532291072882051)42:0.006856109288283811,(((YAVAPAIENSISJSF1085:0.00652843973685 [...]
+
+[
+TREE rana = [&R] ((SP_4_PANAMA:0.021127779032296068,SP_5_COSTARICHDMH86_210:0.022179351531428602)13:1.0854920792310768E-4,((TAYLORI286:0.04890892173169566,(MACROGLOSSAJAC10472:0.010411319563575425,MACROGLOSSAJSF7933:0.011343727813813716)27:0.02570333862385187)26:0.003258001821749584,((FORRERIJSF1065:0.10230082201206815,((((SP_7_JALISCOJSF1000:0.05607791005990694,MAGNAOCULARISJSF1073:0.07567418994895206)2:0.006880489759192406,SP_8_PUEBLAJAC9467:0.0809317898280862)3:0.006508183319762974,(O [...]
+TREE rana = [&R] (SP_3_MICHOACANJSF955:0.028225397487292143,((SPECTABILISJAC8622:0.025289215188198287,(((FORRERIJSF1065:0.06734392551515846,((ONCALVT3542:0.010384842762018788,YAVAPAIENSISJSF1085:0.007749513009770538)1:0.009770475957002369,(SP_8_PUEBLAJAC9467:0.057412822306649985,(MAGNAOCULARISJSF1073:0.07462886276625352,SP_7_JALISCOJSF1000:0.06845668809712956)61:0.0046794878834765284)55:0.0046794878834765284)13:0.0031165705381667333)7:0.0031165705381667333,((PALUSTRISJSF1110:0.0194341044 [...]
+TREE rana [Rep_1] = [&R] ((BERLANDIERIJSF1136:0.017500204493313444,(NEOVOLCANICAJSF960:0.02103384061586339,TLALOCIJSF1083:0.005917459420145915)19:0.004052885775416705)20:0.007264904375006403,BLAIRIJSF830:0.009215174812490496,((SPHENOCEPHALAUSC7448:0.02080129435038587,UTRICULARIAJSF845:0.019663378430420188)1:0.011573117328478197,(SP_3_MICHOACANJSF955:0.02785686223631827,(OMILTEMANAJAC7413:0.08604274498575198,(SPECTABILISJAC8622:0.025289215188198287,((((YAVAPAIENSISJSF1085:0.00774951300977 [...]
+TREE rana [Rep_1] = [&R] (OMILTEMANAJAC7413:0.04940105797267924,(SPECTABILISJAC8622:0.025289215188198287,(((TAYLORI286:0.04890892173169566,(MACROGLOSSAJSF7933:0.011343727813813716,MACROGLOSSAJAC10472:0.010411319563575425)27:0.02570333862385187)5:0.003258001821749584,(SP_6_COSTARICADMH86_225:0.018542035718163527,(SP_4_PANAMA:0.02823698743155236,SP_5_COSTARICHDMH86_210:0.019178988101033363)34:0.009283183268353907)13:0.009589494050516682)42:0.004617483270304025,(((YAVAPAIENSISJSF1085:0.0077 [...]
+TREE rana [Rep_2] = [&R] (SP_8_PUEBLAJAC9467:0.05396664314854472,((((FORRERIJSF1065:0.05207894469535345,(((((MONTEZUMAEJAC8836:0.015308978041958238,DUNNIJSF1017:0.00969409710919037)7:0.015986330072827282,(SP_2_MEX_JSF1106:0.01969017517595023,(CHIRICAHUENSISJSF1092:0.010058301855385834,(CHIRICAHUENSISJSF1063:0.019433250804891302,SUBAQUAVOCALIS:0.007874436839582012)15:0.0010647538365773416)32:0.009842965719445386)30:0.0057172046230801205)20:0.023588000956833194,(PIPIENSY10945:0.00200292616 [...]
+TREE rana [Rep_2] = [&R] (SP_8_PUEBLAJAC9467:0.05160648914186107,((((FORRERIJSF1065:0.03443311716795429,(((((MONTEZUMAEJAC8836:0.018867383543759563,DUNNIJSF1017:0.02039490832759985)7:0.01801400921787201,(SP_2_MEX_JSF1106:0.03905244398257162,(CHIRICAHUENSISJSF1092:0.01786991616244638,(CHIRICAHUENSISJSF1063:0.023337398877442052,SUBAQUAVOCALIS:0.011175066000873332)15:0.005416486849212688)32:0.03384849743661879)30:0.007705550966073891)20:0.01019450679885723,(PIPIENSJSF1119:0.0078907347873196 [...]
+TREE rana [Rep_2] = [&R] ((SEPTENTRIONALESDCC3588:0.03203917323623255,((VIRGATIPESMVZ175944:0.050044969454344564,GRYLIOMVZ175945:0.07180503150589201)58:0.0012713761570590015,((HECKSCHERIMVZ164908:0.03273052459572119,(CATESBIANADMH84R2:0.01575134279964524,CATESBIANAX12841:0.02257656404265604)29:0.022971056898255144)55:0.005454613220996143,(CLAMITANSJSF1118:0.004470889400142231,OKALOOSAE:0.02437316748799989)48:0.008252440673483071)34:0.04203566926385222)16:0.007163599313917946)6:0.04259932 [...]
+TREE rana [Rep_2] = [&R] (((((SP_8_PUEBLAJAC9467:0.05160648914186107,(SP_7_JALISCOJSF1000:0.03920568489003077,MAGNAOCULARISJSF1073:0.09268135751752579)7:0.0023548520313426426)8:0.002275882370671741,(YAVAPAIENSISJSF1085:0.003277853601627391,ONCALVT3542:0.014456578245332273)43:0.011055904861201789)23:0.011072921188068241,(((SPECTABILISJAC8622:0.0697693437743549,((BLAIRIJSF830:0.010976487081875224,(BERLANDIERIJSF1136:0.01883219572437796,(NEOVOLCANICAJSF960:0.008991492730455611,TLALOCIJSF108 [...]
+TREE rana [Rep_2] = [&R] ((FORRERIJSF1065:0.05002414039045353,((PALUSTRISJSF1110:0.014444548785213724,(AREOLATAJSF1111:0.03274909623968698,(SEVOSAUSC8236:0.024604518182285703,CAPITOSLU003:0.02013177689769946)34:0.015323546707373775)1:0.014444548785213724)6:0.0015280953062097877,(((((MACULATAKU195258:0.03707871677848206,(WARSZEWITSHIIJSF1127:0.09393841368752218,VIBICARIAMVZ11035:0.19242016149693641)49:0.06752155695329196)32:0.03707871677848206,(((PALMIPESECUKU204425:0.0252065630079048,SP_ [...]
+]
+End;
diff --git a/test/funkyValidOut/choke.tre b/test/funkyValidOut/choke.tre
new file mode 100755
index 0000000..f49e020
--- /dev/null
+++ b/test/funkyValidOut/choke.tre
@@ -0,0 +1,77 @@
+#NEXUS
+BEGIN TAXA;
+    TITLE Untitled_TAXA_Block_1;
+    DIMENSIONS NTax = 64;
+    TAXLABELS CATESBIANADMH84R2 CATESBIANAX12841 HECKSCHERIMVZ164908 CLAMITANSJSF1118 OKALOOSAE VIRGATIPESMVZ175944 GRYLIOMVZ175945 SEPTENTRIONALESDCC3588 SYLVATICADMH84R43 SYLVATICAMVZ137426 LUTEIVENTRIS_WA_MVZ225749 LUTEIVENTRIS_MT_MVZ191016 TEMPORARIADMH84R1 CASCADAEMVZ148946 AURORAMVZ13957 MUSCOSAMVZ149006 BOYLIIMVZ148929 PALMIPESECUKU204425 SP_1_ECUADORQCAZ13219 PALMIPESVENAMNHA118801 BWANAQCAZ13964 VAILLANTIKU195299 JULIANITNHC60324 WARSZEWITSHIIJSF1127 VIBICARIAMVZ11035 MACULATAKU [...]
+END;
+BEGIN TREES;
+    TITLE Untitled_TREES_Block_1;
+    LINK TAXA = Untitled_TAXA_Block_1;
+    TRANSLATE
+        1 CATESBIANADMH84R2,
+        2 CATESBIANAX12841,
+        3 HECKSCHERIMVZ164908,
+        4 CLAMITANSJSF1118,
+        5 OKALOOSAE,
+        6 VIRGATIPESMVZ175944,
+        7 GRYLIOMVZ175945,
+        8 SEPTENTRIONALESDCC3588,
+        9 SYLVATICADMH84R43,
+        10 SYLVATICAMVZ137426,
+        11 LUTEIVENTRIS_WA_MVZ225749,
+        12 LUTEIVENTRIS_MT_MVZ191016,
+        13 TEMPORARIADMH84R1,
+        14 CASCADAEMVZ148946,
+        15 AURORAMVZ13957,
+        16 MUSCOSAMVZ149006,
+        17 BOYLIIMVZ148929,
+        18 PALMIPESECUKU204425,
+        19 SP_1_ECUADORQCAZ13219,
+        20 PALMIPESVENAMNHA118801,
+        21 BWANAQCAZ13964,
+        22 VAILLANTIKU195299,
+        23 JULIANITNHC60324,
+        24 WARSZEWITSHIIJSF1127,
+        25 VIBICARIAMVZ11035,
+        26 MACULATAKU195258,
+        27 PUSTULOSAJAC10555,
+        28 TARAHUMARAEKU194596,
+        29 ZWEIFELIJAC7514,
+        30 PSILONOTAKU195119,
+        31 SIERRAMADRENSISKU195181,
+        32 TLALOCIJSF1083,
+        33 NEOVOLCANICAJSF960,
+        34 BERLANDIERIJSF1136,
+        35 BLAIRIJSF830,
+        36 UTRICULARIAJSF845,
+        37 SPHENOCEPHALAUSC7448,
+        38 SP_3_MICHOACANJSF955,
+        39 OMILTEMANAJAC7413,
+        40 SPECTABILISJAC8622,
+        41 MACROGLOSSAJAC10472,
+        42 MACROGLOSSAJSF7933,
+        43 TAYLORI286,
+        44 SP_4_PANAMA,
+        45 SP_5_COSTARICHDMH86_210,
+        46 SP_6_COSTARICADMH86_225,
+        47 SP_7_JALISCOJSF1000,
+        48 MAGNAOCULARISJSF1073,
+        49 SP_8_PUEBLAJAC9467,
+        50 YAVAPAIENSISJSF1085,
+        51 ONCALVT3542,
+        52 FORRERIJSF1065,
+        53 SEVOSAUSC8236,
+        54 CAPITOSLU003,
+        55 AREOLATAJSF1111,
+        56 PALUSTRISJSF1110,
+        57 SUBAQUAVOCALIS,
+        58 CHIRICAHUENSISJSF1063,
+        59 CHIRICAHUENSISJSF1092,
+        60 SP_2_MEX_JSF1106,
+        61 MONTEZUMAEJAC8836,
+        62 DUNNIJSF1017,
+        63 PIPIENSJSF1119,
+        64 PIPIENSY10945;
+    TREE rana_1 = [&R]((((((((((1:0.009341165670082321,2:0.01670237442008101)1:0.02367784808488773[C=100%],3:0.024302372055508326)2:0.0045459049779782825[C=70%],(4:0.008264805550320975,5:0.013235191158770237)3:0.008940535544490303[C=100%])4:0.021977070375380405[C=70%],(6:0.04284830362694966,7:0.06812934384157285)5:0.0019862651579835846[C=50%])6:0.0047254144276442055[C=50%],8:0.03956838385978453)7:0.04012848057570229[C=70%],(9:0.012575421338134015,10:0.029377519131817416)8:0.0533094813795 [...]
+    TREE rana = [&R](39:0.05279027864290483,(40:0.0424908377160199,(((43:0.05527269668494973,(42:0.0062059300734275055,41:0.010411319563575425)27:0.012469909096599542)5:0.012729555474823276,(46:0.03107514027636416,(45:0.03495106213249873,44:0.01414117337827914)34:0.005328810766310077)13:0.005532291072882051)42:0.006856109288283811,(((50:0.006528439736857989,51:0.006713399183096856)18:0.027219647140666506,((48:0.07462886276625352,47:0.06459443153989383)4:0.013486901874050505,49:0.05426849 [...]
+END;
diff --git a/test/roundTripNCLTest.py b/test/roundTripNCLTest.py
new file mode 100755
index 0000000..19167d5
--- /dev/null
+++ b/test/roundTripNCLTest.py
@@ -0,0 +1,249 @@
+#!/usr/bin/env python
+import sys
+import os
+import subprocess
+import filecmp
+import itertools
+import cStringIO
+import shutil
+
+def runTest(inArgPath,
+            outParent,
+            compareOut=True,
+            copyOutput=False,
+            strictLevel=2, absentOnlyMode=False,
+            copyFile=False,
+            external=False,
+            invalid=False,
+            parseOutput=True,
+            extra_args=[]):
+    if invalid:
+        compareOut = False
+    if external:
+        fileNamePatterns = ["*.dat", "*.phy", "*.fasta", "*.txt", "*.fas", "*.nex", "*.tre", "*.aln"]
+    else:
+        fileNamePatterns = ["*.nex", "*.tre" ]
+    if not os.path.exists(inArgPath):
+        sys.exit("input file " + inArgPath + " does not exist")
+    if os.path.isdir(inArgPath):
+        import glob
+        inParent = inArgPath
+        inFiles = []
+        for pat in fileNamePatterns:
+             inFiles.extend([os.path.basename(i) for i in glob.glob(os.path.join(inArgPath, pat))])
+    else:
+        inParent = os.path.dirname(inArgPath)
+        inFiles = [os.path.basename(inArgPath)]
+
+    if not inFiles:
+        print >>sys.stderr, "No files to test (looking for " + " ".join(fileNamePatterns) + " files)"
+        sys.exit(0)
+
+    if compareOut:
+        if not os.path.exists(outParent):
+            sys.exit(outParent + " does not exist")
+        if not os.path.isdir(outParent):
+            sys.exit(outParent + " must be a directory")
+    #if os.path.samefile(outParent, inParent):
+    #    sys.exit("the input and output directories cannot be the same")
+
+    for f in inFiles:
+        pref = os.path.join(".roundTripNCLOut.nex")
+
+        invokedInFile = os.path.join(inParent, f)
+
+        toCheck = [invokedInFile]
+        if compareOut:
+            expectedOut = os.path.join(outParent, f)
+            if not copyOutput and not os.path.exists(expectedOut):
+                sys.exit("Expected output file " + expectedOut + " does not exist.")
+            if parseOutput:
+                toCheck.append(expectedOut)
+
+
+        if absentOnlyMode and os.path.exists(expectedOut):
+            continue
+
+        for pRep, inFile in enumerate(toCheck):
+            if pRep == 0:
+                n = open(".roundTripNCLInputName.txt", "w")
+                n.write('%s\n' % os.path.abspath(inFile))
+                n.close()
+                if not invalid:
+                    n = open(".roundTripNCLExpectedOutName.txt", "w")
+                    n.write('%s\n' % os.path.abspath(expectedOut))
+                    n.close()
+                if copyFile:
+                    shutil.copy2(inFile, ".roundTripNCLInput.nex")
+            inFile = os.path.abspath(inFile)
+            tf = pref
+            if os.path.exists(tf):
+                os.remove(tf)
+            tFileObj = open(tf, "w")
+            if external and pRep == 0:
+                fileFormat = f.split('_')[0]
+                invocation = [normalizer, "-s%d" % strictLevel, "-f%s" % fileFormat]
+            else:
+                invocation = [normalizer, "-s%d" % strictLevel]
+            invocation.extend(extra_args)
+            invocation.append(inFile)
+            sys.stderr.write('"%s"\n' % '" "'.join(invocation))
+            retCode = subprocess.call(invocation, stdout=tFileObj)
+            tFileObj.close()
+            if invalid:
+                if retCode == 0:
+                    sys.exit("Call to " + normalizer + " accepted the invalid file " + inFile)
+            elif retCode != 0:
+                sys.exit("Call to " + normalizer + " failed for "+ inFile)
+            if copyOutput and pRep == 0:
+                shutil.copy2(tf, expectedOut)
+            elif compareOut:
+                e = file(expectedOut, "rU")
+                o = file(tf, "rU")
+                eit = iter(e)
+                oit = iter(o)
+                n = 1
+                while True:
+                    try:
+                        eLine = eit.next()
+                        try:
+                            oLine = oit.next()
+                        except StopIteration:
+                            oLine = ""
+                    except StopIteration:
+                        eLine = ""
+                        try:
+                            oLine = oit.next()
+                        except StopIteration:
+                            break
+                    if eLine != oLine:
+                        basicMsg = "Call to " +  os.path.basename(normalizer) + " failed to produce expected output for " + inFile + ".\n"
+                        fileInfo = "\nThe output files:\n " + tf + "\nand the expected output:\n " + expectedOut + "\ndiffer at line " + str(n) + "\n"
+                        diff = "Got:\n" + oLine + "\nExpected:\n" + eLine
+                        sys.exit(basicMsg + fileInfo + diff)
+                e.close()
+                o.close()
+                print >>sys.stderr, sys.argv[0], ": Call to", normalizer, "succeeded for", inFile
+            if os.path.exists(tf):
+                os.remove(tf)
+
+
+from optparse import OptionParser
+usage = "%prog [options] <path to normalizer> <input dir> <expected output dir>"
+parser = OptionParser(usage=usage, add_help_option=True, version = 0.2, description="Tool for using NCL's normalizer to test NCL functionality by comparing round trip output to expected output")
+parser.add_option("-a", "--auto",
+              dest="auto",
+              default=False,
+              action="store_true",
+              help="Get <input dir> and <expected output dir> batch file (default is ~/.ncl_round_triprc)")
+parser.add_option("-b", "--batch",
+              dest="batch",
+              default="~/.ncl_round_triprc",
+              help="The path to a file with and pairs of lines indicating <input dir> and <expected output dir>")
+parser.add_option("-p", "--parse",
+              dest="parseOnly",
+              default=False,
+              action="store_true",
+              help="Parse only (do not compare output from \"normalizer\" to expected output)")
+parser.add_option("-c", "--copy",
+              dest="copy",
+              default=False,
+              action="store_true",
+              help="Copy file to ./.roundTripNCLInput.nex before parsing")
+parser.add_option("-f", "--force-equal",
+              dest="force",
+              default=False,
+              action="store_true",
+              help="Copies the generated output to the expected output loctation (does not test validity -- this is used for creating an expected output when you are confident that the normalizer works for a set of files)")
+parser.add_option("-m", "--missing",
+              dest="absent",
+              default=False,
+              action="store_true",
+              help="Only run if the expected output is missing normalizer.")
+parser.add_option("-e", "--external",
+              dest="external",
+              default=False,
+              action="store_true",
+              help="Treat the file as an external (non-NEXUS) format.  The format name should be the prefix to the file name, separated from the rest of the name by an underscore.")
+parser.add_option("-i", "--invalid",
+              dest="invalid",
+              default=False,
+              action="store_true",
+              help="Demand that the parser rejects the file(s) because they are invalid.")
+parser.add_option("-o", "--output-invalid",
+              dest="parseOutput",
+              default=True,
+              action="store_false",
+              help="Do not check the output file by a second round-trip test")
+parser.add_option("-s", "--strictness",
+              dest="strict",
+              default=2,
+              type="int",
+              help="Strictness argument passed in as a -s argument to the normalizer.")
+parser.add_option("-x",
+              dest="x",
+              default=False,
+              action="store_true",
+              help="-x argument to NEXUSnormalizer (means that internal node taxon labels won't be validated during the parse).")
+
+(options, args) = parser.parse_args()
+if options.batch != "~/.ncl_round_triprc":
+    options.auto = True
+if options.absent:
+    options.force = True
+if options.auto:
+    if len(args) != 1:
+        sys.exit("Expecting the path to the normalizer as the only argument when running in auto or batch mode")
+    resourceFilePath = os.path.expanduser(options.batch)
+    if not os.path.exists(resourceFilePath):
+        m = "%s does not exist." % resourceFilePath
+        if options.batch != "~/.ncl_round_triprc":
+            sys.exit(m)
+        print(m + " Test stepped skipped.")
+        sys.exit(0)
+    resourceFileStream = open(resourceFilePath, "rU")
+else:
+    if len(args) != 3:
+        if not options.invalid:
+            sys.exit("""Expecting 3 arguments:
+             1. the path to NEXUS file as a command-line argument, interprets the content, and writes  what it understands (as NEXUS) to standard output.
+             2. the path to the parent of the inputs files to test
+             3. the path to the parent of the expected output.
+             """)
+        elif len(args) != 2:
+            sys.exit("""Expecting 2 arguments:
+             1. the path to NEXUS file as a command-line argument, interprets the content, and writes  what it understands (as NEXUS) to standard output.
+             2. the path to the parent of the inputs files to test
+             """)
+    if not options.invalid:
+        fs = "%s\n%s\n" % (args[1], args[2])
+    else:
+        fs = "%s\n" % (args[1])
+    resourceFileStream = cStringIO.StringIO(fs)
+normalizer = os.path.abspath(args[0])
+if not os.path.exists(normalizer):
+    sys.exit(normalizer + " does not exist")
+
+lineIter = iter(resourceFileStream)
+inputParentPath = "#"
+try:
+    while True:
+        inputParentPath = "#"
+        while len(inputParentPath) < 1 or inputParentPath.strip().startswith("#"):
+            inputParentPath = lineIter.next().strip()
+        if options.invalid:
+            outputParentPath = None
+        else:
+            outputParentPath = "#"
+            while  len(outputParentPath) < 1 or outputParentPath.strip().startswith("#"):
+                outputParentPath = lineIter.next().strip()
+        #print "next round: ", inputParentPath,"\n ", outputParentPath
+        if options.x:
+            extra_args = ['-x']
+        else:
+            extra_args = []
+        runTest(inputParentPath, outputParentPath, not options.parseOnly, options.force, options.strict, options.absent, options.copy, options.external, options.invalid, options.parseOutput, extra_args=extra_args)
+
+except StopIteration:
+    if len(inputParentPath) > 0 and inputParentPath != "#":
+        sys.exit("No matching output path found for %s" % inputParentPath)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/libncl.git



More information about the debian-med-commit mailing list